3. 回放仿真概述
在交易系统研发与算法迭代中,回放仿真(Replay Simulation)是一种介于历史回测与实盘交易之间的验证手段。它的核心思想是:把真实市场曾经产生的行情、订单、成交、延迟等数据,按原始时间顺序重新“播放”一遍,让待验证的执行算法在接近真实的撮合环境中运行,从而观察其下单、撤单、追价、成交等行为是否符合预期。与静态回测不同,回放仿真强调事件驱动与微观结构还原,更关注执行层面的细节,而非仅仅计算收益曲线。
一、回放仿真的定义与核心原理
回放仿真可以定义为:以历史市场数据为输入,以事件时钟为驱动,以撮合模型为内核,对执行算法进行逐笔或逐快照重演的过程。其核心原理包含三个要素:
- 数据还原:将行情快照、逐笔成交、委托队列、订单簿变化等按时间戳排序,重建历史市场状态。
- 事件驱动:算法不是按固定周期运行,而是由行情事件、订单事件、定时器事件触发,模拟真实异步环境。
- 撮合模拟:根据订单类型、价格、数量、市场深度和预设规则,判断订单是否成交、部分成交或排队等待。
与回测常用的“按K线收盘价成交”不同,回放仿真通常需要维护一个限价订单簿(LOB),并按照价格优先、时间优先原则处理订单。例如,一个典型的回放仿真配置如下:
replay:
data_source: tick_l2
symbol: 600519.SH
start_time: "2024-06-03 09:30:00"
end_time: "2024-06-03 11:30:00"
matching_mode: queue_position
latency_model:
order_entry: 2ms
market_data: 1ms
fee:
commission_rate: 0.00025
min_commission: 5
该配置说明:使用Level-2逐笔数据,按队列位置撮合,并模拟订单入口与行情延迟。这些参数直接影响仿真结果的可信度。
二、回放仿真与实盘、回测的区别
理解回放仿真的定位,需要把它放在“回测—回放—实盘”的连续谱系中。三者并非互相替代,而是验证深度递增的关系。下表从多个维度进行对比:
| 维度 | 历史回测 | 回放仿真 | 实盘交易 |
|---|---|---|---|
| 数据粒度 | K线、日频或分钟频 | 逐笔、快照、订单簿 | 实时逐笔与订单簿 |
| 成交假设 | 收盘价/开盘价成交 | 队列位置与撮合规则 | 真实撮合 |
| 延迟影响 | 通常忽略 | 可建模 | 真实存在 |
| 市场冲击 | 基本忽略 | 部分模拟 | 真实反馈 |
| 主要用途 | 策略筛选 | 执行算法验证 | 最终执行 |
从表中可见,回测适合快速过滤大量策略想法,但容易高估成交概率、低估滑点;实盘最真实,但成本高、风险大、不可重复;回放仿真则提供了可重复、可控制、接近真实的中间地带。它尤其适合验证执行算法在特定行情片段下的行为,例如开盘集合竞价、午盘流动性枯竭、尾盘拉升等场景。
提示:回放仿真不是“更精细的回测”,而是面向执行过程的实验平台。若只关心策略方向性收益,回测可能足够;若关心下单能否成交、成交均价是否偏离、撤单是否及时,则必须使用回放仿真。
三、典型应用场景与案例
回放仿真在交易链路中有着广泛的应用,以下列举四类典型场景:
- 执行算法调参:例如TWAP、VWAP、POV等算法,需要根据历史行情调整切片间隔、追价阈值、撤单频率。通过回放同一段行情,可以对比不同参数下的滑点与成交率。
- 新算法上线前验证:在仿真环境中检查算法是否会重复下单、超限、死循环,或对极端行情反应过度。
- 故障复现与复盘:当实盘出现异常成交或未成交时,用当日行情回放,定位是算法逻辑问题还是市场环境导致。
- 交易所规则适配:不同市场的涨跌停、最小变动价位、订单类型不同,回放仿真可验证算法在新规则下的兼容性。
以一个VWAP执行算法为例,假设某日开盘后前15分钟波动剧烈,算法在回放中表现出频繁撤单、追价,导致成交均价高于基准。通过回放日志可以观察到:
[09:30:01.120] order placed: BUY 100 @ 1720.00
[09:30:01.350] order cancelled: reason=price_moved
[09:30:01.360] order placed: BUY 100 @ 1720.50
[09:30:01.580] partial fill: 40 @ 1720.50
[09:30:01.590] order cancelled: reason=reprice
...
[09:30:15.000] vwap_benchmark=1719.80, algo_vwap=1720.35, slippage=0.55
这段日志说明,算法在快速行情中过于敏感,撤单追价反而增加了滑点。若在回测中按分钟收盘价成交,这种微观行为完全无法暴露。
四、常见误区与复盘要点
尽管回放仿真比回测更真实,但若使用不当,仍会产生误导性结论。以下是几个常见误区:
- 误区一:把回放仿真当成实盘。仿真无法完全还原其他参与者的反应、网络抖动、交易所内部排队变化,因此结果仍偏乐观。
- 误区二:忽略延迟建模。若行情到达与订单发出之间没有延迟,算法会“未卜先知”,产生虚假的高成交率。
- 误区三:数据粒度不足。用快照数据回放逐笔撮合,会丢失队列细节,导致成交判断失真。
- 误区四:只关注成交,不关注市场冲击。大单在仿真中可能轻松成交,但实盘中会推动价格,需要引入冲击模型或限制参与率。
注意:回放仿真的可信度取决于数据质量、撮合模型和延迟模型。任何一项过于简化,都会使仿真结果偏向乐观。建议在仿真报告中同时记录数据源、撮合规则、延迟参数和费用假设,便于复盘与对比。
复盘时,应重点检查以下清单:
- 仿真使用的数据是否包含逐笔委托与逐笔成交?
- 撮合是否考虑了队列位置和部分成交?
- 延迟模型是否覆盖行情、订单、撤单三条链路?
- 费用与滑点是否按真实规则计算?
- 算法在极端行情片段(涨跌停、停牌、流动性枯竭)下的行为是否合理?
只有把回放仿真视为一个受控实验,明确其假设边界,才能让它在执行算法研发中发挥真正价值。它既不是回测的简单升级,也不是实盘的替代品,而是连接两者、降低实盘试错成本的关键环节。