VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 38
声望: 0

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

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

Member
avatar
加入于:
帖子: 5049
声望: 303

可以自己结合策略逻辑和行情进行打印排查

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

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

Member
avatar
加入于:
帖子: 5049
声望: 303

那就不要在这里用cancel_all(),用细粒度撤单的逻辑吧。

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

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

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

感谢二位高手指点!

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

xiaohe wrote:

那就不要在这里用cancel_all(),用细粒度撤单的逻辑吧。
请问细粒度撤单的逻辑是什么样的,我这边按订单名撤单也出现了撤单失败的问题,然后一直拒单,因为是tick上的,所以很麻烦,不知道如何解决。

Member
avatar
加入于:
帖子: 5049
声望: 303

细粒度挂撤单可以参考一下【进阶课程】-【CTA策略】的课时29【委托控制】

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】