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。
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,就是滑点。
滑点的大小,取决于两个因素:订单规模和市场深度。市场深度越浅,你的订单越大,滑点就越严重。
4.4 知识体系:撮合引擎的核心逻辑
为了让大家更直观地理解,我画了一张流程图。这张图展示了从订单提交到成交的完整路径。
从这张图可以看得很清楚:市价单是“主动进攻”,直接扫货;限价单是“被动防守”,挂在那等人来吃。两者的处理路径完全不同。
4.5 实战中的“排队”细节
在实际交易中,排队机制还有一些容易被忽略的细节。
第一,订单的“可见性”问题。 有些交易所支持“冰山订单”,只显示一部分数量,隐藏大部分。这种订单在排队时,只按显示的部分算时间优先。我见过有人利用这个特性,在关键价位挂大量隐藏单,制造“虚假”的流动性。
第二,撤单与重排。 你撤单后重新挂,时间戳会刷新,你会排到最后面。所以频繁撤单重挂,其实是在“自毁长城”。
第三,盘口价差的“陷阱”。 有时候买1和卖1之间的价差很小,看起来流动性很好。但如果你点进去看,可能每个价位只有几十股。这种“薄皮大馅”的盘口,一个稍大的订单就能打穿好几档。
4.6 滑点的“隐形”成本
滑点不只是你看到的那点价格差异。它还有“隐形”成本。
比如,你下了一个大单,吃掉了好几档价格。这本身就会推高价格(如果你是买方)或压低价格(如果你是卖方)。这种“市场冲击成本”,也是滑点的一部分。
更麻烦的是,你的大单可能会引发“连锁反应”。其他交易者看到价格异动,可能会跟风买入或卖出,进一步放大滑点。这就是所谓的“流动性黑洞”。
我记得有一次,我在一个流动性一般的品种上做套利,下了个中等规模的订单。结果因为滑点太大,套利空间直接被吃掉了,反而亏了手续费。从那以后,我对滑点就特别敏感。
怎么控制滑点?几个实用方法:
- 拆单:把大单拆成多个小单,分批成交。
- 使用限价单:不要用市价单,用限价单控制成交价格。
- 选择流动性好的时段:避开开盘、收盘、消息发布等波动剧烈的时间。
- 使用算法交易:比如TWAP(时间加权平均价格)、VWAP(成交量加权平均价格)等。
嗯,关于撮合引擎和滑点,今天就聊到这。记住一句话:你的对手不是市场,而是流动性。理解了这一点,你就能更好地控制交易成本。