BigQuant使用文档

AI量化策略滚动训练最佳实践

由qxiao创建,最终由qxiao 被浏览 23 用户

简介

我们的模版——可视化AI策略是一个单次训练策略,但实盘的策略需要经过滚动训练的研发验证。

在量化交易中,市场环境具有高度动态性与非平稳性,传统的一次性训练模型难以适应不断变化的市场结构。因此,采用滚动训练(Rolling Window Training)的方式对机器学习或深度学习模型进行更新,是提升策略长期有效性和稳健性的关键手段。

滚动训练是一种时间序列建模策略,通过滑动的时间窗口不断更新训练数据集,并定期重新训练模型,以反映最新的市场特征。该方法能够使模型更好地捕捉市场的时变规律,从而提高预测精度和交易策略的表现。

\

单次训练和滚动训练的对比

单次训练

滚动训练


\

滚动训练机制

基本原理

滚动训练基于时间序列的特性,采用一个固定长度的训练窗口(例如过去3年的数据),随着新数据的到来,窗口向前滑动一定步长(例如每年滑动一次),并用新的数据重新训练模型。

训练窗口大小(Window Size) :决定用于训练的历史数据长度,本代码是通过最小数据天数和最大数据天数来控制。

滑动步长(Step Size) :决定每次滚动的间隔,通常为250个交易日更新,train_update_days设置为250。

结果整合

将每个时间点的预测结果拼接成完整的预测序列;

结合交易信号生成交易记录; 最终进行回测评估模型表现。

滚动训练在量化交易中的实现内容

  1. 数据准备与预处理 时间序列划分 :将原始数据按时间排序,确保训练和测试集不发生未来数据泄漏。 特征工程 :构建适用于交易预测的特征,如技术指标、波动率、成交量、情绪因子等。 标签构造 :定义目标变量(如未来n日收益率、涨跌方向、买卖信号等)。 标准化/归一化 :对数据进行标准化处理,便于模型训练。
  2. 模型选择与训练 适用模型 : 传统机器学习模型:XGBoost, LightGBM, 随机森林 深度学习模型:LSTM, GRU, Transformer, CNN-LSTM 等 模型训练方式 : 全量重训练(推荐用于小数据集) 参数迁移 / 微调(适合大规模模型) 在线学习(适合高频交易)

\

通过m.tune实现AI量化策略的滚动训练

m.tune方法可以实现画布的内容修模型参数后,提交到后台并行运行,因此滚动训练可以通过tune模块实现。

我们只需让策略每次的训练集和测试集的时间参数不一样,逐步更新模型的时间参数,然后再将预测结果进行整合到一起,便能实现滚动训练。

接下来,我们详细介绍下模版代码。

代码说明

滚动训练通过一个函数rolling_train来实现的,这个函数实现的就是每次更新模型的训练集和测试集,最后将测试集预测结果连起来回测。参数如下:

我们需要检查和修改的参数一般是:

    train_instruments_mid='m1', # 训练数据 证券代码列表 模块id
    test_instruments_mid='m15', # 测试数据 证券代码列表 模块id
    predict_mid='m13', # 预测 模块id
    trade_mid='m14', # 回测 模块id
    start_date='2021-01-01', # 数据开始日期
    end_date=M.paper_trading_date() or '2025-06-06', # 数据结束日期
    train_update_days=250, # 更新周期,按交易日计算,每多少天更新一次
    train_update_days_for_live=None, #模拟实盘模式下的更新周期,按交易日计算,每多少天更新一次。如果需要在模拟实盘阶段使用不同的模型更新周期,可以设置这个参数
    train_data_min_days=250, # 最小数据天数,按交易日计算,所以第一个滚动的结束日期是 从开始日期到开始日期+最小数据天数
    train_data_max_days=750, # 最大数据天数,按交易日计算,0,表示没有限制,否则每一个滚动的开始日期=max(此滚动的结束日期-最大数据天数, 开始日期
    rolling_count_for_live=1, 


train_instruments_mid表示的是你画布里 训练集数据的模块ID,本策略是m1. test_instruments_mid是画布里测试集数据的模块ID,本例是m15. predict_mid是画布中预测集模块ID,trade_mid是画布里交易回测模块的ID.

start_date、end_date 是你本次滚动训练的开始日期和结束日期。

train_update_days是模型多久更新,这里是交易日。train_data_min_days是训练集数据的最小天数,train_data_max_days是训练集数据的最大天数。如果您是三年数据训练模型,等一年更新模型,则可以设置train_data_max_days为750,train_update_days为250,因为一年大概就250左右的交易天数。

关于这点,我们以图片进行说明:


设置了滚动训练的参数后,m.tune的设置和之前的文章介绍一样,因为我们要调用更多的资源并行运行,我们可以这样设置:

 results = M.tune.run(
        # 运行代码块的名称,在代码 cell 的第一行通过 %%tune 指定
        name="hyper_rolling_train",
        parameters=parameters_list,
        workers=2,
        remote_run=True,
        max_retries=2,
        silent_log=True )

name是画布的名称,切换到代码模式通过%%tune指定,这里名称是hyper_rolling_train. parameters是滚动训练拆分的几个子任务列表,workers是并行运行的数量,remote_run指定是否远程运行,这里特别说明,如果是远程运行,那么workers就是集群数量,如果不是远程运行,workers就是线程数量。max_retries是子任务失败的重试次数,silent_log是是否关闭日志输出。

模版的代码,建议只改上述两处,其他地方都不需要调整。

完整代码

https://bigquant.com/codesharev3/c75ac319-ebc0-4529-88de-516f6e1c54a9




\

{link}