撮合引擎原理:价格优先、时间优先原则;连续竞价与集合竞价机制

做量化交易这些年,我见过不少新手一上来就研究各种策略,却忽略了最底层的东西——订单簿是怎么撮合的。说白了,你连交易所怎么匹配买卖单都不清楚,策略写得再花哨也是空中楼阁。今天我们就来聊聊撮合引擎的核心逻辑。

一、价格优先与时间优先:两条铁律

撮合引擎的规则其实很简单,就两条:价格优先时间优先。嗯,这里要注意,这两条是同时生效的,不是二选一。

  • 价格优先:买单出价高的优先成交,卖单出价低的优先成交。说白了,谁更"急"谁先走。
  • 时间优先:价格相同时,先挂单的先成交。这个好理解,先来后到嘛。

我个人习惯把这两条规则记成一句话:"高价买单优先,低价卖单优先;同价则先到先得"。你想想看,这其实跟菜市场买菜一个道理——你出价高,菜贩子肯定先卖给你;如果大家都出一样的价,那谁先开口谁先拿。

核心要点:价格优先的优先级高于时间优先。只有在价格相同的情况下,时间优先才会生效。

我在项目中遇到过一个问题:某个策略在回测时表现很好,实盘却总是成交不了。后来一查,原来是订单簿里同价位已经排了上千笔单子,我的单子排在了最后面。这就是典型的"只看价格不看时间"的坑。

二、连续竞价:日常交易的主战场

连续竞价,就是交易时间内一直在进行的撮合方式。每进来一笔订单,系统就立刻尝试匹配。匹配上了就成交,匹配不上就挂在那里等。

举个例子:

当前订单簿状态:
卖一:10.00元  100股
卖二:10.01元  200股
买一:9.99元   150股
买二:9.98元   300股

现在来了一笔买单:10.00元  200股
撮合过程:
1. 先匹配卖一10.00元,成交100股
2. 剩余100股继续匹配卖二10.01元?不行,因为买单价格只有10.00元
3. 所以最终成交100股,剩余100股挂在买一位置

为什么会这样?因为连续竞价的核心逻辑就是"见价成交"——只要买单价格 ≥ 卖单价格,就能成交。成交价取两者之间的某个值,通常是取先挂单的价格。

实战技巧:如果你想让订单快速成交,可以挂一个"吃单"价格。比如当前卖一是10.00元,你挂10.01元买入,系统会直接吃掉卖一的单子。这就是所谓的"市价单"逻辑。

我曾经踩过一个坑:在某个流动性很差的品种上挂了一个限价单,结果等了半小时都没成交。后来改成市价单,瞬间成交了,但成交价滑了三个档位。嗯,这就是流动性不足带来的代价。

三、集合竞价:开盘与收盘的"集中对决"

集合竞价跟连续竞价完全不同。它不是来一笔撮合一笔,而是先收集订单,再统一撮合。你想想看,这就像拍卖会——大家先出价,然后拍卖师找一个能让最多人成交的价格。

集合竞价的核心步骤:

  1. 收集阶段:系统接收订单,但不撮合,只记录
  2. 计算阶段:找出一个"平衡价格",使得成交量最大
  3. 统一成交:所有符合条件的订单按这个价格成交

这个"平衡价格"怎么找?我画了一张图来说明:

集合竞价价格发现过程 0 100 200 300 9.98 9.99 10.00 10.01 买:100 买:200 买:300 买:100 卖:50 卖:150 卖:250 卖:50 平衡价:10.00 买单 卖单

从图上可以看到,在10.00元这个价位上,买单有300股,卖单有250股,成交量是250股。其他价位成交量都更小。所以集合竞价就选10.00元作为开盘价。

注意:集合竞价期间,所有订单都是"暗牌"——你看不到别人的报价。只有到统一成交那一刻,所有信息才会公开。这也是为什么有些策略会在集合竞价阶段"试单"。

四、两种机制的对比

特性 连续竞价 集合竞价
撮合时机 订单到达即撮合 固定时间点统一撮合
价格确定 买卖双方报价匹配 最大成交量原则
信息透明度 实时可见订单簿 撮合前不可见
适用场景 日常交易时段 开盘、收盘、临时停牌
流动性 高(持续交易) 低(集中爆发)

我个人觉得,理解这两种机制的关键在于:连续竞价是"即时满足",集合竞价是"集中博弈"。做高频交易的人更喜欢连续竞价,因为可以快速进出;而做事件驱动策略的人,往往会在集合竞价阶段布局。

五、实战中的避坑指南

最后分享几个我踩过的坑:

  • 不要忽视集合竞价的价格发现功能:我曾经以为集合竞价只是走个形式,结果有一次开盘价直接比前收盘低了3%,我的止损单全部被触发。后来我才明白,集合竞价的价格往往包含了隔夜信息。
  • 注意订单簿的"厚度":在连续竞价中,如果你的订单量很大,一定要考虑市场冲击。我见过有人挂了一笔大单,结果把价格推高了两个档位,自己反而买贵了。
  • 时间优先的陷阱:在流动性好的品种上,同价位的订单可能排了几百笔。你的订单如果排在后面,可能等很久都成交不了。这时候可以考虑稍微提高一点价格,或者用市价单。

小技巧:如果你在做回测,一定要模拟真实的撮合逻辑。很多回测框架只做"价格优先",忽略了"时间优先",这会导致回测结果过于乐观。我建议用事件驱动的回测引擎,逐笔模拟撮合过程。

好了,关于撮合引擎的原理就聊到这里。记住这两条铁律和两种机制,你就能看懂订单簿里发生的每一笔交易了。


蓝海数据掘金营,专注资料整理