4.07K 浏览
0

有时候下单后不一定马上成交,我让程序10秒后还未成交就撤销该笔订单。运行过程中遇到问题,实际订单已成交,但也会触发撤单,导致显示撤单失败。

order = api.insert_order(......)
time=10
while order.status != "FINISHED":
    api.wait_update()
    time=time-1
    time.sleep(1)
if order.status=="ALIVE" and time==0:
   api.cancel_order(order)
好好学习 已回答的问题 2020年9月11日

tqsdk不能直接用time.sleep(), 会让你的api.wait_update()出问题。

1

我是知识的搬运工:

不建议使用 time.sleep(),因为每次调用 wait_update() 时只处理一个业务数据包,而在time.sleep(x)暂停期间,业务数据包可能已经接收了n个, 此时再调用 wait_update()时则会发现api中刚更新的数据不是当前的最新状态(而是x秒以前的数据),即与真实最新行情间有较明显的时间差,并且随着多次调用 time.sleep(x),这个时间差会越来越大。

建议暂停程序的方法:

1
2
3
4

# 暂停5秒时间
deadline = time.time() + 5
while api.wait_update(deadline=deadline):
    pass

好好学习 已回答的问题 2020年9月11日
0

总会有时间差的呢……你这边撤单的指令在10秒的时候发出,然后10.1秒的时候成交了,10.2秒的时候到达交易所

期货特特 发表新评论 2020年9月11日

那有啥解决办法嘛