4.12K 浏览
0

1. 在实盘多期货品种跟单时,采用order=api.insert_order()下限价单,对target_pos.set_target_volume()要有很多优势,但其后面要跟while order.status != “FINISHED”: api.wait_update(); 我的考虑是,多数情况下,该单应该成交;但在不成交的情况下,程序是否会出现死循环堵在这里,从而使其他品种的期货跟单无法跟踪?

2. 是否可以下单用api.insert_order(); 同时,止损单用target_pos.set_target_volume(0); 两种命令在程序中混合使用推荐吗?谢谢

lookis 已回答的问题 2020年8月25日
1
  1. 单看这两句的话应该还好,毕竟 while order.status != “FINISHED” 要比 while True 还要弱一些,特别是如果你用多线程或者async的话,更不会堵在这里了。
  2. 理论上是可以的,但要注意最好不要同时使用,这里指的 “同时” 的意思是,insert_order的单最好要都成交之后再调用下一个 set_target_volume,然后 set_target_volume都成交之后再调用  insert_order, 因为 insert_order 是更底层的接口,所以其实单用 insert_order 是不依赖 set_target_volume 的,但 set_target_volume 的下单数量是根据调用时的当前头寸来做计算,也就是说,如果时序是这样,就会出现计算错误:
    1. 当前仓位为10手
    2. insert_order 5手 (假设这个单叫 order_1)
    3. set_target_volume 0 (在这时,如果 order_1 还没成交的话,系统会计算成需要平 10手,假设这个单叫 order_2)
    4. order_1 成交,当前仓位15手
    5. order_2 成交,当前仓位5手

所以如果要混用的话,一定要等 order_1 完全成交之后,再调用 set_target_volume,否则就和预期不一致了,或者再手动平掉 order_1 新增的单子

要是不这么做的话其中还会有各种错误,不仅仅是手数问题,比方说 order_1 如果是减仓, order_2 也是减仓,那么对于平昨和平今的计算也会有问题,然后导致其中慢的一个单可能就是错单了

lookis 已回答的问题 2020年8月25日
您正在查看2个答案中的1个,单击此处查看所有答案。