5.56K 浏览
0

SYMBOL = \”CZCE.TA909\”
KLINE_PERIOD_1 = 60
KLINE_PERIOD_2 = 5*60
data_length = 30
api = TqApi(TqSim())
quote = api.get_quote(SYMBOL)
orders = api.get_order()
ticks = api.get_tick_serial(SYMBOL, data_length=data_length)
position = api.get_position(SYMBOL)
account = api.get_account()
klines_1 = api.get_kline_serial(SYMBOL, duration_seconds=KLINE_PERIOD_1, data_length=data_length)#1分钟
klines_2 = api.get_kline_serial(SYMBOL, duration_seconds=KLINE_PERIOD_2, data_length=data_length)#5分钟
trade_signal = 0
while True:
api.wait_update()
if api.is_changing(account, [\”available\”,\”commission\”,\”position_profit\”,\”close_profit\”]):
print(\”account=\”.format(account))
if api.is_changing(position):
print(\”position=\”.format(position))
if api.is_changing(klines_1.iloc[-1], \”datetime\”):
print(\”klines_1.iloc[-1]=\”.format(klines_1.iloc[-1]))
if api.is_changing(ticks):
if position.volume_long == 0 and position.volume_short == 0:
print(\”开仓\”)
if klines_1.iloc[-1] > klines_2.iloc[-1] :
api.insert_order(symbol=SYMBOL, direction=\”BUY\”, offset=\”OPEN\”, volume=UNIT, limit_price=ticks.iloc[-1].bid_price1)
if klines_1.iloc[-1] < klines_2.iloc[-1] :
api.insert_order(symbol=SYMBOL, direction=\”SELL\”, offset=\”OPEN\”, volume=UNIT, limit_price=ticks.iloc[-1].ask_price1)
elif position.volume_long > 0:
print(\”平多仓\”)
api.insert_order(symbol=SYMBOL, direction=\”SELL\”, offset=\”CLOSE\”, volume=position.volume_long)
elif position.volume_short > 0:
print(\”平空仓\”)
api.insert_order(symbol=SYMBOL, direction=\”BUY\”, offset=\”CLOSE\”, volume=position.volume_short)
以上测试代码,发现几个问题:
1、每次循环,都发生position更新事件,事实上此时打印出来的position并未有任何变化;
2.使用天勤软件回测或复盘,在使用市价下单时,发生成交但是打印出来的position未有变化,其多空仓位仍为0,导致开单逻辑不断下单,有多时达还几百单
3.以上第2点,在复盘时使用正常1倍速还是max,都出现一样的问题
4.以上问题,使用TQSDK回测时,表现与天勤软件不大一样,有时发现一直在打印position,程序似乎没法走到下面的if api.is_changing(ticks)

0

@ringo
1、用print(position),未发现有任何不一样的地方。
2、你的意思是两个不同周期k线的iloc[-1].close,是一样的最新值,是跟quote或者tick的最新值一样的么?
另外在TQSDK中用backtest,最后print(orders),也是空的,很是奇怪。
我感觉似乎当在天勤软件回测时,采取max速度,用tick策略如果耗时比较长的话,似乎导致在两个tick之间没法完成,会出一些问题。
另外还有个新问题,当在天勤软件中同时执行两个策略(同一个合约),在发生调仓(TargetPosTask)会出现撤单错误,这个是有问题么,是否可以修复?

您正在查看3个答案中的1个,单击此处查看所有答案。