回测基础概念:定义、差异、过拟合与常见陷阱

回测(Backtesting)是量化策略开发中最核心的验证环节。它利用历史数据模拟策略在过去的表现,以此评估策略的有效性和稳健性。然而,回测与实盘之间存在天然鸿沟,理解这些差异、识别过拟合与欠拟合、避开常见陷阱,是构建可靠策略的前提。

核心观点:回测不是实盘的“预言”,而是策略逻辑的“压力测试”。回测的目标是发现策略在历史数据中的稳定模式,而非追求完美的历史收益曲线。

2.1 回测的定义与核心要素

回测本质上是一个模拟交易系统,它按照预设的规则,在历史数据的时间轴上逐笔执行买卖信号,并记录每次交易的盈亏、持仓周期、最大回撤等指标。一个完整的回测系统包含以下核心要素:

要素 说明 常见问题
数据源 历史价格、成交量、财务数据等 幸存者偏差、前视偏差、数据缺失
交易规则 开仓、平仓、止损、仓位管理逻辑 规则模糊、未来函数、滑点忽略
成本模型 手续费、滑点、冲击成本 成本低估、固定滑点不切实际
评价指标 年化收益率、夏普比率、最大回撤、胜率 指标单一、忽略统计显著性
实战建议:在回测初期,先使用固定滑点(如万分之二)和双边手续费(如万分之三)作为基准,后续再根据策略类型(高频/低频)调整成本模型。

2.2 回测与实盘的差异

回测与实盘之间的差异是导致策略“纸上富贵、实盘亏损”的根本原因。以下表格总结了关键差异:

维度 回测环境 实盘环境
成交确定性 假设以指定价格立即成交 存在订单簿深度、排队、部分成交
流动性 忽略或使用固定滑点 大单冲击成本、流动性枯竭
信息延迟 数据即时可用 网络延迟、撮合延迟、数据推送延迟
心理因素 无情绪干扰 恐惧、贪婪、犹豫、纪律性
市场状态 历史数据固定不变 未来市场结构可能变化(如T+0变T+1)

回测中表现优异的策略,在实盘中往往面临滑点放大、成交不足、信号延迟等问题。因此,回测结果需要打折扣看待,通常建议在回测收益基础上扣除20%-30%作为实盘预期。

回测与实盘差异对比图 回测环境 假设:立即成交、无延迟 成本:固定滑点、忽略冲击 数据:历史固定、无噪声 心理:无情绪干扰 实盘环境 现实:排队、部分成交、拒单 成本:冲击成本、流动性溢价 数据:延迟、噪声、断线 心理:恐惧、贪婪、犹豫 差距

2.3 过拟合与欠拟合

过拟合和欠拟合是回测中两个极端问题,它们直接影响策略在样本外数据的表现。

2.3.1 过拟合(Overfitting)

过拟合是指策略在历史数据上表现极好,但在新数据上表现很差。本质上是策略学习了历史数据中的噪声,而非真实的市场规律。

  • 典型表现:回测曲线完美向上,夏普比率极高(>3),但样本外测试收益大幅下降甚至亏损。
  • 常见原因:参数过多、参数优化过度、数据窥探、使用未来函数、策略复杂度过高。
  • 识别方法:交叉验证、样本外测试、蒙特卡洛模拟、参数敏感性分析。

2.3.2 欠拟合(Underfitting)

欠拟合是指策略在历史数据上表现不佳,未能捕捉到明显的市场规律。本质上是策略过于简单,无法描述市场的真实结构。

  • 典型表现:回测收益曲线接近无风险利率,夏普比率接近0,胜率接近50%。
  • 常见原因:特征不足、模型过于简单、交易规则过于粗糙。
  • 识别方法:增加特征维度、尝试更复杂的模型、调整交易规则。
对比维度 过拟合 欠拟合
回测收益 极高(异常高) 低(接近无风险)
样本外收益 大幅下降 同样低
策略复杂度 过高 过低
参数数量 过多 过少
解决方案 简化模型、增加正则化、减少参数 增加特征、提升模型复杂度
过拟合与欠拟合示意图 欠拟合 模型过于简单 回测收益低 样本外收益也低 特征不足 规则粗糙 增加特征/复杂度 过拟合 模型过于复杂 回测收益极高 样本外收益暴跌 参数过多 数据窥探 简化/正则化 理想状态 复杂度适中 回测收益合理 样本外收益稳定 交叉验证通过 参数敏感度低 稳健策略

2.4 回测中的常见陷阱

即使理解了过拟合与欠拟合,回测中仍存在大量隐蔽陷阱。以下列出最常见的陷阱及其规避方法:

2.4.1 幸存者偏差(Survivorship Bias)

回测数据只包含当前仍在交易的标的,忽略了已经退市、被摘牌的标的。这会导致回测收益虚高,因为退市标的通常表现较差。

  • 规避方法:使用包含退市标的的全量历史数据,或使用无幸存者偏差的数据集。

2.4.2 前视偏差(Look-Ahead Bias)

在回测中使用了未来才能获取的数据。例如,使用当天的收盘价作为开仓信号,但实际交易中收盘价在收盘后才能确定。

  • 规避方法:严格对齐时间戳,确保信号生成时只使用历史数据。使用延迟对齐技术,如使用前一天的收盘价作为信号。

2.4.3 未来函数(Future Function)

回测代码中无意间使用了未来数据。例如,在计算移动平均线时,使用了包含未来数据的窗口。

  • 规避方法:使用滚动窗口计算指标,确保每个时间点的计算只基于该时间点之前的数据。

2.4.4 数据窥探(Data Snooping)

反复使用同一数据集进行策略优化,导致策略过度适应历史数据。

  • 规避方法:将数据分为训练集、验证集、测试集,只在训练集上优化参数,测试集仅用于最终评估。

2.4.5 忽略交易成本

回测中忽略手续费、滑点、冲击成本,导致回测收益虚高。

  • 规避方法:在回测中计入双边手续费和动态滑点,滑点可根据标的流动性设置。
关键提醒:回测中最危险的陷阱不是单一问题,而是多个陷阱叠加。例如,幸存者偏差 + 前视偏差 + 忽略成本,可能让一个亏损策略在回测中看起来年化收益50%以上。务必逐项检查回测代码,确保每个环节都符合实盘逻辑。

2.4.6 陷阱检查清单

陷阱类型 检查方法 严重程度
幸存者偏差 检查数据源是否包含退市标的 高
前视偏差 逐行检查信号生成时间戳 极高
未来函数 使用延迟对齐测试 极高
数据窥探 检查参数优化次数 中
忽略成本 对比含成本/不含成本的回测结果 高
过度优化 检查参数敏感度 中