请教一下,我用下面的代码想先撤之前发出的未成交的平仓单子,然后发新的平仓单子,结果原来的单子撤了,但新的单子却没发出来,这有可能是什么原因呢?
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(),用细粒度撤单的逻辑吧。
cancel_all()只是发出撤单请求,这时请求还没有到达交易所,交易所也就没有返回撤单成功,本地就会认为你的short单此时还处在 cover 状态,此时再发一个cover 出去就是拒单。
正确做法是 cancel成功后,会在on order 中返回,这时在 on order 中进行补单操作。
感谢二位高手指点!
xiaohe wrote:
那就不要在这里用cancel_all(),用细粒度撤单的逻辑吧。
请问细粒度撤单的逻辑是什么样的,我这边按订单名撤单也出现了撤单失败的问题,然后一直拒单,因为是tick上的,所以很麻烦,不知道如何解决。
细粒度挂撤单可以参考一下【进阶课程】-【CTA策略】的课时29【委托控制】