回测基础:回测的基本流程、数据准备、策略参数与绩效指标
回测是量化策略开发的核心验证环节,其本质是在历史数据上模拟策略的交易逻辑,以评估策略的潜在表现。然而,回测并非简单的“跑一遍历史数据”,而是一个涉及数据工程、参数设定、绩效评估与偏差控制的系统性工程。理解回测的基本流程、数据准备要点、参数含义以及绩效指标的适用边界,是识别和修正回测偏差的前提。本章将围绕这四个核心模块展开,为后续深入剖析各类偏差打下坚实基础。
2.1 回测的基本流程:从假设到结论的闭环
回测流程看似简单,但每一步都隐藏着偏差的种子。一个严谨的回测流程应当包含以下五个环节:策略假设定义、数据准备与清洗、回测引擎执行、绩效评估与诊断、参数优化与稳健性检验。这五个环节构成一个闭环,任何一步的疏忽都可能导致回测结果失真。
核心原理:流程的严谨性决定结果的可靠性
回测的核心原理是“用历史模拟未来”。但历史数据是有限的、不完整的,且市场结构会随时间变化。因此,回测流程必须设计为能够最小化历史数据与未来现实之间的差距。这要求流程中每一步都有明确的规则和记录,确保可复现性。
操作流程:五步闭环法
- 策略假设定义:明确策略的交易逻辑(如均线金叉)、目标市场(如沪深300成分股)、交易频率(日线/分钟线)以及资金管理规则。此阶段需形成书面文档,避免后续随意修改。
- 数据准备与清洗:获取原始数据后,需进行缺失值处理(如前向填充)、异常值剔除(如涨跌停导致的极端价格)、复权处理(前复权/后复权)以及时间戳对齐(不同数据源时区统一)。
- 回测引擎执行:选择回测平台或自研引擎,设定撮合规则(如按收盘价成交、按次日开盘价成交)、交易成本(佣金、印花税、滑点)以及资金约束(如最大持仓数量)。
- 绩效评估与诊断:计算收益、风险、回撤等指标,并生成净值曲线、回撤曲线、月度收益分布等图表。重点观察策略在极端市场(如2015年股灾、2020年疫情)下的表现。
- 参数优化与稳健性检验:在参数空间内进行优化(如均线周期从5到60),但需警惕过拟合。通过样本内外测试、滚动窗口测试、蒙特卡洛模拟等方法检验参数的稳健性。
案例拆解:一个简单的双均线策略回测
假设我们要回测一个“双均线金叉死叉”策略(5日均线上穿20日均线买入,下穿卖出),标的为沪深300ETF(510300),时间区间为2018-2022年。
- 初始现象:初步回测显示年化收益率为25%,夏普比率1.8,最大回撤仅8%。结果过于完美,引发怀疑。
- 分析判断:检查数据后发现,使用了后复权价格,但未考虑分红除权对价格的影响,导致买入卖出价格失真。同时,交易成本仅设置了万2.5佣金,未包含滑点。
- 实际操作:改用前复权数据,并将交易成本调整为佣金万2.5 + 滑点0.1% + 印花税0.1%(卖出)。重新回测后,年化收益率降至12%,最大回撤扩大至15%。
- 结果对比:修正后的结果更接近实盘预期。复盘发现,初始回测的“完美表现”主要源于数据复权错误和成本低估。
2.2 数据准备:回测的基石
数据是回测的输入,其质量直接决定了回测结果的可靠性。数据准备不仅仅是“下载数据”,而是涉及数据源选择、清洗、对齐、复权等多个环节。
核心原理:垃圾进,垃圾出
如果输入数据存在幸存者偏差(只保留当前存续的股票)、前视偏差(使用了未来信息)或错误数据(如错误的价格、成交量),那么无论策略逻辑多优秀,回测结果都不可信。数据准备的目标是构建一个“无偏、完整、一致”的历史数据集。
数据准备的关键步骤
| 步骤 | 内容 | 常见偏差来源 | 修正方法 |
|---|---|---|---|
| 数据源选择 | 交易所官方、第三方(Wind、Choice、聚宽) | 不同数据源价格不一致 | 交叉验证,优先使用交易所原始数据 |
| 复权处理 | 前复权、后复权、不复权 | 除权除息导致价格跳空 | 使用前复权数据,并保留复权因子 |
| 缺失值处理 | 停牌、无交易、数据缺失 | 前向填充导致未来信息泄漏 | 停牌期间不交易,缺失值标记并跳过 |
| 异常值处理 | 涨跌停、极端价格、成交量异常 | 异常值影响均线计算 | 剔除或替换为前值,但需记录 |
| 时间对齐 | 不同市场时区、交易时段 | 时间戳错位导致信号滞后 | 统一使用交易所本地时间,对齐到分钟 |
实战场景:处理停牌数据
在A股市场,停牌是常见现象。若某股票停牌期间,策略信号触发买入,但实际无法成交。若回测引擎未处理停牌,会默认以停牌前收盘价成交,导致回测收益虚高。正确处理方式是:在停牌期间,策略不产生交易信号,或信号延迟至复牌日执行。
2.3 策略参数:灵活性与过拟合的平衡
策略参数是策略逻辑中的可调变量,如均线周期、RSI阈值、止损比例等。参数的选择直接影响策略表现,但过度优化参数会导致过拟合。
核心原理:参数空间与过拟合
参数空间是所有可能参数组合的集合。参数优化是在该空间中寻找“最优”组合,但历史数据中的最优参数往往是对历史噪声的拟合,而非对未来规律的捕捉。过拟合的策略在样本内表现优异,在样本外(未来)表现糟糕。
参数分类与优化方法
- 参数分类:
- 逻辑参数:决定策略核心逻辑,如均线周期、突破阈值。
- 风控参数:控制风险,如止损比例、仓位上限。
- 执行参数:影响交易执行,如滑点假设、成交价类型。
- 优化方法:
- 网格搜索:遍历所有参数组合,简单但计算量大。
- 遗传算法:模拟自然选择,适合高维参数空间。
- 贝叶斯优化:利用先验知识,高效搜索最优参数。
案例拆解:均线周期的过拟合陷阱
某策略使用“单均线”规则(价格上穿N日均线买入,下穿卖出)。在2015-2020年数据上,对N从5到60进行网格搜索,发现N=23时夏普比率最高(2.1)。但将N=23应用于2021-2023年数据,夏普比率骤降至0.8。而N=20在样本外表现更稳定(夏普1.2)。
分析判断:N=23在样本内的高夏普是过拟合的结果,它捕捉了特定时期的噪声。N=20更接近市场的中期趋势周期,具有更好的泛化能力。
修正方法:采用“参数平原”思想,选择参数空间中表现稳定且相邻参数表现相近的区域,而非单一峰值点。
2.4 绩效指标:全面评估策略表现
绩效指标是衡量策略优劣的标尺,但单一指标往往具有误导性。需要从收益、风险、风险调整后收益、交易特征等多个维度综合评估。
核心原理:收益与风险的匹配
高收益必然伴随高风险。绩效评估的核心是判断策略的风险调整后收益是否具有吸引力,以及风险特征是否符合投资者的风险偏好。
关键绩效指标对比表
| 指标类别 | 指标名称 | 计算公式/含义 | 适用场景 | 局限性 |
|---|---|---|---|---|
| 收益指标 | 年化收益率 | 几何平均年化收益 | 衡量长期增长能力 | 未考虑风险 |
| 收益指标 | 累计收益率 | 期末净值/期初净值 - 1 | 直观展示总回报 | 受回测区间影响大 |
| 风险指标 | 最大回撤 | 净值峰值到谷值的最大跌幅 | 衡量极端损失 | 未反映回撤持续时间 |
| 风险指标 | 年化波动率 | 收益率的标准差 | 衡量收益稳定性 | 对异常值敏感 |
| 风险调整后收益 | 夏普比率 | (策略收益 - 无风险利率) / 波动率 | 衡量单位风险超额收益 | 假设收益正态分布 |
| 风险调整后收益 | 卡玛比率 | 年化收益 / 最大回撤 | 衡量回撤控制能力 | 对回撤计算敏感 |
| 交易特征 | 胜率 | 盈利交易次数 / 总交易次数 | 衡量交易准确性 | 未考虑盈亏比 |
| 交易特征 | 盈亏比 | 平均盈利 / 平均亏损 | 衡量盈利质量 | 未考虑交易频率 |
实战场景:多指标综合评估
假设策略A年化收益20%,最大回撤25%;策略B年化收益15%,最大回撤8%。仅看收益,A更优;但结合回撤,B的卡玛比率(1.875)远高于A(0.8),表明B的风险控制能力更强。对于风险厌恶型投资者,B更合适。
2.5 常见误区与总结复盘
在回测基础阶段,常见的误区包括:忽视数据质量、过度依赖单一绩效指标、参数优化无节制、忽略交易成本、未进行样本外测试。这些误区是回测偏差的主要来源。
误区清单与修正策略
- 误区1:数据未复权 → 修正:使用前复权数据,并检查复权因子的连续性。
- 误区2:只看年化收益 → 修正:结合最大回撤、夏普比率、卡玛比率综合评估。
- 误区3:参数优化追求极致 → 修正:采用参数平原思想,选择稳健参数区间。
- 误区4:成本设置过低 → 修正:包含佣金、滑点、印花税、冲击成本。
- 误区5:未做样本外测试 → 修正:将数据分为训练集和测试集,或使用滚动窗口测试。