第二章:撮合引擎原理——价格优先、时间优先,以及限价单与市价单的交互逻辑
大家好,我是你们的量化实战讲师。
上一章我们聊了订单类型的基本概念。今天,咱们深入底层,看看交易所的撮合引擎到底是怎么工作的。说白了,就是搞清楚你的订单发出去之后,系统是怎么帮你找到对手盘的。
我个人觉得,理解撮合引擎,是区分“会写代码的交易员”和“真懂市场的量化工程师”的分水岭。很多策略回测跑得漂亮,一上实盘就亏钱,问题往往就出在这里——你假设的成交逻辑,跟真实的撮合引擎不一样。
2.1 核心原则:价格优先与时间优先
交易所的撮合引擎,本质上就是一个巨大的、高速运转的“配对机器”。它遵循两条铁律,简单到离谱,但威力巨大。
- 价格优先:买单出价高的优先成交,卖单出价低的优先成交。
- 时间优先:价格相同的情况下,谁先挂单,谁先成交。
嗯,这里要注意。这两条原则是同时生效的。价格是第一权重,时间是第二权重。你想想看,如果价格没优势,时间再早也没用。
核心逻辑:
买单队列按价格从高到低排序,卖单队列按价格从低到高排序。价格相同的,按到达时间排序。
我在项目中遇到过一个问题:有个学员写了一个高频策略,以为自己的订单能抢到最优价。结果发现,他的订单总是排在别人后面。为什么?因为他忽略了网络延迟和系统处理时间。他的订单虽然“想”得早,但到达撮合引擎时,已经比别人晚了几个微秒。在价格相同的情况下,这几个微秒就是天壤之别。
2.2 限价单与市价单的交互逻辑
这是今天的重头戏。限价单和市价单,它们是怎么在撮合引擎里“打架”的?
2.2.1 限价单:我是“守株待兔”派
限价单,说白了就是“我只愿意在这个价格或更好的价格成交”。它不会主动去追价格,而是挂在订单簿上,等着别人来吃。
- 买入限价单:挂一个低价,等着有人愿意卖给我。
- 卖出限价单:挂一个高价,等着有人愿意买。
限价单进入撮合引擎后,会先跟对手盘队列的“最优价格”进行匹配。如果匹配不上,就进入自己的队列排队。
2.2.2 市价单:我是“横冲直撞”派
市价单,就是“我不在乎价格,我只要立刻成交”。它不指定价格,直接跟对手盘队列里的最优价格成交。
- 买入市价单:直接吃掉卖一、卖二、卖三……直到买够数量。
- 卖出市价单:直接砸给买一、买二、买三……直到卖光。
避坑指南:
我曾经见过一个新手,用市价单在流动性很差的币种上开仓。结果呢?他的市价单直接吃穿了整个卖盘,成交价格比预期高了5%。这就是“滑点”的威力。市价单虽然成交快,但成本不可控。
2.3 交互逻辑的实战推演
我们用一个具体的例子来推演一下。假设当前订单簿如下:
| 方向 | 价格 | 数量 | 类型 |
|---|---|---|---|
| 卖单 | 100.05 | 10 | 限价 |
| 卖单 | 100.00 | 20 | 限价 |
| —— | —— | —— | —— |
| 买单 | 99.95 | 15 | 限价 |
| 买单 | 99.90 | 5 | 限价 |
场景一:一个买入市价单,数量30。
这个市价单进来后,会直接跟卖单队列成交。它先吃掉卖一(100.00,20个),再吃掉卖二(100.05,10个)。成交均价是 (100.00*20 + 100.05*10) / 30 = 100.0167。你看,它没有挂单,直接成交了。
场景二:一个买入限价单,价格100.00,数量50。
这个限价单进来后,先跟卖一(100.00,20个)匹配,成交20个。然后,它发现卖二的价格是100.05,高于自己的限价100.00,所以不再匹配。剩下的30个,以100.00的价格挂在买单队列里,排在所有100.00的买单后面。
场景三:一个卖出市价单,数量10。
这个市价单进来后,直接跟买单队列成交。它吃掉买一(99.95,15个)中的10个。成交价是99.95。
我的个人习惯:
在写策略时,我一般会避免在流动性差的时候用市价单。我会先挂一个限价单,如果一段时间没成交,再考虑用市价单“扫货”。这样既能控制成本,又能保证成交率。
2.4 知识体系核心逻辑图
为了让你更直观地理解,我画了一张流程图。它展示了订单从进入系统到最终成交的完整路径。
这张图清晰地展示了两种订单的“命运”。限价单像是一个耐心的猎人,市价单则像一头冲动的猛兽。它们各有优劣,关键看你怎么用。
2.5 实战中的“潜规则”
除了这些明面上的规则,还有一些“潜规则”你需要知道。
- 冰山订单:有些交易所支持“冰山订单”,只显示一部分数量,隐藏真实意图。我建议你在做盘口分析时,要考虑到这一点。
- 自成交预防:交易所会防止你的买单和卖单自己跟自己成交。这在做市策略里尤其要注意。
- 最小交易单位:不是所有数量都能成交。比如,有些交易所最小交易单位是0.01个BTC,你挂0.005个,系统会直接拒绝。
总结一下:
撮合引擎的核心就是“价格优先、时间优先”。限价单提供流动性,市价单消耗流动性。理解它们的交互逻辑,是你写出稳定盈利策略的基础。
好了,今天就讲到这里。记住这些原理,下一章我们开始实战,用Python模拟一个简单的撮合引擎。