首页/回测/常见错误

毁掉回测结果的 7 个常见错误

最常见的回测错误有:过拟合、幸存者偏差、忽略交易成本、前视偏差、样本量不足、曲线拟合,以及没有在不同市场状态下测试。策略参数最多保持 2-4 个,回测至少要有 100 笔交易,并覆盖至少两个完整的市场周期。

回测可以告诉你任何你想听的东西。有用的回测和误导性的回测之间的差别,归根结底在于方法。大多数在纸面上表现惊艳、一旦投入真金白银就土崩瓦解的策略,都源于这七个错误。

1. 对历史数据过拟合

过拟合(overfitting)是最常见、也最危险的回测错误。当你的策略有太多参数或规则,被调校得与历史数据完美吻合、却对未来毫无预测能力时,就会出现过拟合。一个拥有 10 个可调参数的策略几乎可以拟合任何价格序列——并且会显示出非凡的回测收益,而这些收益完全没有意义。

如何避免:让策略保持简单。一个稳健的策略最多应有 2-4 个参数。测试参数稳定性——如果把某个参数改变 20% 就毁掉了结果,那就是过拟合了。使用滚动前推分析:在一个时期优化,在下一个时期测试,然后重复。如果样本外表现比样本内差得多,那就是过拟合了。

2. 幸存者偏差

幸存者偏差(survivorship bias)是指你的数据集只包含今天仍然存在的资产,而排除了那些已退市、破产或被收购的资产。如果你用当前的 S&P 500 成分股往回测试 20 年的选股策略,你测试的只是幸存下来的公司——这是一个有偏的样本,会让任何策略看起来都比实际更好。

如何避免:使用包含已退市证券、不存在幸存者偏差的数据。如果拿不到这样的数据,至少要在结果中说明这一局限。对于买入低质量或陷入困境股票的策略,这种影响最为严重,因为这类股票退市的概率最高。对于指数层面的策略(在 SPY、QQQ 上回测),幸存者偏差很小,因为指数本身会定期调整成分。

3. 忽略交易成本

一个频繁交易的策略,在零交易成本下可能看起来非常赚钱,而在符合实际的成本下却严重亏损。交易成本包括佣金(对散户来说通常接近于零,但对机构规模仍然重要)、买卖价差(大多数新手忽略的隐性成本)、滑点(slippage,你预期的价格与实际成交价之间的差额),以及市场冲击(对较大仓位而言很重要)。

如何避免:回测中务必纳入交易成本。对于美股,流动性好的大盘股每边至少按 0.05% 计算,小盘股按 0.2-0.5% 计算。对于加密货币,在主要交易所以吃单(taker)方式下单时,每边 0.1% 是符合实际的。做敏感性分析:如果把假设的交易成本翻倍后策略就不再盈利,说明优势太薄,无法安全交易。

4. 前视偏差

前视偏差(look-ahead bias)是指你的策略使用了在做出交易决策时还无法获得的信息。最常见的形式是用某根 K 线的收盘价生成信号,然后又按同一个收盘价成交——现实中,在这根 K 线收盘之前你不可能知道收盘价,而到那时你只能在下一根 K 线的开盘时成交。

如何避免:信号生成后,始终在下一根 K 线上执行。对基本面因子使用时点(point-in-time)数据——收盘后公布的财报,直到下一个交易日才应该对你的策略可见。对复权价格要格外小心:经拆股和分红调整的序列会被追溯重新计算,这可能会悄悄引入前视偏差。如需更深入的讲解,请参阅我们的前视偏差详细指南。

5. 样本量不足

一个在 5 年内产生 12 笔交易、胜率 75% 的策略在统计上没有意义。只有 12 个观测值时,该胜率的置信区间宽到真实胜率很可能落在 45% 到 95% 之间的任何位置。你无法得出可靠的结论。

如何避免:回测中至少要有 100 笔交易。如果你的策略交易不频繁,可以延长时间范围、在多个资产上测试(注意相关性),或者使用更短的周期。在报告点估计的同时报告置信区间——一个夏普比率为 1.2、95% 置信区间为 [0.4, 2.0] 的结果,与 1.2、区间为 [1.0, 1.4] 的结果,讲述的是截然不同的故事。

6. 曲线拟合

曲线拟合(curve fitting)是过拟合的近亲,但作用于不同的层面。过拟合指的是单个策略的参数过多,而曲线拟合指的是在同一数据上测试太多策略并挑选最好的那个。如果你测试了 100 个不同的策略并报告最好的那个,那么有 99% 的可能,胜出者只是统计上的假象,而不是真正的优势。

如何避免:从一个基于市场微观结构或行为金融学的假设出发,再去测试它——不要一开始就在数据里挖掘规律。如果你确实要测试多个策略,就应用多重检验校正来调整显著性阈值。Bonferroni 校正把你的 alpha 除以测试次数:如果你测试了 20 个策略,就需要 p 值低于 0.0025(而不是 0.05)才能声称结果显著。

7. 没有在不同市场状态下测试

许多策略依赖于市场状态:它们在牛市中有效、在熊市中失灵,或者在低波动环境下有效、在波动率飙升时崩溃。如果你的回测区间只覆盖一种市场状态(例如 2012-2021 年,几乎不间断的牛市),你的结果就不具有普遍性。

如何避免:确保回测至少覆盖两个完整的市场周期——一轮牛市、一轮熊市,最好再加一段横盘期。按年份或按市场状态拆分结果,检查策略在最糟糕的时期是否赚钱(或者至少没有灾难性亏损)。一个夏普比率为 1.5、但在 2020 年暴跌中亏损 50% 的策略,与一个夏普比率为 1.2、最大回撤只有 15% 的策略并不一样。汇总数字掩盖了关于尾部风险的关键信息。

亲自试试

真正理解这些错误的最好方式,是亲身遇到它们。使用 QuantPrompt,你可以快速测试策略,看看结果对交易成本、参数选择和时间段有多敏感。试着把同一个策略分别在 2015-2019 年(牛市)、2020-2022 年(高波动)和 2023-2024 年进行回测——如果结果差异巨大,说明你的策略依赖于市场状态,还需要进一步打磨。

用通俗的语言描述你的策略,立即获得结果,然后不断迭代。目标不是找到一个完美的回测,而是找到一个足够稳健、能够经受住本指南所警示的这些错误的策略。

常见问题

参考资料