前天晚上估计是连不上,所以昨天升级了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日

