学习笔记
回测是什么:影响回测的四大偏差与软件选型(QuantStart)
QuantStart 回测方法论第一篇。核心一句话:回测是策略实盘表现的「理想化上界」,因为四类偏差(优化、前视、幸存者、心理承受)几乎总是把回测吹高而不是压低。文章先给回测的定义与四个用途,再逐个解剖四大偏差及缓解办法,最后给出回测软件/语言选型标准与作者的个人偏好。素材见 raw/collections/quantstart-backtesting-1/01-successful-backtesting-of-algorithmic-trading-strategies-part-i-quantstart.md。
这是什么
QuantStart(Michael Halls-Moore 的个人量化教程站)「算法交易回测方法论」系列的第一篇。它是接在站内《量化交易入门指南》《策略识别》两篇长文之后的续作。全系列计划分两到三篇;本篇只讲三件事——回测的定义与用途、四大偏差、软件选型。交易成本、交易所微观结构、绩效度量、配对交易示例等留给后续文章(后续文章只有 Part II 在本库收录)。
核心要点
回测的定义与四个用途
- 回测 = 把策略算法暴露给一段历史金融数据流 → 产生一串交易信号 → 每笔「往返交易」(round-trip,两个信号一买一卖)记一笔盈亏 → 累加成总盈亏(P&L / PnL)。
- 为什么值得回测,作者给四个理由:
- 过滤(Filtration):研发阶段先用回测把不达标的策略删掉——回测是策略流水线的又一道过滤器。
- 建模(Modelling):可以「安全地」测试对市场现象的模型,如交易成本、订单路由、延迟、流动性等微观结构问题。
- 优化(Optimisation):改参数数量或取值后重算绩效,用来提高策略表现——但作者警告这条路布满偏差。
- 验证(Verification):外部引入的策略要确认「实现没写错」。外部信号通常拿不到,只能比 Sharpe 比率、回撤等绩效指标来核对自家实现。
- 频率越高越难回测:策略频率升高后,市场与交易所微观结构越来越难建模,回测可靠性下降。执行系统本身是表现关键的策略(超高频率 UHFT)问题最严重。
- 总判断:回测充满偏差,且偏差倾向于吹高绩效。所以永远把回测当作实盘表现的理想化上界(idealised upper bound)。偏差几乎不可能消除,工作是尽量压低它们再决策。
四大偏差一览(本篇方法论底座)
| 偏差 | 一句话 | 主要缓解 |
|---|---|---|
| 优化偏差 Optimisation Bias | 调参调到回测好看,实盘却两样(= 曲线拟合 / 数据窥探) | 参数尽量少、样本尽量多;做灵敏度分析看绩效曲面平滑不平滑 |
| 前视偏差 Look-Ahead Bias | 把当时还拿不到的未来数据用进了模拟 | 修索引 bug;回归系数只算过去;高/低价至少滞后一期 |
| 幸存者偏差 Survivorship Bias | 数据集只含「活到今天」的标的,测试结果被吹高 | 买无幸存者偏差数据(含退市);用更近数据;自建无偏集 |
| 心理承受偏差 Psychological Tolerance Bias | 回测里的深回撤实盘扛不住,策略被中途停掉 | 预期回撤会重现;准备好坚持到重新盈利 |
机制 / 论证
优化偏差:最阴险的一种
- 机制:不断加参数或改参数,直到策略在回测数据集上非常好看。换到实盘,绩效可能明显变差。别名 curve fitting(曲线拟合)与 data-snooping(数据窥探)。
- 难消除的原因:策略几乎总是带很多参数。作者举例的参数类型:进出场标准、回看期(look-back periods)、平均期(如均线平滑参数)、波动率测量频率。
- 两条缓解:
- 参数个数压到最少 + 训练集数据点尽量多。
- 但「数据点越多越好」要小心:太老的训练点可能属于另一个 regime(如旧的监管环境),对当前策略已不适用。
- 灵敏度分析(sensitivity analysis):把参数逐步微调、画绩效「曲面」。有扎实逻辑支撑的参数,曲面应该平滑;曲面很跳(jumpy)往往说明该参数没在反映真实现象,只是测试数据的人工产物(artefact)。
- 提醒:多维优化算法文献浩瀚、是活跃研究区,本文不展开——但看到「回测好得离谱」的策略时,把这句记在脑子里。
前视偏差:用错了未来数据
- 定义:按时间顺序回测走到时刻 N,却混进了 N+k(k>0)的、当时实际不可得的数据。
- 错误极其隐蔽,作者给三个典型来源:
- 技术 bug:代码里的数组/向量索引偏移错位,把 N+k 的数据算进来。
- 参数计算:两段时间序列做线性回归求系数做优化——若用**整段数据(含未来)**算系数再回溯应用到策略,就是前视。
- 极值(Maxima/Minima):策略用当期最高/最低价(OHLC 的高低价)做决策——但极值只有当期结束才知道。凡用到高/低价的策略,必须至少滞后一期(lag at least one period)。
- 结论:优化偏差之外要格外小心它。它常常是「实盘明显跑输回测」的头号原因。
幸存者偏差:只测活下来的
- 机制:测试数据集不含某个时点真实可选的全部资产,只含「幸存到今天」的那些。对某些策略类型,绩效被显著吹高。
- 例子:在 2001 年市场崩盘前后对随机一批股票测策略。部分科技股破产,另一些挺过来甚至大涨。若只把「挺过回撤期」的股票放进测试,等于预先知道了谁成功——这就是幸存者偏差。作者点明:它本质是前视偏差的一个特例,因为未来信息被放进了过去分析。
- 两条缓解:
- 用无幸存者偏差的数据集:含已退市实体(delisted)。这类数据不便宜,机构才常用。特别警告:Yahoo Finance 数据不是无幸存者偏差的,却是很多零售散户量化者的数据源。另一条路:做不容易沾幸存者偏差的资产,如某些商品(及其期货衍生品)。
- 用更近的数据:越近的数据里整体退市概率越低,「选到幸存者」的偏向越小。也可以从当下起自己积累:持续收集 3–4 年后,就能得到一份扎实的自建无偏数据集。
心理承受偏差:算法也会被「人」拖垮
- 现象:回测 5 年以上,看到整体向上的净值曲线、复利年化、Sharpe 和回撤都很满意,容易低估实盘痛苦。作者给的典型数字:动量策略可能带 25% 最大相对回撤、最长回撤持续 4 个月——看回测觉得能忍,实盘完全不是一回事。
- 作者的机构经历:亲眼见过长期回撤有多难熬,「即便回测早就预告了这段回撤」。
- 为什么叫 bias:一个本来能成的策略,往往在长期回撤中被停止交易,于是实盘显著跑输回测。算法策略表面自动化,人的心理仍然能重创盈利。
- 教训:回测里出现某百分比、某时长的回撤,就预期实盘同样会来;必须有「熬到重新盈利」的坚持。
可操作
- 把「回测 = 理想上界」当默认假设,别把回测收益直接外推成实盘收益。
- 偏差最小化检查清单(编译自原文):
- 参数个数压到最少;训练样本量加大的同时检查老样本的 regime 是否仍适用。
- 对每个参数做灵敏度分析:绩效曲面平滑才可信,跳变要警惕。
- 用 OHLC 高/低价做信号的策略,把高/低价至少滞后一期。
- 用线性回归等算策略参数的,只用「截至当日」的历史,绝不用全样本。
- 检查取数代码的索引有没有把未来数据带进来。
- 权益类回测优先用含退市的、无幸存者偏差数据;别默认 Yahoo 数据干净;或改用近期数据 + 自建 3–4 年无偏集。
- 回测里看到 25% 级回撤、数月级回撤期,就按「实盘会重现」做心理与风控预案。
- 回测软件/语言选型(作者的八条标准):编程能力、执行能力/券商绑定、可定制性、策略复杂度、偏差最小化、开发速度、执行速度、成本。
- 观点:能掌控整套技术栈(own the tech stack),长期比什么都外包给厂商软件更有利于 P&L——厂商软件的 bug 你修不了。
- TradeStation 与券商深度绑定,作者不欣赏(换 broker 时难迁移);Interactive Brokers 的 API 稳健但界面「略别扭」。
- Excel 只适合简单策略,扛不住大量资产与复杂算法。
- HFT/UHFT 得用 C/C++(如今常在 GPU 与 FPGA 上做),超出本文范围。
- 作者个人推荐 Python:定制、开发速度、测试能力、执行速度平衡最好;要更快就「drop in」C++。许多量化者采用迭代法:先用 Python 原型,再把慢段逐步转 C++,最终整套跑 C++「放着自动交易」。
术语
- 回测(backtest):历史数据上重放策略、累加盈亏。
- 往返交易(round-trip):一次买入信号 + 一次卖出信号构成的一笔完整交易。
- P&L / PnL:盈亏(profit and loss)。
- 曲线拟合 / 数据窥探(curve fitting / data-snooping):优化偏差的别名。
- 灵敏度分析(sensitivity analysis):逐步调参看绩效曲面的方法。
- 前视偏差(look-ahead bias):未来数据混入过去时点的模拟。
- 幸存者偏差(survivorship bias):只测存活至今的资产造成的虚高。
- 无幸存者偏差数据集:含已退市实体的数据。
- 心理承受偏差(psychological tolerance bias):实盘扛不住回撤导致策略被提前停掉。
- 最大相对回撤 / 回撤持续期(maximum relative drawdown / drawdown duration):净值从峰到谷的深度与时长。
- Sharpe 比率:单位波动对应的超额回报。
- regime:市场所处的制度/环境段(如监管环境)。
- 微观结构(market microstructure):订单簿、撮合、流动性等交易机制细节。
- 动量策略(momentum strategy):追涨杀跌的趋势类策略。
不确定 / 待验证
- 全文是方法论综述,没有实验数字与数据,无法用数字核验;观点归 QuantStart 作者个人。
- 文章写作年份未在正文标注(QuantStart 站史约 2012 前后),所提 Yahoo 免费数据、TradeStation、Interactive Brokers 语境以写作时点为准 [需要验证]。
- 原文说全系列「两到三篇」;实际后续篇目(绩效度量、配对交易示例等)大多未在本库收录,本库只有 Part I/II。
- 文末 Quantcademy 会员与《Successful Algorithmic Trading》等书籍条目是站内商业推广,非方法论内容。
相关
- 交易成本建模与回测引擎的实现细节(QuantStart) — 下一篇:交易成本建模与回测引擎细节
- 回测偏差(优化 / 前视 / 幸存者 / 心理承受) — 四大偏差的方法论底座概念页
- 回测评价三指标(收益 / 最大回撤 / 交易次数) — 回测「看结果」的三指标入口(偏差问题正好回答它信不信)
- 多回测与参数网格分析(分位回测、超额评估) — 灵敏度分析/多回测网格在聚宽侧的对应做法
- QuantStart 算法交易回测方法论(Part I–II) — 本系列两篇的总览
更新 2026-09-06