回测年化100%实盘亏30%?三个致命深坑,专坑量化小白
回测年化100%、最大回撤不到8%、夏普比率2.5——曲线完美如画。实盘三个月,策略亏了30%。这个场景在量化圈重复了无数次,以至于它几乎成了一种"成人礼"。
问题出在哪里?不是代码有bug,而是回测本身在撒谎。三个致命深坑,每一个都足以让你的回测收益从"印钞机"变成"绞肉机"。
一、过拟合:你的策略不是在描述市场,是在背诵历史
过拟合(Overfitting)是回测的头号杀手。你建了一个均线交叉策略,发现有些亏损交易"不该亏",于是加一个RSI过滤;又发现某些时段表现差,加一条"1月和4月空仓";再调一下止损距离,精确到分……每加一条规则,历史曲线就更平滑一点。到第十条规则时,你的策略已经是一条完美的45度上升线——因为它已经把过去的每一笔交易都反向工程了。

图:过拟合、前视偏差、幸存者偏差——回测与实盘差距的三大根源
过拟合的红旗信号:参数超过10个、微小参数变动导致结果剧变、策略只在特定时段有效、夏普比率超过3、零亏损月。检测方法很简单:把策略跑在你从未看过的时段上。如果样本内收益180%、样本外只有12%甚至为负,你找到的不是策略,是曲线拟合。
二、前视偏差:你用了"未来的底牌"打昨天的牌
前视偏差(Look-ahead Bias)是最隐蔽的坑。它的本质是:回测时用了决策时刻不可能获得的信息。
最常见的三种形式:
- 用当日收盘价做当日决策:盘中你不知道收盘价是多少,但回测代码里用了当日close生成信号——等于偷看了未来。
- 财报数据提前使用:一季报覆盖1-3月,但实际公布日在4月底。如果你在4月1日就用到了这笔数据,就是在用未来信息。
- 复权价格不当:后复权价格在除权日会追溯调整,但当时你并不知道未来会分红送转。用了被未来调整过的价格做过去决策,同样属于前视。
正确做法:所有信号都用shift(1)——基于昨天的数据生成今天的信号。财报数据严格按公告日对齐,而非报告期截止日。
三、幸存者偏差:你只看到了活下来的那批
幸存者偏差(Survivorship Bias)是最容易被忽视的坑。你在今天的股票池上回测过去十年的策略——但今天的股票池里,已经没有退市的那些公司了。那些退市的、破产的、被摘牌的,恰恰是表现最差的股票。把它们从样本中剔除,等于系统性地剔除了最差的结果,回测收益自然被虚高。
研究显示,幸存者偏差通常使年化收益虚高1-3个百分点。对低收益策略来说,这点差距足以把一个亏损策略变成"盈利"策略。
四、怎么避免:一个实操清单
- 走步前验证(Walk-forward):训练集70%、测试集30%,严格按时间切分,绝不随机打乱。只在测试集上看结果。
- 参数尽量少:3条规则能描述的策略,不要用15条。简单策略的鲁棒性远超复杂策略。
- 加入交易成本:佣金万2、印花税千1、滑点设为买价+0.2%/卖价-0.2%。不加成本的回测都是自欺欺人。
- 用含退市股票的数据库:如果数据源只提供现存股票,回测结果从根基上就有偏差。
- 先模拟盘验证再上实盘:回测跑通后,先用信络量化交易助手这类工具在模拟环境跑2-4周,确认实盘行为与回测一致后再投入真金白银。