vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 37
声望: 0

请教一下,我用下面的代码想先撤之前发出的未成交的平仓单子,然后发新的平仓单子,结果原来的单子撤了,但新的单子却没发出来,这有可能是什么原因呢?

if self.pos <0:
self.cancel_all()
self.cover(bar.close_price, abs(self.pos))

Member
avatar
加入于:
帖子: 1772
声望: 117

需要自己结合策略逻辑和行情进行打印排查了

Member
avatar
加入于:
帖子: 37
声望: 0

谢谢了,我在委托记录里看到,新的平仓单子是发出但被拒了,是不是有可能是系统里这两个命令是同时发出的,老的单子还没被撤,新的单子就被拒了?

Member
avatar
加入于:
帖子: 1772
声望: 117

那就请不要在这里用cancel_all(),用细粒度撤单的逻辑吧。可参考公众号vnpy-community【进阶课程】-【CTA策略】的课时29-委托控制

Member
加入于:
帖子: 5
声望: 1

cancel_all()只是发出撤单请求,这时请求还没有到达交易所,交易所也就没有返回撤单成功,本地就会认为你的short单此时还处在 cover 状态,此时再发一个cover 出去就是拒单。
正确做法是 cancel成功后,会在on order 中返回,这时在 on order 中进行补单操作。

Member
avatar
加入于:
帖子: 37
声望: 0

感谢二位高手指点!

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号