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

问题描述:我在我自己的每个用户策略,都开了一个Timer的定时任务线程,self.timer=Timer(1,self.Timer_Task),并且在Timer_Task不断的开启定时任务循环运行Timer_Task,开这个定时任务的主要目的是在开盘的时候第一时间发单(我现在已经知道我这个做法不对,我已经修改.现在我主要想请教一下我遇到的故障的原因)

但是有出现的情况是这样,两个策略A和B,在各自的定时任务线程下同一时间发单,A和B策略发单后,两个策略都返回取得了同一个订单号(正常应该是各自取得策略本身的订单号)
A策略发单之后,返回了A的订单号,但是后续的order和trade并没有推送给A策略
B策略发单之后,返回的也是A的订单号,并且把A策略的这个订单的order和trade都推送到B策略这边了
而B策略本身发出去的那个订单,有在委托列表中,但是不被识别了

我读了代码,觉得应该是订单ID和策略之间的映射字典出错了.但是我不懂是什么原因?

请问,是不是2个线程同时调用CTP gateway的send_order,然后订单号返回给了错误的策略?

Member
avatar
加入于:
帖子: 1486
声望: 105

开源版的事件引擎是单线程工作架构,策略中的回调函数都是单线程触发的。

这里你另开的Timer本质是额外的线程,如果在其中调用策略模板的主动函数(下单撤单)就可能存在多线程冲突问题

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

沪公网安备 31011502017034号

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