回测基础概念:定义、差异、过拟合与常见陷阱
回测(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 陷阱检查清单
| 陷阱类型 | 检查方法 | 严重程度 |
|---|---|---|
| 幸存者偏差 | 检查数据源是否包含退市标的 | 高 |
| 前视偏差 | 逐行检查信号生成时间戳 | 极高 |
| 未来函数 | 使用延迟对齐测试 | 极高 |
| 数据窥探 | 检查参数优化次数 | 中 |
| 忽略成本 | 对比含成本/不含成本的回测结果 | 高 |
| 过度优化 | 检查参数敏感度 | 中 |