Jikipedia
Jikipedia量化QuantStart 算法交易回测方法论(Part I–II)回测是什么:影响回测的四大偏差与软件选型(QuantStart)
学习笔记

回测是什么:影响回测的四大偏差与软件选型(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)、平均期(如均线平滑参数)、波动率测量频率。
  • 两条缓解:
    1. 参数个数压到最少 + 训练集数据点尽量多。
    2. 但「数据点越多越好」要小心:太老的训练点可能属于另一个 regime(如旧的监管环境),对当前策略已不适用。
    3. 灵敏度分析(sensitivity analysis):把参数逐步微调、画绩效「曲面」。有扎实逻辑支撑的参数,曲面应该平滑;曲面很跳(jumpy)往往说明该参数没在反映真实现象,只是测试数据的人工产物(artefact)。
  • 提醒:多维优化算法文献浩瀚、是活跃研究区,本文不展开——但看到「回测好得离谱」的策略时,把这句记在脑子里。

前视偏差:用错了未来数据

  • 定义:按时间顺序回测走到时刻 N,却混进了 N+k(k>0)的、当时实际不可得的数据。
  • 错误极其隐蔽,作者给三个典型来源:
    1. 技术 bug:代码里的数组/向量索引偏移错位,把 N+k 的数据算进来。
    2. 参数计算:两段时间序列做线性回归求系数做优化——若用**整段数据(含未来)**算系数再回溯应用到策略,就是前视。
    3. 极值(Maxima/Minima):策略用当期最高/最低价(OHLC 的高低价)做决策——但极值只有当期结束才知道。凡用到高/低价的策略,必须至少滞后一期(lag at least one period)。
  • 结论:优化偏差之外要格外小心它。它常常是「实盘明显跑输回测」的头号原因。

幸存者偏差:只测活下来的

  • 机制:测试数据集不含某个时点真实可选的全部资产,只含「幸存到今天」的那些。对某些策略类型,绩效被显著吹高。
  • 例子:在 2001 年市场崩盘前后对随机一批股票测策略。部分科技股破产,另一些挺过来甚至大涨。若只把「挺过回撤期」的股票放进测试,等于预先知道了谁成功——这就是幸存者偏差。作者点明:它本质是前视偏差的一个特例,因为未来信息被放进了过去分析。
  • 两条缓解:
    1. 用无幸存者偏差的数据集:含已退市实体(delisted)。这类数据不便宜,机构才常用。特别警告:Yahoo Finance 数据不是无幸存者偏差的,却是很多零售散户量化者的数据源。另一条路:做不容易沾幸存者偏差的资产,如某些商品(及其期货衍生品)。
    2. 用更近的数据:越近的数据里整体退市概率越低,「选到幸存者」的偏向越小。也可以从当下起自己积累:持续收集 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》等书籍条目是站内商业推广,非方法论内容。

相关

更新 2026-09-06

检索知识库

按标题、类型或正文检索