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

今天检测运行变量时候,发现策略记录的持仓和期货公司的APP中的持仓不一致,仔细对比了FG205.CZCE的所有委托和成交记录,发现有两单明明没有委托,但是成交了,这太奇怪了。见下图:

description
这是委托记录,在9:0:0这个点上,策略并没有发送委托,但是成交记录里面确实有成交,如下图:

description
最终导致策略的持仓混乱,大神帮忙解答下???

Member
avatar
加入于:
帖子: 716
声望: 62

看委托号是前晚下的委托成交了,翻翻看之前的委托呢

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

郭易燔 wrote:

看委托号是前晚下的委托成交了,翻翻看之前的委托呢
谢谢大神! 找到了,确实是上周五夜盘发的单,这周一早9点成交的。
9_-178630626726 FG205 CZCE 限价 空 开 2072 1 1 全部成交 36:00.0 CTP
9
-1786306267_25 FG205 CZCE 限价 空 平 2072 4 4 全部成交 36:00.0 CTP
程序运行,遇这种情况怎么让策略跟踪到这个成交回报,这种情况和手动下单一样,会干扰程序化的数据,程序收到成交回报,但是策略收不到。这个怎么修改才能让策略收到此合约的任何情况的成交回报了?

Member
avatar
加入于:
帖子: 4618
声望: 284

可以在vnpy_ctastrategy.engine的process_trade_event函数下按需进行修改

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

xiaohe wrote:

可以在vnpy_ctastrategy.engine的process_trade_event函数下按需进行修改

在这个函数下面:def process_trade_event(self, event: Event):
如果按委托订单查找策略,如果没有找到,就直接返回了,这里是导致策略外部手动下单或是你已发订单,在未成交重启软件后,都将找不到是哪个策略发送的订单。按如下方式修改,可以识别手动下单或是之前发单,软件重启后成交后的。
find_strategy_orderid = self.orderid_strategy_map.get(trade.vt_orderid, None)
if find_strategy_orderid:
strategy = find_strategy_orderid
else:
find_strategy_symbol = self.symbol_strategy_map.get(trade.vt_symbol, None)
if find_strategy_symbol and len(find_strategy_symbol) == 1:
strategy = find_strategy_symbol[0]
else:
return
上面的方法弊端是无法对应同一个合约,多策略的情况,如果有这种情况,可以在策略里重发单实现:
就是在夜盘快结束时候,直接缓存未成交的订单,然后再发送把所有订单撤销信号,等第二天9点开盘,策略里面重新发单。

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

沪公网安备 31011502017034号

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