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

我把回测数据导入MongoDB,数据是沪市1分钟的,我想用1分钟合成60分钟的k线,也就是9点31到10点30,10点31到11点30,1点01分到2点,2点01分到3点,一天4根k线。我回测开始时间是2020-05-29 09:31:00+08:00,5月29日到6月8号都正常,但是6月9日开始,第一个k线的时间就变成9点32分到10点31分了。之前策略初始化有load(8),问题应该是出在这里,我跟踪了 def on_bar(self,bar:BarData):这个函数,发现6月9日第一根k线是9:32:00这根,09:31:00这个根k线就没出现,所以后面所有合成的60分钟k线起始时间都是9点32分开始。不知道这个问题出在哪,请各位大神指点。

description

而我把onbar函数每一根k线的时间都打印下来,可以看到6月9日第一根k线的时间就是9:32分。

description

用vn数据库看,6月9日9点31分钟是有数据的。

description

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

感觉是找到原因了。backtesting.py中的这个函数run_backtesting:
ix = 0
for ix, data in enumerate(self.history_data):
if self.datetime and data.datetime.day != self.datetime.day:
day_count += 1
if day_count >= self.days:
break
self.datetime = data.datetime
try:
self.callback(data)
except Exception:
self.output("触发异常,回测终止")
self.output(traceback.format_exc())
return

    self.strategy.inited = True
    self.output("策略初始化完成")

    self.strategy.on_start()
    self.strategy.trading = True
    self.output("开始回放历史数据")
    # Use the rest of history data for running backtesting
    backtesting_data = self.history_data[ix + 1:]

最后一句backtesting_data = self.history_data[ix + 1:]是要把扣除前面loadbar(8)内的数据,也就是 self.history_data数据中ix后的数据是测试数据,并将其赋值给backtesting_data,但是这里写成ix+1了,所以数据就少了一个,改成backtesting_data = self.history_data[ix :]就可以了。

Member
avatar
加入于:
帖子: 4739
声望: 287

可以按照图上修改试试看
description

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

xiaohe wrote:

可以按照图上修改试试看
description
对,这样改就可以了,应该是这个问题,不过还要管理员确定。

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

沪公网安备 31011502017034号

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