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

例如
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")

    self.load_bar(10)

会在数据回放时刚好漏掉达到10时的数据
例如:
2010-01-14 14:58:00+08:00
2010-01-14 14:59:00+08:00
2021-07-31 22:35:04.157915 策略初始化完成
2021-07-31 22:35:04.159658 开始回放历史数据
[这里缺少了2010-01-15 09:00:00+08:00]
2010-01-15 09:01:00+08:00

源码:backtesting_data少取了刚好达到阈值时的数据

    # Use the rest of history data for running backtesting
    backtesting_data = self.history_data[ix + 1:]
    if not backtesting_data:
        self.output("历史数据不足,回测终止")
        return
Member
avatar
加入于:
帖子: 3469
声望: 228

可以去同步github上的vnpy/vnpy_ctastrategy的PR1的代码试试看

Member
加入于:
帖子: 39
声望: 0

xiaohe wrote:

可以去同步github上的vnpy/vnpy_ctastrategy的PR1的代码试试看
vnpy_ctastrategy 是策略
回测时达到阈值漏数据应该是个系统的 bug
在 on_bar 时打印出来每个数据,再 和db 对比很容易发现

bug 在以下代码中,
可以通过call 多一次callback
或将 backtesting_data = self.history_data[ix + 1:] 修改为 backtesting_data = self.history_data[ix :]
解决

    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:]
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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