请教一下,我用下面的代码想先撤之前发出的未成交的平仓单子,然后发新的平仓单子,结果原来的单子撤了,但新的单子却没发出来,这有可能是什么原因呢?
if self.pos <0:
self.cancel_all()
self.cover(bar.close_price, abs(self.pos))
请教一下,我用下面的代码想先撤之前发出的未成交的平仓单子,然后发新的平仓单子,结果原来的单子撤了,但新的单子却没发出来,这有可能是什么原因呢?
if self.pos <0:
self.cancel_all()
self.cover(bar.close_price, abs(self.pos))
需要自己结合策略逻辑和行情进行打印排查了
谢谢了,我在委托记录里看到,新的平仓单子是发出但被拒了,是不是有可能是系统里这两个命令是同时发出的,老的单子还没被撤,新的单子就被拒了?
那就请不要在这里用cancel_all(),用细粒度撤单的逻辑吧。可参考公众号vnpy-community【进阶课程】-【CTA策略】的课时29-委托控制
cancel_all()只是发出撤单请求,这时请求还没有到达交易所,交易所也就没有返回撤单成功,本地就会认为你的short单此时还处在 cover 状态,此时再发一个cover 出去就是拒单。
正确做法是 cancel成功后,会在on order 中返回,这时在 on order 中进行补单操作。
感谢二位高手指点!