4. 时间价格优先原则:撮合引擎的工作原理,排队机制,滑点的本质

大家好,我是你们的量化交易讲师。今天咱们聊一个核心中的核心——撮合引擎。

很多人做交易好几年,其实并不清楚自己的订单到底是怎么成交的。你点一下鼠标,订单就飞出去了,然后要么成交,要么挂在那。但中间发生了什么?为什么有时候明明看到价格到了,我的单子却没成交?为什么滑点会那么大?

嗯,这些问题的答案,全藏在撮合引擎里。

4.1 撮合引擎:交易所的“心脏”

说白了,撮合引擎就是交易所用来匹配买卖双方的“红娘”。它的工作逻辑,就两条铁律:价格优先时间优先

价格优先:买单出价高的排前面,卖单出价低的排前面。这很好理解,谁出的价更“狠”,谁就先成交。

时间优先:价格一样的情况下,谁先到交易所,谁排前面。

就这么简单?对,核心逻辑就这么简单。但实际执行起来,细节多到让人头皮发麻。我当年刚入行时,自己写了个模拟撮合引擎,结果发现订单簿的维护比想象中复杂得多。

核心公式:
成交条件:买单价格 ≥ 卖单价格
成交价格:通常取对手方价格(即吃单者的对手价)

4.2 订单簿:排队机制的“可视化”

交易所内部维护着一个巨大的“排队本”,这就是订单簿(Order Book)。它分两边:买盘(Bid)和卖盘(Ask)。

我习惯把订单簿想象成一个双向队列。买盘这边,价格从高到低排列;卖盘那边,价格从低到高排列。每个价格档位上,都排着一堆人,按时间先后顺序站好。

举个例子,假设当前订单簿长这样:

卖盘(Ask) 价格 数量
卖5 100.05 200
卖4 100.04 150
卖3 100.03 300
卖2 100.02 100
卖1 100.01 500
买盘(Bid) 价格 数量
买1 100.00 400
买2 99.99 250
买3 99.98 600
买4 99.97 100
买5 99.96 300

现在,如果你下了一个市价买单,想买300股。撮合引擎会怎么做?它会直接从卖1开始“吃”,把卖1的500股吃掉300股。成交价是100.01。这就是市价单的“扫货”逻辑。

如果你下的是限价买单,价格设在100.02。那你的单子会排在卖2的位置吗?不对。你的单子是买单,所以它会排在买盘那边。但因为你的价格比买1的100.00高,所以你会直接成为新的买1,并且立即与卖1的100.01成交。成交价是100.01。

避坑指南: 我曾经犯过一个错误,以为限价单价格设得高就能优先成交。其实不是的,限价单是“被动”挂在那,只有价格交叉时才会触发。如果你设的价格高于当前卖1,那它其实就变成了一个“伪市价单”,会立即吃掉对手盘。

4.3 滑点的本质:流动性不足的“代价”

滑点,是每个交易者都躲不开的痛。它的本质是什么?说白了,就是你的订单规模超过了当前最优价格的可用流动性

你想想看,如果你只想买10股,卖1那里有500股等着,你肯定能按100.01成交,没有滑点。但如果你想买1000股呢?卖1只有500股,吃完之后,你还得继续吃卖2的100股、卖3的300股、卖4的150股……

成交价格会变成这样:

  • 500股 @ 100.01
  • 100股 @ 100.02
  • 300股 @ 100.03
  • 100股 @ 100.04

你的平均成交价是 (500×100.01 + 100×100.02 + 300×100.03 + 100×100.04) / 1000 ≈ 100.021。比最初的卖1价格高了0.011。这0.011,就是滑点。

滑点的大小,取决于两个因素:订单规模市场深度。市场深度越浅,你的订单越大,滑点就越严重。

注意: 滑点不是交易所“黑”了你,而是市场流动性的真实反映。在流动性极差的市场(比如某些小币种、冷门股票),一个不大的订单都可能造成巨大的滑点。我见过有人在一只仙股上,因为流动性不足,滑点高达5%以上。

4.4 知识体系:撮合引擎的核心逻辑

为了让大家更直观地理解,我画了一张流程图。这张图展示了从订单提交到成交的完整路径。

撮合引擎核心逻辑流程图 订单提交 判断订单类型(市价/限价) 市价单 限价单 从最优对手价开始扫货 检查价格是否交叉 成交:更新订单簿 未交叉:挂入订单簿排队 订单处理完成

从这张图可以看得很清楚:市价单是“主动进攻”,直接扫货;限价单是“被动防守”,挂在那等人来吃。两者的处理路径完全不同。

4.5 实战中的“排队”细节

在实际交易中,排队机制还有一些容易被忽略的细节。

第一,订单的“可见性”问题。 有些交易所支持“冰山订单”,只显示一部分数量,隐藏大部分。这种订单在排队时,只按显示的部分算时间优先。我见过有人利用这个特性,在关键价位挂大量隐藏单,制造“虚假”的流动性。

第二,撤单与重排。 你撤单后重新挂,时间戳会刷新,你会排到最后面。所以频繁撤单重挂,其实是在“自毁长城”。

第三,盘口价差的“陷阱”。 有时候买1和卖1之间的价差很小,看起来流动性很好。但如果你点进去看,可能每个价位只有几十股。这种“薄皮大馅”的盘口,一个稍大的订单就能打穿好几档。

我的经验: 在交易前,我习惯先看“市场深度图”,而不是只看买1卖1。深度图能告诉你每个价位的真实挂单量。如果某个价位突然出现大量挂单,然后又迅速撤掉,那很可能是“幌骗”行为,要小心。

4.6 滑点的“隐形”成本

滑点不只是你看到的那点价格差异。它还有“隐形”成本。

比如,你下了一个大单,吃掉了好几档价格。这本身就会推高价格(如果你是买方)或压低价格(如果你是卖方)。这种“市场冲击成本”,也是滑点的一部分。

更麻烦的是,你的大单可能会引发“连锁反应”。其他交易者看到价格异动,可能会跟风买入或卖出,进一步放大滑点。这就是所谓的“流动性黑洞”。

我记得有一次,我在一个流动性一般的品种上做套利,下了个中等规模的订单。结果因为滑点太大,套利空间直接被吃掉了,反而亏了手续费。从那以后,我对滑点就特别敏感。

怎么控制滑点?几个实用方法:

  • 拆单:把大单拆成多个小单,分批成交。
  • 使用限价单:不要用市价单,用限价单控制成交价格。
  • 选择流动性好的时段:避开开盘、收盘、消息发布等波动剧烈的时间。
  • 使用算法交易:比如TWAP(时间加权平均价格)、VWAP(成交量加权平均价格)等。

嗯,关于撮合引擎和滑点,今天就聊到这。记住一句话:你的对手不是市场,而是流动性。理解了这一点,你就能更好地控制交易成本。

专注资料整理