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

如下图所示,vnpy3.5和vnpy2.6重启后,在on_bar下面的self.cancel_all()无法撤销vnpy在重启之前发往盈透的停止单,但是在主界面委托窗口,还是可以通过双击撤销之前发到盈透的停止单,这是什么原因导致的呢?有什么办法解决呢?

description

Member
avatar
加入于:
帖子: 1401
声望: 92

策略引擎只能维护当前进程中策略发出的委托编号映射关系,重启后关系就丢失了,因此cancel_all也无法撤单(cancel_all是指撤销策略自己发出的全部委托)

Member
avatar
加入于:
帖子: 245
声望: 3

MTF wrote:

策略引擎只能维护当前进程中策略发出的委托编号映射关系,重启后关系就丢失了,因此cancel_all也无法撤单(cancel_all是指撤销策略自己发出的全部委托)

老师您好,针对这种情况,有办法通过策略来取消重启之前发出的委托吗?望指点一下,万分感激

Member
avatar
加入于:
帖子: 1401
声望: 92

ranjianlin wrote:

MTF wrote:

策略引擎只能维护当前进程中策略发出的委托编号映射关系,重启后关系就丢失了,因此cancel_all也无法撤单(cancel_all是指撤销策略自己发出的全部委托)

老师您好,针对这种情况,有办法通过策略来取消重启之前发出的委托吗?望指点一下,万分感激

可以在策略的:

  1. on_order回调函数中,记录收到的委托号记录(如果是结束状态则移除)到一个字典
  2. on_stop时将该字典写入文件保存(使用vnpy.trader.utility下的save_json)
  3. on_start时从文件中读取恢复该字典(使用vnpy.trader.utility下的load_json)

但是要注意如果发生了手动撤单的操作,则需要自己修改下这个json文件来实现数据同步了。

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

沪公网安备 31011502017034号

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