vn.py官网
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 28
声望: 1

我用的 simnow 仿真系统, 发现策略 在开盘接收到的第一根5分钟K线的时间戳总是错的。以下是日志:
8/27 号的日志:
2021-08-27 08:46:13,713 INFO: CTA策略全部启动
2021-08-27 09:05:00,095 INFO: myhk01: [2021-08-27 07:37:00] ### 收到 on_5min_bar 回调 ###

8/30号的日志:
2021-08-30 08:46:11,493 INFO: CTA策略全部启动
2021-08-30 09:05:00,063 INFO: myhk01: [2021-08-30 07:40:00] ### 收到 on_5min_bar 回调 ###

第一根K线时间戳,开始时间应该是 09:00:00 , 可为什么实际却是 07:37:00 和 07:40:00 呢?
有哪位大佬指点下思路。谢谢

Member
avatar
加入于:
帖子: 28
声望: 1

补充: 我打印日志的代码

def on_5min_bar(self, bar: BarData):

self.write_log("[" + bar.datetime.strftime("%Y-%m-%d %H:%M:%S") + "] " + "### 收到 on_5min_bar 回调 ### ")
Member
avatar
加入于:
帖子: 308
声望: 90

御前侍卫 wrote:

我用的 simnow 仿真系统, 发现策略 在开盘接收到的第一根5分钟K线的时间戳总是错的。以下是日志:
8/27 号的日志:
2021-08-27 08:46:13,713 INFO: CTA策略全部启动
2021-08-27 09:05:00,095 INFO: myhk01: [2021-08-27 07:37:00] ### 收到 on_5min_bar 回调 ###

8/30号的日志:
2021-08-30 08:46:11,493 INFO: CTA策略全部启动
2021-08-30 09:05:00,063 INFO: myhk01: [2021-08-30 07:40:00] ### 收到 on_5min_bar 回调 ###

第一根K线时间戳,开始时间应该是 09:00:00 , 可为什么实际却是 07:37:00 和 07:40:00 呢?
有哪位大佬指点下思路。谢谢

原因:

  1. CTP接口夜间休市会关闭
  2. 如果你没有定时退出的习惯,CTP接口会在次日早晨再次开放,CTP本地API定期重新连接simnow的服务器,CTP连接会重新RESTART(默认的)
  3. 如果早上重启启动了vnpy,并且此时simnow的服务器CTP接口会已经开放,CTP连接立即建立,此时也是RESTART(默认的)
  4. CTP连接立时,客户端MdAPI和TdAPI会重新接受到市场的当前所有的合约信息、 历史委托单(当前交易日的)、历史成绩单(当前交易日的)、当前持仓和账户信息,另外还有就是立即推送客户端的订阅行情,而此时接收到的tick行情的时间,该时间不是上一个交易时间段结束的时间,也不是该合约最后一个tick的时间,而是订阅被接受的时间,当然也有例外,CZCE的合约是本地时间。
  5. 5分钟的bar是用tick合成出来的,如果您不对推送来的tick进行判断和处理,直接使用,那么就会出现有5分钟bar的时间戳为非交易时间段的现象。
  6. 另外,就算上述的原因都没有出现,vnpy当前的BarGenerator也会出现每个交易日的都必然多出1个5分钟bar的情况,因为它没有考虑集合竞价的存在。而集合竞价通常是在每个交易日的前5分钟进行的,开市前1分钟只推送1个开盘tick,这会必然导致每天每个你使用的品种都会多出1个5分钟bar。
  7. 关于bar的合成比较复杂,你可以参考本人的帖子,可能你会发现更多你意想不到的问题:
    如何更有效地利用合约交易状态信息——来看看CTP接口中的脏数据!
    如何更有效地利用合约交易状态信息——交易状态信息管理器。
    如何更有效地利用合约交易状态信息——把集合竞价tick合并到开盘的K线中?
© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号

【用户协议】
【隐私政策】