3. 回测引擎的撮合逻辑

回测结果差异的根源,往往不在策略信号本身,而在引擎如何把“信号”变成“成交”。同一套均线策略,在分钟回测里可能年化 18%,换到逐笔回测却只剩 11%,差距主要来自撮合逻辑对价格路径、成交时点和可成交量的不同假设。本节聚焦引擎内部:订单如何进入撮合、以什么价格匹配、在什么条件下判定成交,以及两种粒度在这些环节上的机制差异。

一、撮合的基本要素:订单、盘口与撮合时钟

任何撮合逻辑都围绕三个要素展开:订单(方向、类型、价格、数量)、盘口(买一卖一及更深档位的价格与挂单量)、撮合时钟(引擎推进时间的最小步长)。分钟回测的撮合时钟是“分钟 bar”,逐笔回测的撮合时钟是“逐笔快照或逐笔成交事件”。时钟粒度决定了引擎能看到多少价格路径信息,也决定了成交判定的精细程度。

以限价单为例,其成交条件可抽象为:买单要求“卖一价 ≤ 委托价”,卖单要求“买一价 ≥ 委托价”。这个条件在两种粒度下形式相同,但代入的盘口数据不同——分钟回测代入的是该分钟 bar 的收盘价或最高最低价推导出的近似盘口,逐笔回测代入的是事件发生时刻的真实盘口快照。差异就从这里开始放大。

分钟回测撮合 时钟步长 = 1 根分钟 bar bar t-1 收 10.00 bar t 高10.12 低9.95 bar t+1 收 10.08 信号在 bar t 收盘产生 → 引擎在 bar t+1 开盘撮合 成交价 = bar t+1 开盘价(或收盘价,取决于配置) 成交判定(近似盘口) • 限价买单:bar 最低价 ≤ 委托价 → 视为可成交 • 成交价取委托价与开盘价的较优者 • 无法判断 bar 内价格先后顺序 典型偏差 • 同一 bar 内先跌后涨,仍按“可成交”处理 • 忽略排队与部分成交,成交量假设偏乐观 逐笔回测撮合 时钟步长 = 逐笔快照 / 逐笔成交事件 快照 09:31:00 卖一 10.02×300 快照 09:31:03 卖一 10.01×100 快照 09:31:06 卖一 10.03×500 订单到达时刻 → 读取当时真实盘口 → 逐档匹配 按价格优先、时间优先消耗对手盘挂单量 成交判定(真实盘口) • 限价买单:卖一价 ≤ 委托价 → 按卖一价成交 • 数量超过卖一挂单量 → 继续吃卖二、卖三 • 剩余未成交部分挂入委托队列等待 可观测细节 • 部分成交、排队位置、撤单与重挂均可还原 • 大单冲击成本与滑点由盘口深度自然产生 粒度 细化

二、分钟回测:以 bar 为撮合单元的近似机制

分钟回测的引擎通常采用“信号—下一 bar 成交”的时序约定:策略在第 t 根 bar 收盘后计算指标并产生信号,引擎在第 t+1 根 bar 上执行撮合。市价单一般以第 t+1 根 bar 的开盘价成交;限价单则用该 bar 的最高价、最低价与委托价比较来判定是否触价。例如委托买入价 10.00,若第 t+1 根 bar 最低价为 9.95,引擎判定“触价成立”,成交价取 min(10.00, 开盘价)。

这种机制的核心局限在于丢失了 bar 内的价格路径。一根分钟 bar 只保留开、高、低、收四个价格和总成交量,引擎无法知道最低价出现在开盘后第几秒、当时卖一挂单还剩多少。于是产生两类系统性偏差:其一,若 bar 内价格先跌破委托价又迅速拉回,引擎仍判定成交,而真实市场中订单可能只排在队列末尾未能成交;其二,引擎通常假设委托量可以全部成交,忽略盘口深度约束,导致大资金策略的容量被高估。此外,分钟回测对滑点的处理多为固定值或按成交量比例估算,而非由盘口深度自然推导。

分钟回测的“触价即成交”是一种乐观假设。对于依赖精确入场价的高频或日内策略,这种近似可能使回测收益虚高,尤其在流动性较差的标的或开盘、收盘等波动剧烈时段。

三、逐笔回测:以事件为驱动的真实盘口匹配

逐笔回测的引擎以逐笔快照(Level-1 或 Level-2)或逐笔成交明细为驱动事件。每到一个事件,引擎更新盘口状态,然后对活动订单执行撮合:买单从卖一开始逐档比较价格,若卖一价不高于委托价,则按卖一价成交 min(委托剩余量, 卖一挂单量),不足部分继续吃卖二、卖三,直至价格不满足或数量耗尽;未成交余量保留在订单簿中,等待后续事件。卖单方向对称处理。

这一机制天然支持部分成交与排队模拟。例如在 09:31:03 的快照中卖一为 10.01×100,若买单委托 500 股、限价 10.02,则先成交 100 股于 10.01,剩余 400 股继续匹配卖二;若卖二价为 10.03 已高于限价,则剩余部分挂单等待。引擎还能根据订单到达时刻与快照中已有挂单量的关系估算排队位置,从而判断后续成交明细中哪些成交量应归属本订单。滑点不再是外生参数,而是盘口深度与订单规模相互作用的内生结果。

四、机制差异的量化影响与选用建议

两种机制的差异可归纳为三个维度:成交时点(bar 级延迟 vs 事件级即时)、成交价格(开盘价/触价近似 vs 逐档真实盘口价)、成交数量(全量假设 vs 部分成交与排队约束)。对低频、持仓数日以上的策略,分钟级近似带来的误差在统计上可能被平滑;但对日内、打板、套利等对成交价格和数量敏感的策略,逐笔撮合是必要选择。

对比维度分钟回测逐笔回测
撮合时钟分钟 bar逐笔快照/成交事件
盘口信息OHLC + 总量,近似推导真实买卖档位与挂单量
成交判定触价即成交逐档匹配,支持部分成交
滑点来源外生参数估算盘口深度内生
计算成本低高,依赖逐笔数据质量

实操中,建议先用分钟回测做策略逻辑的快速验证与参数粗筛,再对候选策略用逐笔回测复核成交敏感环节。若两者收益差距显著,应优先检查限价单触价判定、大单成交量假设与滑点模型这三处,它们通常是差异的主要来源。理解撮合机制,才能判断回测数字里哪些是策略能力,哪些是引擎假设的馈赠。