回测必然依赖对真实市场的简化。

例如,假设订单能够立即成交、能够完全成交、按照某个价格成交,或者使用固定滑点估算交易成本。对于长期历史回测,还可能存在幸存者偏差、历史数据缺失等问题。

因此,回测并不能完整复现真实交易。

我的理解是,回测首先是一种低成本的研究和筛选工具。如果策略在相对理想的条件下都无法获得良好表现,通常就没有必要继续投入实盘验证的成本。

但这个判断存在一些重要的限制。

一、回测中的四类偏差

回测的局限可以分为四类:

类型典型问题
数据偏差幸存者偏差、未来数据泄漏、历史成分股错误
执行偏差假设完全成交、理想成交价、没有交易延迟
成本偏差忽略手续费、滑点、资金费率、市场冲击
统计偏差参数过拟合、多重测试、市场环境变化

其中,统计偏差可能比执行偏差更危险。

执行偏差有时可以通过更保守的假设来缓解,但统计偏差可能让我们从一开始就选错策略。

假设我们尝试了 1,000 种交易策略,最终找到一个历史收益非常漂亮的策略。

即使这个策略的成交价、手续费、撮合逻辑全部模拟正确,也不能说明它具有真实的 Alpha。

因为这个结果经过了 1,000 次尝试后的筛选,评估时需要考虑多重测试带来的选择偏差。

这里实际上存在两个不同的问题:

1. 模拟是否真实?

我们有没有正确模拟过去可能发生的交易?

2. 历史是否具有预测性?

过去有效的规律,未来是否仍然有效?

前者主要涉及数据和交易系统建模,后者则涉及统计推断和市场规律的稳定性。

即使解决了前者,也不能保证后者。

二、回测表现差,能否直接淘汰策略?

如果一个策略在合理、偏乐观的执行假设下仍然不具备经济价值,那么通常没有必要为它投入更高成本的实盘验证。

例如,一个高频策略:

  • 不扣手续费时,平均每笔交易收益为 −1 bp。

  • 扣除手续费后,平均收益为 −4 bp。

  • 进一步考虑滑点后,收益更差。

如果没有理由认为改变执行方式能够改善结果,这个策略大概率应该被淘汰。

但考虑另一种情况:

  • 预测信号能够有效区分未来表现较好的资产与较差的资产。

  • 每分钟重新选择持仓并交易,扣除手续费后无法盈利。

  • 降低换手频率、引入调仓缓冲后,可能获得正收益。

这时,负面结果直接针对的是当前交易规则,预测信号的有效性仍需单独检验。持仓与调仓规则的比较可参考 Common Traders in Backtest。

需要区分三个对象:

Signal → Trading Policy → Execution

  • Signal: 预测信号是否包含有效信息?

  • Trading Policy: 如何将信号转化为持仓、调仓和风险控制规则?

  • Execution: 如何在真实市场中完成交易,以及需要付出多少成本?

一个回测失败,首先要查明究竟是哪一层失败。

同样,所谓「理想回测」也不一定是收益的严格上界。例如,对被动限价策略,真实成交概率可能与后续价格走势相关:不利价格变动前的订单可能更容易成交,有利变动前的订单可能留在队列中。强制完全成交会改变成交样本与后续库存路径,其收益方向需要结合策略判断。

只有当放宽约束能够保证比较口径一致、且收益不会因此下降时,才能将其作为严格的筛选上界;通常更适合把它称为乐观基准。

因此,回测可以用于淘汰策略,但必须明确它所否定的究竟是什么。

三、回测不仅是筛选工具,也是研究工具

回测至少有三个重要用途。

第一,否定假设。

如果一个策略连不计手续费、滑点的基本经济价值都没有,通常不值得继续投入执行工程资源。

第二,研究收益来源。

策略收益究竟来自多空选币、市场方向、动量、资金费率,还是某个特殊年份?

通过控制变量实验、消融实验和不同市场阶段的对照,可以判断收益来自哪些因素,以及策略依赖哪些条件。

这些实验有时候比最终的 Sharpe Ratio 更有研究价值。

第三,评估策略的可行区间。

例如,一个策略在不同单边交易成本下的表现:

单边成本策略总收益(假设)
0 bp+14%
1 bp+10%
2 bp+6%
3 bp+2%
4 bp−2%
5 bp−6%

这张表假设交易路径固定,成本按成交名义金额线性扣除,并忽略成本对后续仓位与复利的影响。按表内数值线性插值,单边盈亏平衡成本约为 3.5 bp。若预计真实单边成本为 4 bp,策略在这组假设下已经无法覆盖成本,需要重新检查信号收益、换手与执行方式。

容量测试同样具有价值,但需要区分历史流动性估算与实际容量验证。

