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

回测引擎分段加载数据的时候有两个参数:startend
在回测引擎中加载数据的一个参数具体值为

{start: datetime.datetime(2022, 9, 2, 0, 0, 0, 1000),
 end: datetime.datetime(2022, 9, 3, 0, 0)}

调用mysql_database中的load_tick_data的时候会重设这两个参数的时分秒

start: datetime = start.replace(hour=0, minute=0, second=0)
end: datetime = end.replace(hour=23, minute=59, second=59)

重设后参数变为

{start: datetime.datetime(2022, 9, 2, 0, 0, 0, 1000),
 end: datetime.datetime(2022, 9, 3, 23, 59, 59)

加载了2-3两天的数据

下一轮加载数据回测引擎中两个参数变为:

{start: datetime.datetime(2022, 9, 3, 0, 0, 0, 1000),
 end: datetime.datetime(2022, 9, 4, 0, 0)

mysql_database中两个参数变为

{start: datetime.datetime(2022, 9, 3, 0, 0, 0, 1000),
 end: datetime.datetime(2022, 9, 4, 23, 59, 59)

加载了3-4两天的数据
中间日期的数据都会有重复,只有头尾日期数据不重复

数据库中实际数据量为
description
加载的数据总量为:
description
description

环境为
description

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

解决办法:

因为数据粒度太大,注释掉了mysql_database.MysqlDatabase.load_tick_data 中的

start: datetime = start.replace(hour=0, minute=0, second=0)  
end: datetime = end.replace(hour=23, minute=59, second=59)

vnpy_ctastrategy.backtesting.BacktestingEngine.set_parameters中的end传参
改为

self.end = end if end is None else end.replace(hour=23, minute=59, second=59, microsecond=999)

以让数据能加载到最后一天

补充修改vnpy_ctastrategy.backtesting.BacktestingEngine.load_data

if not self.end:
    self.end = datetime.now()
    self.end = self.end.replace(hour=23, minute=59, second=59, microsecond=999)
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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