301-滚动训练(draft)
由jliang创建,最终由qxiao 被浏览 226 用户
介绍
- 适合专业用户
- 在时间上滚动训练策略,跟进数据变化来迭代模型
- 本文只是一个简单演示,我们将在后续文章里介绍使用和原理
\
实现
在这里例子里我们基于 103 股票池 AI 策略 来做滚动训练
-
设置 AI 策略代码单元为调优对象\n切换到代码模式,添加
%%tune 1
到第一个代码单元(AI训练所在的代码单元) -
运行,输出只有
tunee: 1
,表示这个代码单元被保存为调优对象,并且其名字为1
\n -
新建调优单元:添加一个新的代码单元(第二个代码单元),并且粘贴如下代码进去,关闭策略并重新打开,会看到第二个代码单元也启用了可视化画布
from bigmodule import M # <aistudiograph> # </aistudiograph>
-
滚动训练:新加滚动训练模块
m11
\n-
调优对象id设置前面用的
1
-
开始/结束日期、训练数据时长天数、预测数据时长天数,根据需要设置
-
映射滚动周期到运行参数:对应每个时间周期,设置调优运行参数
# 映射滚动周期到运行参数 def bigquant_run(period): return { # m3: 训练数据抽取模块, 根据你的调优画布修改 "m3.start_date": period["train_start"], "m3.end_date": period["train_end"], # m4: 预测数据抽取模块, 根据你的调优画布修改 "m4.start_date": period["test_start"], "m4.end_date": period["test_end"], # m5: 训练模块, 关闭绘制图表 "m5.plot_charts": False, # m8: 回测模块, 不运行回测, 合并数据后再运行 "m8.m_active": False, # m7: 仓位分配,收集 m7 运行结果, 需要返回更多结果, 在这里添加 "__outputs__": ["m7"], }
-
合并运行参数生成,前一个阶段,运行到预测结果为止,这里合并预测结果,然后生成仓位并回测
# 合并运行结果后的运行参数生成 def bigquant_run(periods: list, results: list): # 如果不需要合并后运行直接返回None return None import json import pandas as pd import dai # 合并数据 # m7: 仓位分配,合并 m7 的输出 dfs = [result["m7"].data.read() for result in results] ds = dai.DataSource.write_bdb( pd.concat(dfs) if len(dfs) > 1 else dfs[0], extra=json.dumps({"start_date": periods[0]["test_start"], "end_date": periods[-1]["test_end"]}) ) return { # * 表示在所有模块应用此变量 "*.m_active": False, # m8: 回测模块, 运行回测模块 "m8.m_active": True, # 仓位数据合并后作为输入给回测模块 m8 "m8.data": ds, # 输出回测模块 "__outputs__": [ # lambda locals_: { "trade_chart": locals_["m8"].render(display=False) }, "m8", {"results": results}, ], }
-
-
这里会并行执行,更多计算资源,运行越快\n
-
提交模拟交易
- 可以无缝开始模拟交易,可以设定在模拟交易模式,运行最后的多少个时间周期,一般只需最后一个
代码
https://bigquant.com/codesharev2/016f4f5e-1f2a-4960-8241-99a908813f2c
\