4.34K 浏览
0

symbol = “DCE.i1905”
# 在创建 api 实例时传入 TqBacktest 就会进入回测模式
api = TqApi(backtest=TqBacktest(start_dt=date(2018, 5, 10), end_dt=date(2019, 8, 5)))
# 获得 m1901 5分钟K线的引用
klines = api.get_kline_serial(symbol, 60*2, data_length=2)
# 创建 m1901 的目标持仓 task,该 task 负责调整 m1901 的仓位到指定的目标仓位
orders = api.insert_order(symbol, “BUY”, “OPEN”, 1)
totalorders = api.get_order()
print(orders)
api.wait_update()
print(orders)
api.wait_update()
print(orders)
api.insert_order(symbol, “SELL”, “CLOSE”, 1)
while 1:
    api.wait_update()
    print(“—–totalorders:”, totalorders)
    print(“—–klines:”, time_to_str(klines.iloc[-1].datetime), klines)

大商所 铁矿1905 合约回测有问题 下一手都会报平仓手数不足,麻烦大佬看一下。

EPI 未选择答案 2020年1月21日
0

平仓单之前的那个开仓单还没有成交,还没有这个合约的持仓,所以平不了

EPI 发表新评论 2020年1月21日

回测市价,咋会不成交呢?又不是实盘

模拟交易也需要下单后的行情来促成成交的。可以增加判断条件:如果order的status为FINISHED并且这个合约的pos为1 则下平仓单,否则继续api.wait_update()

而且当天也不是停板

我wait了很久也没见成交,您可以把代码复制以后看一下,很快就能复现

wait_update()建议写在while里,而不是只调用一两次(你提供的代码中两次insert_order之间只有两次)。对于你提供的这段代码,在第一个BUY 、OPEN的insert_order()语句之后写这两句话就可以成交了:
while not api.is_changing(orders, “status”):
api.wait_update()