前天晚上估计是连不上,所以昨天升级了VIP。运行程序,打印“程序还没开始……”,没有任何错误信息,就结束了。
import pandas as pd import numpy as np import datetime import time import os from copy import copy from tqsdk import TqApi, TqAuth, TqAccount, TqKq start_time = '21:00' has_night = True year = datetime.datetime.now().year month = datetime.datetime.now().month day = datetime.datetime.now().day #''' print('程序还没开始......') startTime = datetime.datetime(year, month, day, 20, 49, 0) while datetime.datetime.now() < startTime: time.sleep(600)
print('程序还有10分钟开始……') startTime = datetime.datetime(year, month, day, 20, 59, 0) while datetime.datetime.now() < startTime: time.sleep(10) #''' attempts = 0 success = False while attempts < 200 and not success: try: api = TqApi(account=TqAccount(……), auth=TqAuth(……) success = True except: attempts += 1 account = api.get_account() cash = account.available #资金有十几万元,应该连原油都够开一手的。 df_margin = pd.read_csv('margin.csv') df_symbol = pd.DataFrame() for index,row in df_margin.iterrows(): product = row['product'] margin_rate = row['margin'] try: #future = api.query_quotes(ins_class="FUTURE", product_id=product) future = api.query_cont_quotes(product_id=product,has_night=has_night) except: #future = api.query_quotes(ins_class="FUTURE", product_id=product.upper()) future = api.query_cont_quotes(product_id=product.upper(),has_night=has_night) #''' try: symbol = future[0] except: continue q = api.get_quote(symbol) if q.exchange_id in ['SHFE','INE']: #上期所的合约,有五档行情,平仓要平今仓。 ask_volume = q.ask_volume1 + q.ask_volume2 + q.ask_volume3 + q.ask_volume4 + q.ask_volume5 bid_volume = q.bid_volume1 + q.bid_volume2 + q.bid_volume3 + q.bid_volume4 + q.bid_volume5 close_offset = 'CLOSETODAY' else: #非上期所的合约,只有一档行情,平仓不分今仓和老仓。 ask_volume = q.ask_volume1 bid_volume = q.bid_volume1 close_offset = 'CLOSE' #过滤掉不活跃的合约。 min_vol = min(ask_volume, bid_volume) if min_vol == 0: continue margin = q.upper_limit * q.volume_multiple * margin_rate #过滤不够钱开仓的合约。 volume = int(cash*0.9 / margin) if volume < 1: continue #判断开仓的方向。 open_direction, close_direction = 'SELL', 'BUY' if bid_volume > ask_volume: open_direction, close_direction = 'BUY', 'SELL' #计算方向的强度。 max_vol = max(ask_volume, bid_volume) rate = max_vol / min_vol #计算开平仓的价格。 market_price = {'BUY':q.upper_limit, 'SELL':q.lower_limit} open_price = market_price[open_direction] close_price = market_price[close_direction] #将结果写入表格。 row = pd.DataFrame({'symbol':[symbol], 'rate':[rate], 'open_direction':[open_direction], 'close_direction':[close_direction], 'open_price':[open_price], 'close_price':[close_price], 'close_offset':[close_offset], 'volume':[volume]}) df_symbol = df_symbol.append(row) df_symbol = df_symbol.sort_values('rate',ascending=False) symbol = list(df_symbol['symbol'])[0] print(symbol)
万一表格是空的,倒数第二行应该报错。但程序并没有打印出选合约的结果,也就是说最后一行没有执行。
这个程序,注释掉和开盘时间有关的几行,昨天白天用模拟交易运行了两次,都没问题的。
dadaowu 已回答的问题 2022年3月16日