回测与实盘交易:为什么真实结果总是不一样
为什么实盘结果与回测不同:成交、滑点、手续费、延迟、数据质量、未来函数偏差和市场状态变化,以及上实盘前如何正确地做测试。
几乎每个开发过策略的交易者都经历过这一幕:回测漂亮极了,实盘跑了几周后却完全是另一回事。这不一定说明策略不好,而是说明回测只是现实的一个模型,而任何模型都有假设。本文梳理造成差距的主要原因,以及如何缩小它。
回测到底在衡量什么
回测是把策略规则放到历史价格数据上运行,计算如果当时按规则交易会发生什么。以 TradingView 为例,策略测试器(Strategy Tester)就是为 Pine Script 编写的策略做这件事的。得到的结果是一个估算,而不是过去的录像。
问题在于,回测只“知道”数据里有的东西。如果数据是五分钟 K 线,它就不知道 K 线内部发生了什么。如果你没设手续费,它就假定交易免费。如果你没设滑点,它就假定每笔订单都恰好在你想要的价格成交。这些假设每一个都会把结果往高处拉。
成交与滑点
对大多数交易者来说,这是差距最大的单一来源。
- 市价单以下一个可用价格成交,而不是决策那一刻图表上的价格。在剧烈波动的时刻,例如非农就业数据公布时,差距可能达到好几个 tick。
- 限价单保证价格,但不保证成交。很多回测假定价格一触及该价位,订单就成交了。现实中你可能排在队列末尾,根本没成交——而且往往恰恰是最好的那几笔交易。
- 止损单一旦触发就变成市价单,因此可能在离触发价很远的地方成交。
一个假设的例子:某策略一年在 MNQ 上交易 400 次。如果每笔交易入场和出场各平均产生一个 tick 的滑点,一年累计就是 800 个 tick,而这些在回测中从未出现。对于优势很薄的策略,这可能就是全部差别。详见滑点与执行成本。
佣金、交易所费用与数据费用
每笔期货交易都有成本:券商佣金、交易所和监管费用,有时还有平台费。交易频率相对较高的策略尤其敏感。一个简单的经验法则:回测中设置保守的成本,比你预计要付的稍高一些。
延迟
从条件满足到订单到达交易所,中间是要花时间的:K 线要收盘,警报要发出,webhook 要被接收和处理,订单要送到券商。通常只是几秒或更短,但在快速市场里,这点时间也很关键。一个围绕“恰好在 K 线收盘时入场”构建的策略,实际拿到的价格总会略有不同。
数据质量与各种偏差
- 未来函数偏差(look-ahead bias):代码用到了决策时点还无法获得的信息。经典例子:根据某根 K 线的收盘价做决定,却在同一根 K 线的开盘价入场。不谨慎地使用更高周期的数据也会导致这种问题。
- 重绘(repainting):事后修改历史数值的指标。在图上信号看起来完美,实时中它却出现了又消失。
- 幸存者偏差:主要与股票有关——只在活到今天的资产上测试。在期货中,与之对应的问题是连续合约图(如 NQ1!),它把不同合约拼接在一起,可能在换月日产生人为跳空。
- 数据缺失或错误:缺少 K 线、交易时段设置错误或时区不对。
市场状态的变化
即使在技术上完美无缺的回测,描述的也只是过去。市场会经历高波动与低波动、趋势与震荡的不同阶段。一个主要在某种特性的单一年份上测试的策略,到了下一个阶段可能表现迥异。测试周期越长、越多样,得到的图景越可靠——但永远没有保证。与此密切相关的是过度拟合问题,我们在交易策略的过度拟合中有专门介绍。
前向测试与模拟
弥合差距的最佳办法是增加一个中间阶段:在模拟账户上实时运行策略,并使用与实盘完全相同的执行链路。这叫前向测试(forward testing)或模拟交易(paper trading)。
这一阶段要检查的内容:
- 警报是否准时到达、格式是否正确?
- 信号价格与成交价格之间的平均差距是多少?
- 交易次数是否与回测预期相近?
- 是否有重复或遗漏的交易,或者“孤儿”仓位?
- 在开盘、收盘和数据公布前后,行为是否合理?
把每笔交易记入交易日志,并与同一时期的回测进行对比。你测到的这个差距很有价值:可以把它作为现实的滑点假设回填到回测中。
合理的预期
- 假定实盘结果会比回测弱,并据此做计划。
- 如果一个策略只有在不计手续费和滑点时才盈利,它就没有真正的优势。
- 短暂的模拟期无论好坏都证明不了什么,它主要检验的是链路是否通畅。
- 实盘初期的仓位应当很小,只有在执行表现符合预期后再逐步加大。
要点总结
- 回测是带有假设的模型,而这些假设几乎都会让结果偏高。
- 滑点、限价单成交和手续费是差距的最大来源。
- 未来函数偏差和重绘可能产生实时中根本无法实现的结果。
- 使用相同执行链路在模拟中做前向测试,是必不可少的一步。
- 测出实际差距,并把它反馈到你的测试中。
如果你在运行 TradingView 警报,WeCore 可以把它们连接到你自己的账户,并先在模拟模式下运行,让你在转入实盘账户之前检查成交、时机和风控规则。基础概念请参阅什么是算法交易。