在AI策略中使用滚动训练
由clearyf创建,最终由clearyf 被浏览 253 用户
导语
为了能更简单、更灵活同时在回测和实盘模拟中无缝支持滚动训练和模型自动更新,我们增加了滚动运行支持,并优化了相应模块。
如何增加滚动训练支持
使用模板新建一个策略:策略 > 新建 > 可视化AI策略
如下三步即可增加滚动训练支持:
- 添加滚动运行配置模块:
- 连接滚动运行模块 和 证券代码列表模块
- 设置滚动运行的参数,可以设置训练更新周期等,默认配置对应的是每365天更新一次模型,最少要有730天的数据才开始训练
- 清除 证券代码列表 配置的 开始时间 和 结束时间,以使用来自 滚动配置 的时间
- 模拟实盘中自动更新模型:将滚动运行配置的 结束日期 绑定到实盘日期
- 添加滚动运行到模型训练上:
- 如上图连接:StockRanker训练 -> 滚动运行 -> Trade(回测/模拟),注意 StockRanker训练 到 滚动运行 的连接是在 延迟运行 输出端口上
- StockRanker配置:勾选 延迟运行,为了支持滚动运行和最小的代码改动,平台增加了对模块延迟运行的支持,可以将模块打包作为参数传入其他模块,并在其中调用。这里我们将配置好的 StockRanker训练 打包到滚动运行中,由滚动决定模块的调用方式。
- 因为使用了滚动训练,所以我们可以使用更多的回测数据了,这里可以把开始时间设置的更早一些。预测模块已经内建了对滚动训练的支持。同时对于较早的数据,而没有模型可用时,会自动跳过。
- 添加滚动预测:
- 如上图连接模块
- 勾选 StockRanker预测 延迟运行
注意:我们优化了模块时间的配置,不再需要在 自动数据标注、基础特征抽取和Trade模块里重复配置时间。可视化策略开发模板已经更新。如果您的策略是以前生成的,您需要将 自动数据标注、基础特征抽取和Trade模块 的 开始日期 和 结束日期 参数设置为空。
滚动训练示意图 滚动运行详解
金融数据属于时间序列数据,数据之间具有自相关性,因此不能采取经典机器学习的交叉验证的方式,对训练集进行随机划分。这里,我们建议采取滚动训练方式。滚动训练依赖于滚动运行模块,我们分别介绍不使用滚动运行和使用滚动运行,加深大家对滚动运行模块的理解。
- 不使用滚动运行 如果我们不使用滚动运行,回测区间为2015.1.1到2017.10.01,那么模型只会在训练集上训练模型,然后对验证集数据进行预测,这样只会有一次训练一次预测。时间较远的数据做训练来预测最近的数据可能效果不是很理想。此外,不同时期市场状况和结构也不一致,因此需要采取滚动运行。
- 使用滚动运行 使用滚动运行,我们就可以及时更新模型,用最近的数据来预测数据,这样从策略开发逻辑和实盘交易的角度看比较合理。 假设参数配置是这样,开始日期为2010-1-1,结束日期为2017-10-01, 其中,回测区间为2012.1.1到2017.10.1, 最小数据天数为730,最大数据天数为1095,更新天数为365。
模块源代码
登录github后可查看
- 滚动运行配置:https://github.com/bigquant/bigquant-module-rolling_conf
- 滚动运行:https://github.com/bigquant/bigquant-module-rolling_run
- 滚动预测:https://github.com/bigquant/bigquant-module-rolling_run_predict
策略案例
https://bigquant.com/experimentshare/03b94eb4aff14f6d89fb38bc042d1e1c
\