回测周期看起来是技术细节,经常是结论的隐形导演。同一套规则,只跑 2019–2020,和跑 2016–2024,故事可以完全相反。很多人不是故意造假,而是下意识把窗口停在曲线好看的地方——研究结束时心情很好,实盘第一个反向年份就开始怀疑人生。
合理周期要覆盖「多种天气」
好的回测窗口,尽量让策略经历过不同类型的市场,而不是只经历它擅长的那种:
- – 有趋势的上涨段
- – 有阴跌或急跌段
- – 有宽幅震荡段
- – 若相关,再包含流动性变化、监管或风格切换的年份
A 股语境里,拉太短(两三年)很容易只碰到一种风格红利;拉太长也要小心:早期微观结构、涨跌停制度、交易成本与现在不同,规则若假设今日机制,过远历史要降权或分段解释。
没有放之四海的「必须 10 年」。更管用的标准是:你声称策略适应的环境,样本里有没有出现过? 声称全天候,却只测牛市,那是广告不是研究。
样本内 / 样本外:周期要切开,不是只加长
把 2015–2024 整段调参到最优,再宣称「十年有效」,那是把十年都当样本内。更诚实的切法:
- – 样本内:只用于理解规则、少量试参数
- – 样本外:参数冻结后再跑,看是否塌
- – 有余力再做滚动:如每两年训练、下一年测试(走前进析)
加长全样本却不切开,只是让过拟合有更多数据可舔,不是更科学。
「挑漂亮行情」的自查清单
问自己这几个问题,命中越多越危险:
- 1. 我是否因为某段亏损难看,就把起始年往后挪?
- 2. 是否排除了某个「特殊」年份,却说不清排除标准是否事前写好?
- 3. 是否只展示策略擅长的品种年份,弱项年份略过?
- 4. 参数是否在看过全段曲线后才「最终确定」?
正当做法:起始结束日期事先写进研究计划;若事后发现数据质量问题要截断,记录原因,并同时报告截断前后差异。
可执行的选周期流程
- 1. 先写策略假设:它吃趋势、吃均值回归、还是吃事件?
- 2. 列出必须覆盖的反例年份(对趋势策略,至少要有长时间震荡或失效段)。
- 3. 划定总窗口,再切 70/30 或按年份留出最近 1–2 年做样本外。
- 4. 分年度报告:不报「平均年化一个数」了事;哪年亏、亏在什么环境,写清楚。
- 5. 敏感性:窗口整体平移半年,结论是否大变?大变说明周期脆弱。
反例:某个动量规则在 2020 年极强,研究者把回测从 2019 中开始、到 2021 初结束,夏普耀眼。把窗口扩到 2017–2024 并留样本外,优势可能只剩「某一两年的故事」。周期选择比指标选择更能制造幻觉。
也别走向另一极端:为了「够难」,故意只留策略必死的窗口,然后宣布无效——那是用虐杀代替检验。目标是代表性,不是找一段能证明自己对的行情,也不是找一段能证明别人错的行情。
若策略依赖特定制度(如注册制后的涨跌停差异),窗口还应标明制度分段,避免把不可比阶段揉成一个年化。
交易次数也约束周期:若规则一年只触发十几次,你用两年窗口得出的胜率会抖得像噪声。此时要么加长窗口,要么降低对胜率精度的声称,改看期望的方向是否稳定。费用假设随年代变化时,分段用不同佣金/印花税率,比整段用今日费率更少自我感动。选周期的本质,是让「你声称的有效环境」和「你实际喂给回测的环境」对齐。
把不同周期的回测结果版本化保存,你才能诚实地对比「缩短窗口后好看了多少」。青柠量化 强调策略与结果本地保存,方便按区间重跑,而不是只留一张最终截图。
下载与说明见产品页:
https://www.zpyztech.com/product/qingquant/
免责声明: 本文仅作量化研究方法科普,不构成任何投资建议。历史回测不代表未来表现,请独立判断并自行承担投资风险。
读到这里,不如自己验证一次
文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。