1.16K 浏览
0

程序设计时,使用insert_order后,经常会再判断下单一段时间后仍未成交,即撤单再重新下单。

这时一般会使用当前时间与order.insert_date_time的差来判断过了多久。

但如果order.insert_date_time的值为0,那么程序就会认为已经下单很久还没有成交,造成重复下单的问题。

这个坑一定需要避开。

order.insert_date_time值为0,是因为交易所还没有“确认”该笔order。注意是没有确认,并不是这个order是错单。错单也是有正常的order.insert_date_time。

所以,说order.insert_date_time值为0并不准确,应该说该值为空。

那么什么原因可能造成交易所还没有“确认”该笔order呢?

可能包括:1)insert_order后,没有调用wait_update,订单没有发出;

2)调用了wait_update,但在路上,交易所还没有收到;

3)交易所收到了,但正在处理,还没有返回。特别是交易量大的品种、合约,交易所需要处理时间。

4)返回了,但在返回的路上,程序没有收到。

虽然这些过程的时间很短,1秒左右。但如果处理不当,足以让程序产生误判,并重复下单。

解决办法包括:

  1. insert_order后,及时调用wait_update;另外,可以考虑在wait_update处暂停2秒,预留成交时间。(也可不暂停)
  2. 使用order.insert_date_time前做一个条件判断,即 if order.insert_date_time > 0 。
李思恒 已回答的问题 2024年6月25日
0

还有一个办法可以用is_online来进行判断,是否挂单成功在线

李思恒 已回答的问题 2024年6月25日