4. 价格形成机制:撮合引擎的工作原理

做量化交易这些年,我见过太多人把价格当成一个「黑箱」——屏幕上跳动的数字,好像天然就该在那里。但说白了,价格是怎么来的?是撮合引擎一单一单「撞」出来的。

今天我们就拆开这个黑箱,看看撮合引擎到底怎么工作。我个人习惯把撮合引擎比作一个「红娘」——它不生产订单,只是把买卖双方拉到一起。但这位红娘的规则,决定了整个市场的价格走向。

4.1 撮合引擎的核心逻辑

先看一个最简单的场景:

  • 买方A:出价100元,买10股
  • 卖方X:要价99元,卖10股

你想想看,A愿意出100,X只想要99,中间有1块钱的「便宜」可占。撮合引擎会怎么做?

答案是:立即成交。成交价是多少?不是100,也不是99,而是99元(以先进入系统的价格为准,具体看规则)。

嗯,这里要注意:成交价不一定等于买一或卖一的价格。它取决于订单簿的「流动性」和「到达顺序」。

核心公式:

成交条件:买价 ≥ 卖价

成交价格:通常取「先进入订单簿」的那一方的价格

4.2 价格优先与时间优先原则

这是撮合引擎的「宪法」。我当年刚入行时,觉得这规则太简单了,直到有一次在实盘中发现订单被「插队」了……其实不是插队,是我没理解透。

4.2.1 价格优先

说白了就是:出价高的买家优先成交,要价低的卖家优先成交

举个例子:

买方队列 价格 数量
买方A 101元 100股
买方B 100元 200股
买方C 99元 150股

这时候来了一笔卖单,要价100元,数量150股。谁会先成交?

答案是买方A,因为他出价101元,价格最高。哪怕他来得最晚,只要价格有优势,他就排在前面。

实战经验:我在做高频策略时,经常利用「价格优先」来抢单。比如盘口买一挂100元,我挂100.01元,虽然只多1分钱,但能排到所有100元订单的前面。这在流动性好的品种上特别管用。

4.2.2 时间优先

当价格相同时,就看谁先到。先到先得。

还是上面的例子,如果买方A和买方B都出价100元:

买方队列 价格 数量 到达时间
买方B 100元 200股 09:30:01.000
买方A 100元 100股 09:30:01.050

这时候来了一笔卖单,要价100元,数量150股。买方B先到,所以先成交150股(买方B的200股被吃掉150股,还剩50股)。买方A?等下一轮吧。

我曾经踩过的坑:有一次做套利策略,我同时挂了买单和卖单,以为价格相同就能成交。结果因为网络延迟,我的买单比对手晚了0.1毫秒,硬生生被「插队」了。后来我专门优化了网络拓扑,把服务器搬到交易所机房隔壁。嗯,做高频,时间就是金钱。

4.3 盘口价差与市场深度

这两个指标,是量化交易者每天都要盯的。我习惯把它们称为「市场的体温计」。

4.3.1 盘口价差(Spread)

定义很简单:卖一价 - 买一价

比如:

  • 买一:100.00元,挂单1000股
  • 卖一:100.02元,挂单800股

价差 = 100.02 - 100.00 = 0.02元。

价差越小,说明市场流动性越好,交易成本越低。我一般这样判断:

  • 价差 < 0.01%:流动性极好,适合高频策略
  • 价差 0.01% - 0.1%:正常水平
  • 价差 > 0.1%:流动性差,小心滑点

注意:价差不是固定的。盘中会波动,尤其是大单出现时。我见过一个品种,平时价差0.01元,突然来了一笔大卖单,价差瞬间扩大到0.50元。如果你用的是市价单,这一下就亏大了。

4.3.2 市场深度(Depth)

市场深度,说白了就是「每个价位上挂了多少单」。它告诉你:如果你想买/卖一大笔,价格会滑多少。

举个例子:

档位 买价 买量 卖价 卖量
1 100.00 1000 100.02 800
2 99.98 2000 100.04 1500
3 99.96 3000 100.06 2500
4 99.94 5000 100.08 4000
5 99.92 8000 100.10 6000

如果你想买入10000股,用市价单:

  • 先吃掉卖一的800股,价格100.02
  • 再吃掉卖二的1500股,价格100.04
  • 再吃掉卖三的2500股,价格100.06
  • 再吃掉卖四的4000股,价格100.08
  • 最后吃掉卖五的1200股(还剩1200),价格100.10

平均成交价 = (800×100.02 + 1500×100.04 + 2500×100.06 + 4000×100.08 + 1200×100.10) / 10000 ≈ 100.068元。

比当前的卖一价100.02高了0.048元。这就是滑点

我的习惯:在做大单交易时,我会先看市场深度。如果深度不够,我会拆成小单,或者用冰山订单(只显示一部分数量)。有一次我要买入50万股,盘口深度只有10万股,我硬是拆了20笔,花了15分钟才吃完。虽然慢,但滑点控制得很好。

4.4 撮合流程的完整逻辑

下面我用一张流程图,把整个撮合过程串起来。这是我自己画的一个简化版本,但核心逻辑是一样的。

撮合引擎核心流程图 新订单到达 可成交? 价格优先匹配 最高买/最低卖 时间优先排序 同价先到先得 执行成交 完全成交? 进入订单簿 成交结束 更新盘口/深度

这张图的核心逻辑是:

  1. 新订单到达:先判断能不能和现有订单成交
  2. 价格优先:找到最优价格的对手单
  3. 时间优先:同价情况下,先到先得
  4. 执行成交:更新双方持仓和订单簿
  5. 未成交部分:进入订单簿,等待后续订单

关键点:撮合引擎不是「一次匹配完」,而是「逐笔匹配」。每来一个新订单,都会触发一次完整的匹配流程。这就是为什么高频交易中,订单到达的顺序和速度如此重要。

4.5 实战中的注意事项

最后,分享几个我在实战中总结的经验:

  • 别只看买一卖一:盘口深度才是真正的「流动性池子」。买一卖一可能只有几百股,但下面几档可能有几万股。
  • 小心「假深度」:有些做市商会挂大单但随时撤单。我见过一个品种,卖二挂了5万股,但一有买单接近就撤了。这种「幽灵订单」会误导你的判断。
  • 价差不是成本的全部:滑点才是。尤其是大单交易,滑点可能比价差大10倍。
  • 时间优先在极端行情下会失效:比如熔断、涨跌停时,交易所可能会启用「集合竞价」模式,这时候所有订单按同一价格成交,时间优先原则暂时失效。

我曾经犯过的错:有一次做统计套利,我根据历史数据算出了一个「合理价差」,然后挂了限价单等成交。结果市场突然波动,价差瞬间扩大,我的订单被「吃掉」了——不是成交,而是被更优价格的订单「插队」了。后来我才意识到,在波动剧烈的市场中,限价单的「时间优先」优势会大打折扣。现在我做这类策略,都会加上「价格偏移保护」,避免被极端行情误伤。

好了,关于价格形成机制,今天就聊到这里。记住一句话:价格不是算出来的,是「撞」出来的。理解撮合引擎的每一笔匹配,你才能真正看懂盘口的每一次跳动。


公众号:蓝海资料掘金营,微信deep3321