vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 12
声望: 0

问题:在北京时间13:50分更新数据,查询到数据库内容如下:

description

datetime为ISODate("2021-01-11T13:50:00Z")

bug1.这个ISODate的时间应该不是北京时间啊,应该+8小时才是北京时间
bug2.程序窗口内数据管理中,显示的时间也是北京时间,将错就错了?

请问如何修正这个问题?

Member
avatar
加入于:
帖子: 3115
声望: 181

这个不是bug

  1. 是utc时间,mongodb默认以UTC储存时间;
  2. datamanager的ui”查看“时已经把时间转成数据库时区的时间了
Member
avatar
加入于:
帖子: 12
声望: 0

johnchenme wrote:

问题:在北京时间13:50分更新数据,查询到数据库内容如下:

description

datetime为ISODate("2021-01-11T13:50:00Z")

bug1.这个ISODate的时间应该不是北京时间啊,应该+8小时才是北京时间
bug2.程序窗口内数据管理中,显示的时间也是北京时间,将错就错了?

请问如何修正这个问题?

但数据库中datetime为ISODate("2021-01-11T13:50:00Z"),这个正好等于北京时间是正确的?

Administrator
avatar
加入于:
帖子: 5078
声望: 293
  1. 我们存进去的时候,按照当前时区存的,你在中国就是北京时间了(没有按照MongoDB官方推荐的用UTC存)
  2. 所以这个就是正确的显示效果了
Member
avatar
加入于:
帖子: 13
声望: 0

我也发现这个问题。 数据下载,存入mongodb的时候不带时区(没有按照MongoDB官方推荐的用UTC存)。 数据存取时候做了相应转换,没有问题。

但是回测过程中, 在MongoManager批量读取的时候,开始时间和结束时间需要带时区。 逻辑是OK的,但是给大家提个醒。

engine = BacktestingEngine()
engine.set_parameters(
    vt_symbols=option_vt_symbols,
    interval=Interval.MINUTE,
   start=datetime(2021, 1, 1, 8, 30, 0).astimezone(get_localzone()),
    end=datetime(2021, 1, 20, 15, 30, 0).astimezone(get_localzone()),
    rates=option_rates,
    slippages=slippages,
    sizes=sizes,
    priceticks=priceticks,
    capital=1_000_000,
)
Member
avatar
加入于:
帖子: 3115
声望: 181

不用加时区,database_mongo调用load_bar/tick_data的时候会用convert_tz函数处理start和end,如果没有tzinfo也会进行处理的

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

沪公网安备 31011502017034号