撮合引擎:交易所是怎么把买单卖单凑成一笔交易的 书架

第 02 章 / 共 12 章

第二章 · 订单簿:买一卖一是从哪冒出来的

把第一章那面墙拍张照

第一章结尾,管理员把墙立起来了。现在我们来读这面墙——你打开任何一个行情软件,看到的"盘口",就是这面墙的一张快照。

一个真实的盘口长这样(以某只股票为例):

卖五 10.05  800股
卖四 10.04  300股
卖三 10.03  1200股
卖二 10.02  500股
卖一 10.01  600股
————————————
买一 10.00  1000股
买二 9.99  2400股
买三 9.98  700股
买四 9.97  900股
买五 9.96  1500股

中间那道横线,就是第一章说的"僵持的缝"。横线以下是想买的人在排队,出价从高到低;横线以上是想卖的人在排队,要价从低到高。离缝最近的两行——买一和卖一——是全市场的注意力中心,因为下一笔成交几乎必然发生在它们俩身上。

每个数字回答一个问题

盘口上的每样东西都对应一个交易者真正关心的问题,我们一个个过。

买一卖一回答"我现在立刻成交,能拿到什么价"。你想立刻买入,就得接受卖一的价10.01;想立刻卖出,就得接受买一的价10.00。"立刻"的代价,就是吃那一分钱的缝。这个缝——卖一减买一——叫价差(spread)。它同时是这个市场"贵不贵"的体温计:缝越小,说明买卖双方咬得越紧,进出成本越低。大盘股、主流币的缝常常只有最小一跳;冷门资产的缝可能宽到几个百分点,你买进来再立刻卖出去,光缝就亏一截。

每一行后面的数量回答"我能成交多少"。买一的1000股意思是:在10.00这个价位上,总共排着1000股的买单。你要卖500股,它们全按10.00接住;你要卖5000股,前1000股按10.00成交,剩下的就得去找9.99的买二、9.98的买三……一路往下啃。这个"每个价位上堆了多少量"的纵向画面,叫深度(depth)。深度厚,大单砸进来价格也稳;深度薄,一笔不大的单就能把价格打穿好几格——第四章讲市价单时,这会变成真金白银的教训。

大白话:买一卖一是"缝有多宽",深度是"墙有多厚"。宽度决定你立刻进出的成本,厚度决定你的大单会把价格砸出多大的坑。

价格的台阶:为什么没有人挂10.005

看上面的盘口,所有价格都停在一分钱的整数倍上。这不是巧合,是规则。交易所规定价格只能按固定的格子走,这个格子叫最小价位(tick size)——价格变动的最小单位。A股是0.01元,美股是0.01美元(低价股另有规定),期货每个品种有自己的tick,比如螺纹钢期货是1元/吨。

为什么要立这条规矩?想象一下没有它会怎样:你挂10.00买,我挂10.001,比你高千分之一就排到你前面;下一个人挂10.0001……加价可以无限小,"比别人好一点"变得毫无成本,排队就失去了意义,价格之间的缝也会被磨到无穷小,谁都没法判断真实的市场意愿。tick size相当于规定了"插队必须付的最低票价":你想排到我前面,至少得多掏一分钱。这一分钱让"改善价格"成了一次真实的表态,而不是免费的挤占。

同样,数量方向也有格子,叫最小数量(lot size)——比如A股最少买100股(一手),科创板另有规定;加密货币交易所通常允许0.001个比特币这样的碎单。你写的撮合系统收单时第一件事,就是校验价格和数量是否落在格子上——不在格子上的订单直接拒掉,别让脏数据进门。

同一价位上,还藏着一支队伍

盘口把每个价位显示成一行总量,但"买一 10.00  1000股"这1000股背后,可能是一个人挂的1000股,也可能是十个人各挂的100股。撮合引擎眼里,这一行不是一个总数,而是一支按到达先后排好的队。有人在这个价位卖出时,先到的买单先成交,后到的继续排——这就是第三章的主角"时间优先"。

这也是为什么有些交易者愿意花大钱看更深的数据:普通行情只告诉你每个价位多少总量,而逐笔数据(第九章会讲)能告诉你每一张单的到达顺序,让你算出自己的单排在这支队伍的第几个。

订单簿其实是一棵树加一个队列

现在把这章的画面翻译成你后面要写的数据结构。一个订单簿 = 两个按价格排序的容器:买单簿按价格从高到低,卖单簿按价格从低到高。每个价格档位里,是一个按时间先后排队的订单队列。最顶上的档位就是买一和卖一。

先不用管用什么具体的数据结构实现(第十章专门讲),你只需要记住这个形状:横向是一格一格的价格台阶,纵向是每格里面的一支队伍。横着比价格,竖着比时间。整个撮合世界的规则,都长在这个形状上。

下一章我们就来当一回排队的人:看看"价格优先、时间优先"这八个字,到底怎么决定你的单子什么时候轮到。

撮合引擎:交易所是怎么把买单卖单凑成一笔交易的 · 王建硕
费曼式写法 · 由多个 AI 代理撰写与互相审校