
回测验证是量化交易的必经之路
做量化交易,回测验证是绕不开的一步。它就像打仗前的沙盘推演,用历史数据模拟策略的表现,看看这个策略在过去能不能赚钱、风险有多大。没有经过回测的策略,就像没经过训练的士兵直接上战场,结果多半是送人头。
很多人以为回测就是写个程序跑一下历史数据,看看收益曲线。事情没这么简单。一个严谨的回测验证过程,需要经过多个环节,每个环节都有坑。下面一步步拆开讲。
第一步:拿到干净的历史数据
数据是回测的粮食。粮食发霉了,做出来的饭肯定不能吃。历史数据包括股票、期货的行情数据,比如开盘价、最高价、最低价、收盘价、成交量、持仓量。还要有基本面数据、财务数据、宏观数据,看策略需要什么。

数据常见的问题有缺失值、错误值、复权处理不当。股票有除权除息,期货有主力合约换月。如果直接用不复权的价格,遇到分红送股,价格会跳空,策略会误判。期货更麻烦,主力合约换月时价格不连续,必须做拼接处理。
数据频率也要匹配策略。做日线级别的趋势策略,用分钟数据回测就是自欺欺人。做高频策略,用日线数据根本跑不出效果。数据的时间范围要足够长,至少覆盖一个完整的牛熊周期。只拿牛市数据回测,策略看起来很美,一到熊市就原形毕露。
第二步:把策略逻辑翻译成代码
策略逻辑必须毫无歧义地写成代码。人脑想的和电脑执行的往往不一样。你以为的“突破20日高点买入”,代码里可能写成了“收盘价大于20日最高价”。盘中突破和收盘突破差别巨大。
代码要避免未来函数。未来函数就是用了当时还不可能知道的信息。比如用当天的收盘价决定当天的开盘操作,这就是作弊。回测中用了未来函数,收益曲线会异常漂亮,实盘一跑就亏钱。常见的未来函数包括用当日最高价判断是否触发止损,用当日收盘价计算指标却在盘中交易。
信号执行要模拟真实交易。回测中不能假设总能以理想价格成交。要加入滑点、手续费、冲击成本。期货还要考虑保证金和杠杆。股票要考虑涨停板无法买入、跌停板无法卖出。这些细节不做,回测结果就是空中楼阁。
第三步:运行回测引擎
回测引擎负责按时间顺序推进,每个时间点计算信号、执行交易、更新账户。引擎要处理仓位管理、资金分配、止损止盈。回测引擎有事件驱动和向量化两种。事件驱动更接近实盘,速度慢但准确。向量化速度快,但容易忽略交易细节。
回测过程中要记录每一笔交易。开仓时间、价格、数量、平仓时间、盈亏。这些记录是后续评估的基础。没有交易明细,光看一条资金曲线,根本不知道钱是怎么赚的、怎么亏的。
第四步:评估绩效指标
光看总收益不够。一个策略一年翻倍,但中途回撤50%,很少有人能扛住。要看的指标包括年化收益率、最大回撤、夏普比率、胜率、盈亏比、交易次数。
年化收益率反映赚钱能力。最大回撤反映最坏情况。夏普比率衡量每单位风险的收益。胜率高不一定赚钱,盈亏比低照样亏。交易次数太少,统计上不可靠。交易次数太多,手续费和滑点会吃掉利润。
期货策略还要看保证金占用和杠杆倍数。杠杆放太大,一个反向跳空就爆仓。股票策略要看换手率和容量。资金量大了,冲击成本会急剧上升。
第五步:稳健性检验
一个策略在历史数据上表现好,可能是运气,也可能是过拟合。过拟合就是策略参数过度适应了历史数据的噪声。样本内表现完美,样本外一塌糊涂。
样本外测试是把数据分成两段。前一段用来优化参数,后一段用来验证。如果样本外表现和样本内差距巨大,策略大概率是过拟合了。
参数敏感性测试是看策略在不同参数下的表现。如果参数稍微一变,收益就大幅波动,说明策略不稳定。好的策略在参数附近应该表现平稳。
蒙特卡洛模拟是随机打乱交易顺序,看收益分布。如果最差情况也能接受,策略才可靠。
第六步:模拟盘和实盘验证
回测通过不等于实盘能赚钱。回测是理想环境,实盘有网络延迟、行情抖动、流动性变化。模拟盘用实时数据跑,但不投入真钱。模拟盘表现和回测接近,才能考虑小资金实盘。
实盘初期要严格控制仓位。实盘和回测的偏差来源很多,滑点比预期大、成交比预期慢、数据源不一致。只有实盘稳定盈利一段时间,才能逐步加大资金。
回测验证的常见误区
过度优化参数。为了让曲线好看,反复调整参数,直到找到历史最优。这种策略未来一定失效。
忽略交易成本。回测中不扣手续费和滑点,实盘一跑就亏。高频策略尤其明显。
用未来数据。回测中用了当时不可能知道的信息,收益虚高。
数据窥探偏差。反复用同一段数据测试不同策略,直到找到赚钱的。这本质上是数据挖掘,不是策略研发。
杠杆使用不当。回测中满仓加杠杆,遇到极端行情直接爆仓。
回测验证是量化交易的核心环节。它不能保证策略未来赚钱,但能过滤掉大量不靠谱的想法。一个严谨的回测需要干净的数据、无歧义的代码、真实的交易模拟、全面的绩效评估、稳健性检验。跳过任何一步,都可能付出真金白银的代价。
