vnpy 想增加5分钟,15分钟回测的功能,修改了constant 里面的内容,但最终回测的时候还是报错,谁有在3.4.0版本上修改过吗?具体的流程是什么?谢谢
vnpy 想增加5分钟,15分钟回测的功能,修改了constant 里面的内容,但最终回测的时候还是报错,谁有在3.4.0版本上修改过吗?具体的流程是什么?谢谢
数据本身是5/15分钟的话,导入的时候选1m,回测的时候也选1m即可。回测的时候K线会通过on_bar函数推送给策略
只回测的话,用 2 楼的办法就可以了。我和 AI 也讨论过通过修改 constant 来实现这个方法,貌似有几处地方都要改动一下,因为在部分初始化逻辑时,它可能会报错。粘一下和AI的聊天记录,但我自己没弄过。
某些回测初始化逻辑就可能直接抛 KeyError。当前 CTA Strategy 确实依赖这个 interval→timedelta 映射。GitHub
因此要完整支持 15 分钟周期,至少要检查并修改这几类地方:class Interval(Enum): MINUTE = "1m" MINUTE_15 = "15m" HOUR = "1h" DAILY = "d" WEEKLY = "w"然后类似:
INTERVAL_DELTA_MAP = { Interval.MINUTE: timedelta(minutes=1), Interval.MINUTE_15: timedelta(minutes=15), Interval.HOUR: timedelta(hours=1), Interval.DAILY: timedelta(days=1), }数据库层基本不需要特别改,因为它本来就是按 interval.value 存储和查询的。VN.py 的 BaseDatabase.load_bar_data() 也是直接接受 Interval 参数,没有写死只能是 MINUTE/HOUR/DAILY。GitHub
但还有第二类兼容问题:某些 VN.py 模块会显式判断支持哪些 interval。
例如当前 AlphaLab 的保存逻辑就明确只处理:if bar.interval == Interval.DAILY: ... elif bar.interval == Interval.MINUTE: ... else: logger.error(...)所以你新增 MINUTE_15 后,标准数据库能工作,不代表所有 VN.py 模块都会自动支持。