halo 的技术博客

返回

每个量化交易员都经历过这种痛苦:精心设计的策略在历史数据上表现优异,年化收益30%,夏普比率2.5,最大回撤控制在10%以内。但一上实盘,三个月亏损20%。

这不是偶然,而是量化回测的三大陷阱在作祟。理解这些陷阱,是从”回测冠军”走向”实盘赢家”的第一步。

陷阱一:过度拟合(Overfitting)#

现象#

你有一个策略框架,通过调整参数优化历史表现。调着调着,发现一组”完美参数”,回测收益曲线漂亮得像艺术品。你满怀信心地实盘运行,结果一塌糊涂。

原因#

这是典型的过度拟合。当你有100个参数组合,纯随机选择其中一个也必然是最优的——数学上的必然。但你选的不是”真正的规律”,而是”历史数据中的噪音”。

量化理解#

假设一个策略有5个参数,每个参数有10种选择,总共有10^5 = 100,000种组合。如果你测试了其中999种,选出表现最好的那一个,这个”最优组合”极有可能是过拟合的产物。

解决方案#

  1. 样本外测试:将历史数据分成训练集和测试集,只在训练集上优化参数,在测试集上验证
  2. 减少参数数量:遵循”奥卡姆剃刀”原则,能用3个参数就别用5个
  3. 交叉验证:使用滚动窗口回测,避免固定时点划分带来的偏差
  4. Walk-Forward Analysis:模拟真实的策略开发流程,在每个时点只用”当时已知”的数据优化

过度拟合示意图

陷阱二:前视偏差(Look-ahead Bias)#

现象#

回测收益虚高,但实盘无法复现。仔细检查代码,发现某处使用了”未来信息”。

典型案例#

  1. 使用当日收盘价做决策:你以为是在”开盘时”做决策,但代码里用的是当天收盘价。收盘价要等到收盘才知道,这已经是”未来信息”
  2. 财报发布日期错误:财报公告日和实际披露日可能不同。如果用错误的日期,相当于提前知道了财报内容
  3. 指数成分股调整:使用”当前成分股”构建历史组合,但历史上这些股票当时可能还不属于该指数

解决方案#

  1. 严格的时间戳检查:确保每个决策只使用”当时已知”的信息
  2. 使用Point-in-Time数据:获取历史时点的真实数据,而非事后修正的数据
  3. 代码审查:这是最容易犯也最难发现的错误,需要仔细审查每一行代码

陷阱三:生存偏差(Survivorship Bias)#

现象#

回测时只使用了”今天还活着”的股票。那些退市、破产、被并购的公司被忽略,导致收益虚高。

影响#

假设你测试一个”买入所有低价股”的策略。如果只考虑今天还在交易的股票,那些曾经低价后来退市的公司就被忽略了——你只看到了活下来的赢家

量化评估#

根据研究,生存偏差可能使回测收益虚高2-5个百分点。对于长期策略,这个偏差是致命的。

解决方案#

  1. 使用全市场数据:包括已退市股票的历史数据
  2. 购买专业数据:CRSP、Compustat等专业数据库提供生存偏差修正后的数据
  3. 自己维护退市股票清单:如果使用免费数据,需要手动补充退市信息

生存偏差示意图

其他常见陷阱#

交易成本低估#

很多人回测时忽略交易成本,或者用一个固定的0.1%代替代价真实的成本结构。实际上:

  • 佣金:通常万分之一到万分之三
  • 滑点:取决于市场深度和下单量
  • 冲击成本:大单会对价格产生显著影响

流动性约束#

回测时可以”随时买入任意数量”,但实盘中,小市值股票可能根本买不到足够的量。

停牌处理#

回测中假设停牌时可以正常交易,但实盘中停牌意味着无法买卖。

一个简单的检查清单#

检查项问题
参数数量是否超过必要数量?
样本外表现训练集和测试集表现是否一致?
前视风险是否使用当日收盘价做决策?
生存偏差是否包含退市股票?
交易成本是否考虑真实成本结构?
流动性策略容量是否符合实际?

总结#

回测是量化交易的核心环节,但完美的回测不等于成功的实盘。过度拟合、前视偏差、生存偏差是三个最常见的陷阱,每个都可能让你的策略在实盘中遭遇滑铁卢。

真正的量化高手,不是回测收益最高的人,而是能将回测收益忠实地转化为实盘收益的人。理解并规避这些陷阱,是走向专业的必经之路。


本文仅代表个人观点,不构成投资建议。量化交易有风险,入市需谨慎。

量化回测的三大陷阱:为什么你的策略回测赚钱,实盘却亏损?
https://blog.halo26812.eu.org/blog/quant-backtesting-traps
Author halo
Published at 2026年7月11日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