2026年十月9日 · 研究

更好的回测,可能让策略研究变得更糟

更好的回测,可能让策略研究变得更糟

回测更擅长淘汰策略,而不是选出策略。一旦你用历史表现从许多变体中做选择,回测就成了实验的一部分,而表面上的赢家也开始背负一项隐形代价:选择偏差。

这听起来有些反直觉。我们做回测,是想知道哪种策略有效。但每一次依据同一段历史做出的选择,都会消耗一部分证据。看过结果后再调整回看窗口、阈值、交易标的范围、再平衡日或止损规则,就等于又向数据提出了一个问题。最终,数据听到的问题足够多,就可能碰巧给出一个令人信服的答案。

为什么测试的策略越多,最好的结果就越不可信?

想象一下,测试 100 个没有真实优势的策略。它们的收益仍然会各不相同。如果这些策略的表现估计值大致相互独立,且噪声服从正态分布,那么其中最高的 Sharpe 也会是正数,尽管每个策略的真实 Sharpe 都是零。

对于 100 个相互独立的标准正态随机数,其最大值的期望大约高于均值 2.5 个标准差。这只是一个示意,不能直接当作修正值贴进报告:现实中的策略变体彼此相关,Sharpe 估计本身存在抽样误差,收益也很少像理想的正态随机数那样规整。即使考虑这些限制,实际结论依然成立:考察的候选策略越多,排名第一的分数就越可能反映了有利的噪声。

而且,“候选策略”不只是保存下来的回测。每个看过结果之后做出的选择都算:图表看起来波动太乱,就扩大交易标的范围;某一年表现不好,就把它删掉;或者不断调整费用假设,直到收益曲线恢复。这些决策都算数,即使没人给它们标上版本号。

运行下一个变体之前,先记好研究日志

记录完整的搜索过程,包括被放弃的想法,以及每次修改的原因。这样可以更诚实地说明结果经过了多少筛选,也不容易只记得那些看起来不错的试验。

记录内容示例重要性
假设BTC 永续合约出现异常大幅波动后,短期反转效应更强将想法与最终的参数设置区分开来
变体和时间戳48 小时信号,2026-10-09,运行 014统计搜索次数,并将结果与代码和数据关联起来
选择规则按净 Sharpe 选择;至少 100 笔交易说明比较之前“最好”的定义是什么
被否决的变体12、24、72 小时窗口;全部保留避免显眼的赢家掩盖其他候选方案

研究日志无法撤销搜索过程,但能让搜索过程一目了然。这是判断赢家值得多大信心的第一步。

留出一段研究过程中无法反复查看的数据

按时间划分数据,然后保护最后一段。用一段数据开发策略,用验证集做决策,再用之后的留出数据对冻结后的策略评估一次。例如,可以用 2018–2022 年开发,用 2023 年验证,再保留 2024–2025 年作为留出数据。这些年份只是示意:划分方式应由市场、策略周期和数据覆盖范围决定。

明确写下“冻结”的具体含义:信号、交易标的范围、仓位规模、执行假设,以及缺失数据的处理规则。如果留出数据上的表现不理想,而你据此调整策略,那段数据就已经变成验证数据。下一次诚实的评估需要新的证据。

小样本的影响也会在这里显现。一种策略在留出数据中只交易了 18 次,还不足以得出精确结论。报告收益统计时,也要一并说明交易笔数和不确定性;单一的平均值可能让稀少的样本看起来已经足以定论。

100示意性的零优势候选变体数量
2.5σ简化假设下预期的最高分数约值
1策略冻结后的留出集评估次数

这是否意味着回测对策略选择毫无用处?

不是。批评者指出,严格保留留出数据可能造成浪费,这一点没错:市场会变化,历史数据有限,而且一段从未触碰过的时期可能只代表一种特殊的市场状态。精心设计的滚动前推流程可以展示策略在可用历史数据逐步向前推进时的表现。但这并不意味着反复调参没有代价。如果你检查每个折段并据此修改策略,这些折段就影响了研究过程。

用回测找出失效模式,比较少数几种有市场机制依据的想法,并检验结果能否经受合理的费用、资金费率、冲击成本和参数变动。记好研究日志。保留最终留出集。然后将一个有前景且已冻结的版本投入模拟交易,以便发现实际操作中的不匹配。

回测最有力的结论往往是:“在我们已经看得到的条件下,这个想法会失效。”当它说“这是最好的策略”时,不妨问问:你还让它给出了多少个其他答案?

策略研究回测过拟合滚动前推模拟交易
← 全部文章