from tqsdk import TqApi, TqSim, TargetPosTask, BacktestFinished, TqBacktest
from tqsdk.tafunc import ma
from datetime import date, datetime
api = TqApi(TqSim(init_balance=1000000.0), backtest=TqBacktest(start_dt=date(2019, 2, 1), end_dt=datetime(2019,6,1)))
symbol_front = "CFFEX.T1903"
symbol_main = "CFFEX.T1906"
symbol_after = "CFFEX.T1909"
kline_day_front = api.get_kline_serial(symbol_front,24*60*60)
kline_day_main = api.get_kline_serial(symbol_main,24*60*60)
kline_day_after = api.get_kline_serial(symbol_after,24*60*60)
klines_1min = api.get_kline_serial(symbol_main, 60,)
ma120 = tafunc.ma(klines_1min["close"],120)
target_pos = TargetPosTask(api,symbol_main)
while True:
api.wait_update()
if api.is_changing(klines_1min):
#确定主力合约时间段
if kline_day_front.close_oi <= kline_day_main.close_oi and kline_day_main.close_oi <=kline_day_after.close_oi:
if time条件: #日内交易设置
ave_volume_5 = sum(klines_1min.volume.iloc[-6:-2]) #前5个k线成交量
if klines_1min.volume.iloc[-1] >= ave_volume_5: #放量是priority
if klines_1min.close.iloc[-1] >ma120.iloc[-1]: #开仓条件
target_pos.set_target_volume(10) #开多
elif klines_1min.close.iloc[-1] <ma120.iloc[-1]:
target_pos.set_target_volume(-10) #开空
else:
target_pos.set_target_volume(0)