BigQuant使用文档

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

\

{link}