1. 回测基础概念
1.1 什么是量化回测
量化回测(Quantitative Backtesting)是指利用历史数据,按照预设的交易策略规则,模拟执行交易并计算绩效的过程。它是量化策略开发中不可或缺的验证环节,其核心逻辑可概括为:
历史数据 + 策略规则 → 模拟交易 → 绩效评估
回测的本质是用已知数据检验未知策略,帮助开发者判断策略是否具备统计意义上的盈利能力和稳定性。一个完整的回测系统至少包含数据加载、信号生成、交易执行、绩效计算四个模块。
1.2 回测与实盘的核心区别
回测环境与实盘交易之间存在显著差异,理解这些差异是避免“回测曲线漂亮、实盘亏损严重”的关键。下表从六个维度进行对比:
| 对比维度 | 回测环境 | 实盘环境 |
|---|---|---|
| 数据质量 | 历史数据可能存在幸存者偏差、前视偏差 | 实时数据存在延迟、断流、异常值 |
| 交易成本 | 通常按固定费率或简化模型计算 | 包含滑点、佣金、印花税、冲击成本 |
| 执行延迟 | 假设立即成交,无网络延迟 | 存在网络延迟、撮合排队、部分成交 |
| 资金管理 | 通常忽略资金规模对市场的影响 | 大资金会显著影响买卖盘口 |
| 心理因素 | 无情绪干扰,完全机械执行 | 恐惧、贪婪、犹豫等情绪影响决策 |
| 策略适应性 | 容易过度优化,拟合历史噪声 | 需要应对市场结构变化和黑天鹅事件 |
⚠️ 常见误区:许多初学者认为回测收益高就等于策略好。实际上,回测中忽略滑点、手续费和流动性限制,可能导致实盘收益与回测结果相差 30%-50% 甚至更多。务必在回测中预留足够的安全边际。
1.3 回测的核心三要素
任何量化回测系统都离不开三个基本要素:数据、策略、绩效。三者缺一不可,且相互制约。
1.3.1 数据——回测的基石
数据质量直接决定回测结果的可靠性。常见的数据类型包括:
- 行情数据:开盘价、收盘价、最高价、最低价、成交量、成交额(OHLCV)
- 基本面数据:财务报表、估值指标、宏观经济指标
- 另类数据:舆情数据、卫星图像、供应链数据
数据清洗与对齐是回测前最重要的准备工作,常见问题包括:
- 幸存者偏差:只包含当前存活的股票,忽略已退市的标的
- 前视偏差:使用了未来数据(如用当天的收盘价计算当天的信号)
- 时间戳对齐:不同数据源的时间精度不一致,导致信号错位
# 数据对齐示例:避免前视偏差
import pandas as pd
# 错误做法:使用当天收盘价计算当天信号(前视偏差)
df['signal'] = (df['close'] > df['close'].shift(1)).astype(int)
# 正确做法:使用前一天收盘价计算当天信号
df['signal'] = (df['close'].shift(1) > df['close'].shift(2)).astype(int)
1.3.2 策略——回测的灵魂
策略是交易规则的集合,通常包含以下组成部分:
- 信号生成规则:基于技术指标、统计模型或机器学习模型产生买卖信号
- 仓位管理规则:每次交易的头寸规模(固定手数、百分比、凯利公式等)
- 风控规则:止损、止盈、最大回撤限制、杠杆控制
- 过滤条件:交易时间、市场状态(趋势/震荡)、流动性筛选
💡 策略设计原则:好的策略应当具备“可解释性”和“稳健性”。可解释性意味着你能说清楚策略为什么赚钱;稳健性意味着策略在不同市场周期和参数范围内都能保持相对稳定的表现。
1.3.3 绩效——回测的裁判
绩效评估不是只看收益率,而是一个多维度的评价体系。核心指标包括:
| 指标类别 | 具体指标 | 含义 |
|---|---|---|
| 收益类 | 年化收益率、累计收益率 | 衡量策略的赚钱能力 |
| 风险类 | 最大回撤、年化波动率、VaR | 衡量策略的风险暴露 |
| 风险调整收益 | 夏普比率、卡玛比率、索提诺比率 | 衡量单位风险下的收益 |
| 交易统计 | 胜率、盈亏比、交易次数 | 衡量策略的交易特征 |
1.4 回测系统的架构概览
一个工业级的回测系统通常采用模块化架构,各组件职责清晰、可独立替换。下图展示了一个典型的回测系统软件架构:
架构设计要点:
- 解耦性:各层之间通过接口通信,替换数据源或策略逻辑时不影响其他模块
- 可扩展性:支持多品种、多周期、多策略并行回测
- 可复现性:每次回测结果应能完全复现,依赖随机种子和版本控制
- 性能优化:向量化计算优先于循环迭代,大数据量时使用内存映射或数据库