SR-中证2000策略 before_start_days 参数设置影响分析报告
由peng1960hong创建,最终由peng1960hong 被浏览 16 用户
引言
前文《探析:量化交易策略回测绩效与实盘表现不一致》中“before_start_days (历史数据向前取的天数)”参数设置对于回测绩效与实盘(模拟交易)表现不一致的影响有所涉及,但例证数据不够详实,分析不够全面深入,本文以仍以策略文件:SR-中证2000策略-参数测试.ipynb 为例,对BigQuant 平台可视化编程StockRanker模型策略模块:m3(训练数据)、m4(预测数据)、m7(回测引擎) 中before_start_days (历史数据向前取的天数)参数不同设置影响回测绩效与实盘(模拟交易)表现不一致的原因进行更进一步的探析,并提出具有操作性的应对举措。(说明:本文部分内容系作者与BigQuant 平台Cowork交流互动生成,逐一检查核对汇入全文。)
\
一、研究背景与核心问题
1.1 问题的提出
在使用 SR(StockRanker)机器学习模型策略进行量化研究时,经常出现以下困惑:回测绩效良好,但实盘(模拟交易)表现明显不如预期,且两者的选股结果存在差异。导致这一现象的原因众多(过拟合、未来函数、数据泄露等),但其中有一类原因往往被忽视——before_start_days 参数在不同模块中的设置不当,导致回测与实盘使用了实质上不一致的数据计算逻辑。
本文聚焦于此,通过以下方式进行验证:
机制分析:深入解析 m3、m4、m7 三个模块中 before_start_days 的技术作用及其对计算结果的影响;
对照实验:用两个不同时间起始点的样本(回测期分别从 2025-01-01 和 2025-04-21 开始),参数配置完全相同的条件下对比重叠期内的逐日选股结果;
参数修正实验:将 before_start_days 从 90 天调整为 200 天,观察差异是否显著收敛;
应对方案:提出可操作的参数规范化建议,使回测环境尽量贴近实盘环境。
1.2 before_start_days 参数的基本含义
在 BigQuant 平台中,before_start_days (参数单位为“自然日”)是 extract_data_dai 和 bigtrader 模块中的一个参数,其作用是:
核心作用:为时序窗口函数提供足够的历史数据做"预热"(warm-up),确保 start_date 当天的因子值不是基于不完整历史数据计算出的"冷启动"值。
单位强调:BigQuant 平台该参数以自然日计算(含周末节假日),与交易日不同:
\
二、SR-中证2000 策略架构与数据流
2.1 策略模块结构
2.2 三个模块的角色定位
三者在数据流中处于完全不同的位置,`before_start_days` 在每个模块中的作用机制和影响方向截然不同。
\
三、各因子的预热需求——确定理论下限
3.1 时序因子预热需求汇总
before_start_days 的核心功能是为时序窗口函数提供历史数据。对于每个时序因子,需要的最小自然日数(保证 start_date 当天计算有效)如下:
结论:本策略的时序因子技术最小预热需求为 ≈ 127 自然日(由 `m_lag(close, 90)` 决定)。
3.2 截面因子的特殊性
3.3 EMA 因子的特殊预热规律
综合结论:策略中技术最小预热需求 = 127 自然日(由 `m_lag(close,90)` 决定,EMA 因子无需额外添加)。
\
四、m3 模块分析——训练数据的预热与甜蜜点
4.1 m3 的作用
m3 负责抽取用于训练 StockRanker 模型的历史数据,时间范围为 2022-01-01 至 2024-12-31。其上游是 m2,m2 在 m1 因子的基础上加入了训练标注 label(基于未来5日收益的分位数分箱)。
4.2 当前 m3.before_start_days=90 的问题
4.3 m3 甜蜜点现象的机制
实际观测到的现象是:m3 的 before_start_days 存在一个"甜蜜点"——太小绩效差,在临界值附近绩效最好,超过临界值绩效反而下降。这与直觉("多取历史数据应无害")相悖,原因在于两个方向的效应相互博弈:
方向一:预热不足(before 太小时)
方向二:全局统计污染(before 太大时)
结论:m3.before_start_days 的甜蜜点是上述两个效应的平衡点。
4.4 m3 参数建议
\
五、m4 模块分析——预测数据与回测一致性的核心
5.1 m4 的作用
m4 负责抽取实盘预测所用的因子数据(时间范围为预测期:2025-01-01 至 2026-03-06),由训练好的 StockRanker 模型(m5)对这些数据进行打分,生成选股信号(m6)。m4 是连接"历史训练"与"未来预测"的桥梁,其数据质量直接决定模型打分的可靠性,进而影响实盘选股结果。
5.2 关键问题:m4 的 start_date 随回测起点动态变化
当前策略代码中,m4 的配置如下:
当用户在回测引擎(m7)中调整回测起始日期时,m4 的 `start_date` 也同步改变。 这意味着:不同的回测起点 → m4 的 start_date 不同 → query_start_date 不同 → 因子数据的历史覆盖范围不同 → 相同自然日的因子值可能不同 → 选股结果不同,这是回测绩效与实盘(模拟交易)结果不一致的重要隐性原因之一:实盘运行时只有一个固定的 m4 查询范围,而回测时可能用了不同查询范围的数据,两者的模型打分并不等价。
5.3 当前 m4.before_start_days=90 的预热不足问题
5.4 两样本 query_start_date 的差距与影响
5.5 m4 参数建议
方案B(快速修复):增大 before_start_days
方案A(根本解法):固定 m4 时间范围,独立于回测起点
方案A 的价值:确保不论何时开始回测、不论何时启动实盘,m4 生成的因子数据和模型打分完全一致——这是消除回测与实盘选股差异的根本措施。
\
六、m7 模块分析——为何完全没有影响
6.1 现象
将 m7.before_start_days 设置为任意值(0、30、60、90……),回测绩效的净值曲线、选股结果、各项指标完全不变。
6.2 原因:信号预生成架构
SR-中证2000 策略采用的是信号预生成型架构。m7(bigtrader)的 handle_data 逻辑如下:
m7 不进行任何因子计算,只读取 m6 预先生成的仓位信号并下单执行。因此:
- m7.before_start_days 仅控制行情数据(价格、成交量)的加载起点
- 这些行情数据仅用于成交模拟(撮合、滑点、手续费计算),不影响选股
- 选股逻辑在 m4→m5→m6 中已完全确定,m7 无法改变
m7.`before_start_days` 对任何策略绩效指标均无影响,这是架构特性而非偶然。 建议设为 0 以减少不必要的数据加载。
\
七、三模块横向对比
\
八、两样本选股对比实验一:m3=90, m4=90
8.1 实验设计
通过运行两个仅回测起点不同的样本,在参数相同的条件下比较重叠期的逐日选股结果。选股差异即代表"在不同时间启动回测/实盘时,策略给出的信号差异"。
8.2 实验结果
8.3 逐日差异明细(m3/m4=90)
8.4 按季度分布
8.5 关键时间节点解析
2025-06-27 首次完全相同的机制:
\
九、两样本选股对比实验二:m3=200, m4=200
9.1 实验设计
将 m3 和 m4 的 before_start_days 统一调整为 200 自然日,保持其他条件不变,观察两样本选股差异是否显著收敛。
参数调整后的 query_start_date 对比:
9.2 实验结果
9.3 逐日差异明细(m3/m4=200)
9.4 按季度分布(m3/m4=200 vs m3/m4=90)
9.5 差异演变对比图示
9.6 m4=200 后仍有残余差异的原因
Q2-2025 的 5 个差异日(2025-04-21 ~ 2025-05-22):
Q1-2026 的 2 个差异日(2026-01-14, 2026-02-04):
十、回测与实盘不一致的成因诊断与应对
10.1 与 before_start_days 直接相关的不一致成因
基于以上分析,本策略中由 before_start_days 配置不当导致的回测与实盘差异,可归结为以下三种具体机制:
成因一:m4.start_date 随回测起点动态变化(核心成因)
成因二:m4.before_start_days 不足,预测期头部数据缺失
成因三:m3 训练数据头部缺失,模型质量受损
10.2 诊断检验方法
10.3 before_start_days 之外的其他不一致成因
10.4 应对举措汇总
第一优先级:修复 m4 的耦合与预热问题(立即执行)
第二优先级:修复 m3 的训练数据缺失(建议执行)
第三优先级:标准化验证流程(建议建立)
\
十一、最终参数建议与效果预期
11.1 三模块参数对比
11.2 两次实验效果对比
11.3 核心结论
-
m3.before_start_days=90 严重不足:技术最小预热需求为 127 自然日,当前设置导致约 11% 的训练数据缺失,模型质量受损,且与回测过程中的数据使用方式不一致。
-
m4.before_start_days=90 且 start_date 动态耦合,是回测与实盘不一致的最直接原因:两样本实验用数字证明,相同参数下仅因起点不同就造成 76.7% 的调仓日选股差异,这正是"回测期与实盘期选股不同"在策略框架层面的等价证明。
-
m4=200 显著改善但无法根本消除差异:差异率从 76.7% 降至 20.9%,但只要 m4.startdate 仍然耦合于回测起点,就始终存在 query 范围差异,必须采用方案A(固定 startdate)才能从根本上消除。
-
m7.before_start_days 对任何指标均无影响:这是 SR 信号预生成架构的确定性特征,不需要也不应该为此花费调试精力。
-
这套分析框架的价值:通过"两样本一致性测试",可以在实盘启动前以低成本的方式量化评估策略的数据一致性——差异率越低,回测绩效与实盘表现越可能一致。这是对抗"回测好看、实盘难看"现象的一个实用工具。
SR-中证2000策略-参数测试代码
https://bigquant.com/codesharev3/0e78513e-6943-45f0-8ff0-7ad0440111ce
\
:::warning 风险提示
本文的分析结论基于策略代码的机制推导与两次对照实验数据。需注意:
- 参数修改(尤其 m3 的变化)可能导致策略绩效与历史回测出现偏差,这不一定是"倒退",可能是修复了数据计算逻辑后更真实的绩效体现。
- 即便消除了 before_start_days 相关问题,回测与实盘仍可能因过拟合、因子衰减、交易冲击等原因存在差距。
- 建议参数修改后进行充分的样本外测试(比如,预留半年以上的时间段)、滚动回测验证,不依赖单一回测结果做出实盘决策。
:::
\
:::success 感谢BigQuant Cowork的大力协助!
:::
\
\