3. 撮合引擎原理

撮合引擎是交易系统的核心,它决定了订单如何被匹配、成交价格如何产生,以及订单在队列中的位置如何影响成交概率。理解撮合引擎的底层原理,是后续建立队列位置与成交概率模型的前提。本节将从撮合规则、竞价模式、队列形成机制三个层面展开,帮助读者建立完整的撮合认知框架。

一、核心原理:价格优先与时间优先

绝大多数交易所采用“价格优先、时间优先”作为基础撮合原则。其含义是:

  • 价格优先:买单出价越高,优先级越高;卖单出价越低,优先级越高。最优价格的订单最先被匹配。
  • 时间优先:在价格相同的情况下,先进入订单簿的订单优先成交。这直接决定了队列中的排位顺序。

这两条规则共同构成了订单簿的排序逻辑。对于买单,排序键为(价格降序,时间升序);对于卖单,排序键为(价格升序,时间升序)。任何新订单进入时,都会按照该规则插入到对应位置,形成有序队列。

关键结论:在价格相同的前提下,队列位置越靠前,成交概率越高。队列位置由订单到达时间决定,因此“时间优先”是队列位置建模的核心变量。

二、连续竞价与集合竞价

撮合引擎通常支持两种竞价模式,二者在成交机制和队列形成上存在显著差异。

对比维度 连续竞价 集合竞价
成交时机 订单到达即尝试撮合 集中在一个时间点统一撮合
成交价格 逐笔成交,价格可能连续变化 单一成交价,通常为最大成交量价格
队列形成 实时插入,队列动态变化 订单累积,撮合前不成交
典型场景 盘中连续交易时段 开盘、收盘、波动调节时段

连续竞价中,订单簿实时更新,队列位置随新订单插入和成交消耗而动态变化。集合竞价中,订单在撮合前只累积不成交,队列位置在撮合瞬间才被一次性确定。两种模式下,队列位置对成交概率的影响机制不同:连续竞价更依赖实时排位,集合竞价更依赖价格与总量的匹配关系。

三、撮合规则与队列形成机制

撮合引擎的核心流程可以概括为以下步骤:

  1. 订单接收与校验:检查订单合法性,包括价格、数量、账户状态等。
  2. 订单排序:按照价格优先、时间优先规则插入订单簿。
  3. 撮合匹配:将新订单与对手方最优价格订单进行匹配。
  4. 成交生成:生成成交记录,更新订单簿和账户余额。
  5. 队列更新:移除已成交订单,剩余订单重新排位。

队列形成机制的关键在于订单簿的数据结构。常见实现包括价格档位聚合和逐笔订单队列。价格档位聚合将同一价格的订单合并为一个档位,档位内按时间排序;逐笔订单队列则保留每一笔订单的独立位置。前者适合高频撮合,后者适合精细化队列位置建模。

订单簿结构示例(价格档位聚合):
{
  "bids": [
    { "price": 100.5, "volume": 1200, "orders": [t1, t2, t3] },
    { "price": 100.4, "volume": 800,  "orders": [t4, t5] }
  ],
  "asks": [
    { "price": 100.6, "volume": 900,  "orders": [t6, t7] },
    { "price": 100.7, "volume": 1500, "orders": [t8] }
  ]
}

当新买单以价格 100.6 到达时,引擎会优先匹配卖一档位 100.6 的订单。若卖一档位总量不足,则继续匹配卖二档位。成交后,卖一档位中靠前的订单被消耗,队列位置整体前移。

撮合引擎队列形成与成交流程 新订单到达 校验与排序 插入订单簿 价格优先 + 时间优先排序 买单:价格降序,时间升序 与对手方最优价匹配 成交 → 队列前移 订单簿队列示意 买一 100.5 | t1 | t2 | t3 买二 100.4 | t4 | t5 卖一 100.6 | t6 | t7 卖二 100.7 | t8 t1 早于 t2 早于 t3,队列位置决定成交顺序

四、案例与场景:队列位置如何影响成交概率

假设某股票当前卖一档位价格为 100.6,共有 3 笔卖单:t6(数量 300)、t7(数量 400)、t8(数量 500)。此时新买单以 100.6 到达,数量为 500。撮合引擎会优先成交 t6 的 300 股,剩余 200 股继续成交 t7。t7 剩余 200 股留在队列中,t8 未成交。

如果新买单数量为 800,则 t6 全部成交,t7 成交 400 股,t8 成交 100 股。可以看到,队列位置越靠前,被成交的概率越高,且成交数量越完整。对于做市商或高频交易者而言,队列位置直接决定了成交率和持仓风险。

实战提示:在连续竞价中,订单簿的队列位置是动态变化的。当一笔大单成交后,后续订单会整体前移。因此,建模时需要同时考虑当前队列位置和前方订单的消耗速度。

五、常见误区与复盘

  • 误区一:价格相同就一定能成交。价格相同只是进入同一队列,成交顺序仍由时间决定。队列靠后的订单可能长时间无法成交。
  • 误区二:集合竞价和连续竞价的队列逻辑相同。集合竞价在撮合前不成交,队列位置在撮合瞬间才确定,不能简单套用连续竞价的实时队列模型。
  • 误区三:忽略订单簿数据结构的影响。价格档位聚合与逐笔订单队列对队列位置的刻画精度不同,建模时需明确引擎实现方式。
  • 误区四:只看静态队列,忽略动态消耗。前方订单的成交速度、撤单行为都会改变队列位置,静态快照无法反映真实成交概率。

复盘要点:在建立队列位置与成交概率模型时,必须明确撮合引擎的竞价模式、订单簿结构、排序规则和队列更新机制。任何一项假设偏差,都会导致概率估计失真。

综上所述,撮合引擎通过价格优先和时间优先规则,将订单组织成有序队列,并在连续竞价或集合竞价模式下完成匹配。队列位置是成交概率的核心变量,其形成和变化受订单到达、成交消耗、撤单等多种因素影响。理解这些机制,是后续建立量化模型的基础。