只要给计算机足够的自由,它总能在任何一段历史上找到赚钱的规则。为每个亏损年份加一个过滤条件,挑出恰好表现最好的均线周期,剔除造成损失的那个月份:每一步都让回测更好看,也让规则对过去了解得更多、对市场本身了解得更少。这一过程称为过度拟合,也是回测漂亮、实盘账户却令人失望的最常见原因。标准的防范方法很简单:设计规则时把一部分历史数据搁置一旁、不予查看,之后只用它检验一次。
过度拟合的表现
价格历史混合了可重复的规律与噪声,后者包括偶发事件、随机序列和时间上的巧合。构件很少的规则只能捕捉大致的规律;条件繁多、参数经过精细调校的规则则连噪声也一并捕捉,而在回测中,噪声看起来与利润毫无二致。
过度拟合规则的警示信号:
- 条件繁多,且每一条都是在审视某个亏损时段之后才加上的。
- 数字异常具体:37 日均线、RSI 阈值 23、止损 6.4%。
- 参数稍作变动,结果便大幅恶化(见第 5 课)。
- 大部分利润来自寥寥几笔交易或某一个年份。
- 无法用浅白的语言说明规则为何有效。
样本内与样本外
设计、挑选或调优规则时使用的数据属于样本内。审视这些数据时作出的每一项决定,包括是否保留这条规则本身,都已利用了它们,因此样本内结果系统性偏高。从未影响过规则形成的数据属于样本外,只有在样本外,检验才能较接近地衡量规则面对新价格时可能的表现。
最简单的做法是把历史一分为二。训练期用于评判规则,如有需要也可在此改进规则。验证期则被预留出来,规则保持不变,只运行一次。如果规则在训练期表现良好只是因为拟合了噪声,这种优势就没有理由在验证期重现。
验证期只有在保持「未见」时才有价值。若您运行验证期后不满意结果,调整规则再运行一次,验证期就已沦为训练数据,新结果实际上是变相的样本内结果。原则是只看一次;改动之后的第二次查看属于一项新研究,其验证期结果的可信度要低得多。
为何固定分割日期
如果分割日期可以移动,它就成了又一个可调参数:先试 2010 年,再试 2012 年、2015 年,停在验证期结果最好看的那个年份。为杜绝这种诱惑,Clear Tape 对所有检验使用同一个分割日期:
- 训练期:2000 年 1 月 1 日至 2014 年 12 月 31 日。共十五年,包括 2000–02 年熊市、2007–09 年金融危机以及其间漫长的上涨。
- 验证期:2015 年 1 月 1 日至最新收盘。超过十年,包括 2018 年的抛售、2020 年的暴跌和 2022 年的熊市。
- 自 1998 年起预热,使 200 日均线在训练期第一天就已有数值。
由于所有人、所有规则都使用同一个分割日期,不同研究的结论可以相互比较。代价是 2015 年之后上市的股票没有训练期,对其检验会返回数据不足,而不是给出一个仅凭几年数据得出的结论。如实的补救办法是改用 ETF 或上市时间更长的股票来检验这一想法,而不是放宽标准。
2014 年 12 月 31 日仍未平仓的交易,在计算训练期结果时按当日收盘价计值,且不计入验证期;验证期只包括 2015 年及以后入场的交易。指标在整段序列上计算,且只使用过去的数据,因此验证期的任何信息都不会渗入训练期。
四种结论
Clear Tape 的每次验证期回测都以四种结论之一收尾。策略与其基准(等权买入并持有同一组股票,按总收益计)在两个时期内分别比较 CAGR 和夏普比率两项指标,共四项比较。「跑赢」指按显示精度四舍五入后严格更高(CAGR 以百分比保留一位小数,夏普比率保留两位小数);相等视为未跑赢。
| 结论 | 条件 |
|---|---|
| 数据不足 | 任一时期内:基准价格数据不足 3 年、所有股票合计已平仓交易少于 20 笔、有数据的股票不到所测股票的一半,或缺少无风险利率或基准。最先检查。 |
| 无优势 | 训练期两项均未跑赢,或验证期两项均未跑赢。 |
| 通过验证 | 两个时期的 CAGR 和夏普比率均跑赢:四项全胜。 |
| 有取舍 | 其余情况:每个时期至少一项胜出,但未达四项全胜。典型情形是收益更高但波动更大,或走势更平稳但收益较低。 |
这一规则有意从严。即使规则在训练期失败、在验证期碰巧胜出,结论仍是无优势:规则是在训练数据上形成的,在那里失败才是更有说服力的信息。以下五项假设研究说明了判定顺序:
| 假设研究 | 训练期:CAGR、夏普(基准) | 验证期:CAGR、夏普(基准) | 结论 |
|---|---|---|---|
| A | 8.4%(7.1%),0.52(0.38) | 11.9%(11.2%),0.81(0.74) | 通过验证 |
| B | 6.2%(7.1%),0.49(0.38) | 9.8%(11.2%),0.79(0.74) | 有取舍 |
| C | 9.0%(7.1%),0.55(0.38) | 10.6%(11.2%),0.70(0.74) | 无优势 |
| D,训练期 18 笔交易 | 10.3%(7.1%),0.66(0.38) | 12.5%(11.2%),0.90(0.74) | 数据不足 |
| E | 7.4%(7.1%),0.40(0.38) | 11.24% → 11.2%(11.2%),0.76(0.74) | 有取舍 |
研究 C 在训练期明显跑赢基准,最终仍是「无优势」:一旦面对新数据,两项比较全部落后,这正是过度拟合的典型特征。研究 D 的数字最为诱人,却得不到结论,因为 18 笔交易太少,无法区分能力与运气。研究 E 的验证期 CAGR 四舍五入后与基准持平,因此这一项计为未跑赢。
为何「无优势」是有用的结果
多数如实的检验往往以「无优势」或「有取舍」告终。这并不说明方法有问题,而是反映出:一旦双方都计入成本、股息和现金利息,要跑赢直接持有同样的股票是多么困难。「无优势」的结论传递了有价值的信息:这条规则在这些股票上,并没有为其复杂性带来回报。它为您省下了本要在实盘中为得出同一结论而付出的资金和数月时间。
请像记录好结果一样认真记录「无优势」的结果。只保留成功案例的研究日志,会掩盖尝试过的想法数量,使成功案例显得比实际更有说服力(见第 5 课)。无论结论如何,Clear Tape 都允许保存研究,并以相同的尺寸和位置显示四种结论,不淡化其中任何一种。
如何应用
入场
只用训练期来设计和改进规则。运行验证期之前,把最终版本写下来。
止损
验证期只运行一次。若此后修改规则,应将其记为一项新研究,并降低对其验证期结果的信任。
目标
目标是「通过验证」,或者您确实愿意接受其取舍的「有取舍」,例如以较低收益换取小得多的回撤,并且两个时期都有足够数量的交易作支撑。
失效条件
「无优势」意味着研究结束。「数据不足」意味着在这组股票上无法回答这个问题,应改用历史更长的标的来检验这一想法。
常见错误
- 设计规则时偷看验证期,然后仍称结果为样本外。
- 移动分割日期,直到验证期结果好看为止。
- 每次修改后都重新运行验证期,直到结论变好。
- 把「有取舍」当作通过,只因占优的那一半恰好是您当下看重的。
- 丢弃「无优势」的研究,使研究日志只剩下成功案例。
小结
过度拟合是让规则去拟合过去的噪声;它会改善样本内结果,损害样本外结果。事先不予查看、只运行一次的验证期是最简单的防线,固定的分割日期则防止分割本身被调优。Clear Tape 以 2000–2014 年为训练期、2015 年至今为验证期,在两个时期内将 CAGR 和夏普比率与等权、总收益口径的基准比较,并严格按顺序给出「通过验证」「有取舍」「无优势」或「数据不足」。「无优势」是常见且有用的答案。下一课将讨论通往过度拟合的另一条路:尝试众多参数组合,然后保留最好的那一个。
仅供学习与参考,不构成投资建议。