历史交易量、盘口深度可以帮助估算策略能够承载的资金规模,但大额交易可能改变市场价格,成交成本与资金规模也不一定呈线性关系。

因此,历史回测给出的容量通常是特定流动性和市场冲击模型下的估计,仍需通过真实交易验证。

四、模拟盘和小资金实盘,验证的是不同问题

回测之后,还需要实时模拟盘和小资金实盘。

这些阶段分别检验历史规律、实时系统与实际成交,提供的证据各有侧重。

阶段主要验证什么无法可靠证明什么
历史回测历史信号、策略逻辑、成本敏感度未来收益、真实成交质量
样本外回测未参与开发的数据上能否保持效果未来市场规律不变
实时模拟盘数据延迟、系统稳定性、实时决策与订单管理真实成交、市场冲击
小资金实盘实际成交率、滑点、手续费、异常订单处理大资金容量、长期收益稳定性
逐步放大资金市场冲击、流动性限制、容量变化未来不会发生市场结构变化

这里有两个值得注意的问题。

1. 模拟盘不一定比回测更接近真实成交

如果模拟盘也采用「价格触及限价单就算成交」的规则,那么它仍然不知道订单前面排了多少交易量,也不知道真实成交的可能性。

实时运行有助于暴露数据到达延迟与决策时点问题,撮合仍需要独立建模。HftBacktest 的成交模型文档具体讨论了队列位置、部分成交和历史行情回放无法反映市场冲击的限制。

所以模拟盘最大的价值,可能首先是验证整个交易系统能否在真实时间中正确运行。

包括实时数据处理、信号生成、订单状态管理、风险控制,以及异常情况的处理。

2. 小资金实盘盈利,不代表策略已经被证明

假设一个策略实盘运行两周,获得了 5% 的收益。

这当然是有价值的结果,但我们仍然不知道收益来自真实 Alpha、市场行情、运气,还是某种特殊的市场状态。

更重要的是,100 美元订单的成交表现不能直接推广到 100 万美元订单。

小资金实盘可以验证小资金条件下的可执行性,但不能自动证明大资金容量。

真实容量需要通过交易数据、流动性研究和逐步放大资金来评估。

五、多阶段验证,也可能产生新的过拟合

假设我们做了 100 次回测,从中选择最好的模型,再做模拟盘。

模拟盘表现不好,就继续修改模型。

最终挑选表现最好的版本投入实盘。

看起来经历了多层验证,但如果每次失败都推动针对已有数据的优化,那么这些数据实际上已经逐渐从验证集变成了训练集。

同样的问题也存在于样本外回测。

一个模型在样本外表现不好,我们修改特征、参数、交易规则,再次观察同一段样本外表现。

重复足够多次后,这段数据也就不再是严格意义上的独立验证集。

因此,验证阶段的数量并不等于独立证据的数量。The Probability of Backtest Overfitting研究了从多个候选策略中选择历史最优者所带来的过拟合风险。

回测次数、策略选择过程、参数搜索范围,以及哪些数据参与了模型开发,都应该成为评估结果的一部分。

实践中可以预先记录评价指标、成本假设与淘汰条件,按时间顺序划分开发与验证区间,并保留最后一段未用于调参的数据。对于标签覆盖未来一段时间的预测任务,还需要处理划分边界上的标签重叠;根据验证结果继续修改后,应将该区间记为已参与开发。

六、回测失败与回测成功,并不对称

回测最有价值的用途之一,是在投入真实资金之前排除不合理的假设。

如果某种交易规则在宽松且合理的成本假设下都无法盈利,那么我们已经获得了一个有价值的负面结果。

但如果回测表现很好,情况则不同。

我们还需要确认:

  • 是否存在未来数据泄漏或幸存者偏差?

  • 是否经过大量参数搜索和策略筛选?

  • 收益是否依赖少数特殊市场阶段?

  • 交易成本和成交假设是否合理?

  • 信号是否能在独立数据和实时市场中保持效果?

  • 策略是否能够在真实资金规模下执行?

即使这些问题都得到了比较好的回答,也不能证明未来一定盈利。

这体现了回测证据的不对称性:

糟糕的回测可能足以否定一个具体策略,但漂亮的回测通常不足以证明一个策略值得投入大量资金。

回测、样本外验证、实时模拟盘、小资金实盘和容量测试,各自解决不同层面的不确定性。

一个阶段的失败,可能意味着某个假设需要被否定,也可能意味着需要重新设计交易策略或执行方式。

一个阶段的成功,则只意味着在当前条件下,策略通过了这一层验证。

回测的价值在于以较低成本进行可重复的实验,帮助我们识别无效假设、理解收益来源、评估交易约束,并决定哪些策略值得进一步验证。

而真实交易,是在承担实际风险的条件下继续检验这些假设。

每个阶段都可以降低不确定性,但没有任何一个阶段能够消除不确定性。