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

在vnpy社区版3.8.0, 我写了一个策略,监控27个商品,就是同一个策略,应用到多个symbol。发现如下异常:

  1. 早上9:00开盘,大商所和郑商所的品种(symbol)接收tick异常,分钟线和小时线无法合成。 策略用米筐数据初始化,行情订阅正常,所有策略实例初始化正常。 vnpy主界面行情正常刷新
  2. 早上9:00开盘,同一个策略的监控上期所和广期所品种的实例正常。
  3. 夜盘,晚上9:00开盘,所有行情都接收正常,分钟线和小时线合成正常,包括大商所和郑商所

我昨天特意到8:55以后初始化策略实例,发现郑商所的品种可以接收tick,大商所还是不行。上期所和广期所OK。 我的猜想:

  1. CTP的问题,夜盘OK,早盘不正常,仅仅是大商所和郑商所。 我还试过,早盘9:00以后再初始化策略,所有symbol接收正常。
  2. 多线程问题,我是批量初始化,而且是一个策略多个symbol。

请高手指点哪里出问题了?

Member
avatar
加入于:
帖子: 4772
声望: 289

可以自己打印一下看看是否收到了交易时间之外的tick

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

楼上怎么处理了?我也一样的情况,早上要重跑一下脚本才行,process_tick_event里边过滤交易时段以外的tick不生效,在update_tick里边能过滤掉还是不能正常合成

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

我也是和楼主同样问题,需要第二天9点后所有的都关掉重新初始化才能正常交易锰硅SM,后来解决掉了吗?

Member
avatar
加入于:
帖子: 4772
声望: 289

可以参考一下2楼

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

我过滤了非交易时间的tick,同时打印分钟bar的生成信息。早盘交易时段 郑商所和大商所的tick信息是收到的,但分钟bar没有生成。 问题还在定位中

我明天早上9:00单独跟踪一个symbol,debug一下。

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

我定位了问题:

  1. 早盘集合竞价前,CTP登录后,大商所合约推送的第一个tick是隔夜最后一根tick。而这个tick是日期是大于第二天日盘的。 比如今天11月21日早盘初始化后,我在CF2401合约收到的tick的datetime是的2023-11-21 2259:59+8:00,这个时间是大于早盘正常的。 同时这个tick是正常交易时间(夜盘最后一个),通常的交易时间过滤策略失效。
    交易时间tick,2023-11-21 22:59:59 symbol: CF401.CZCE last_price 15285.000000
    description

  2. BarGenerator.update_tick()中有tick是时间戳过滤
    if self.last_tick and tick.datetime < self.last_tick.datetime:

         return

3.如上原因导致早盘集合竞价前初始化后,bar合成失败。如果是集合竞价完成后再初始化策略,则收到的tick。

  1. 上期所的合约推送的tick是时间戳是隔夜的(是正常理解的时间),大商所也是按照日盘时间点(不是通常理解的正确时间戳)。
    &&&&交易时间tick,2023-11-20 23:00:00 symbol: rb2401.SHFE last_price 4031.000000
    &&&&交易时间tick,2023-11-21 22:59:58 symbol: b2312.DCE last_price 4465.000000

解决方案的思路:

  1. 可以等8:59分后再初始化,这样集合竞价后的tick是当日的。
  2. 增加过滤的策略,不是过滤tick,二是过滤当前时间now(),等集合竞价后再update_tick()
Member
avatar
加入于:
帖子: 18
声望: 0

我今天测试过,在on_tick()中用datetime.now()来过滤非交易时间tick,然后再送入update_tick(),分钟bar合成正确。 所有交易所都正确。

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

夜盘正常交易的tick的时间戳是正确的。比如今天11月21日晚上夜盘,tick的datetime是今天。但第二天早盘初始化的时候,CTP推送的大商所和郑商所的隔夜tick(如22:59:59秒的tick)是第二天白天的时间,这样合成bar在检查datetime不能通过,无法合成分钟bar。 解决方案是过滤非交易时段的tick。

至此,问题定位和找到解决方案。

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

确实是这个问题,我以前只过滤非交易时段的tick还不够,还要过滤非当前交易时段的tick,多谢楼主

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

沪公网安备 31011502017034号

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