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

第 03 章 / 共 12 章

第三章 · 限价单与排队的艺术

两种人,两种命

面对买一10.00、卖一10.01的那道缝,每个交易者只有两种姿态:要么跨过缝,接受对方的价格立刻成交;要么挂进队伍,报一个自己的价格,等别人来跨。这一章讲第二种人用的武器——限价单(limit order):"我要买,但我最多出10.00,一分钱不多给。"

限价单是订单簿的建筑材料。墙上贴的每一张纸条都是限价单,买一卖一、深度、价差,全是限价单堆出来的。理解撮合,一半是理解限价单怎么排队。

八个字的铁律:价格优先,时间优先

全世界的连续竞价交易所,排队规则归根结底就八个字:价格优先,时间优先。

价格优先:买单里出价高的排在出价低的前面;卖单里要价低的排在要价高的前面。所以"买一"永远是当前最高买价——谁出得高,谁站墙顶。这条几乎没争议,因为它就是"拍卖"的直觉。

时间优先:同一个价格上,先到的先成交。10.00元上排着三张买单:甲的500股(9:30:01到)、乙的300股(9:30:02到)、丙的1000股(9:30:05到)。这时来一张卖出600股的市价单,成交价10.00,前500股给甲(甲的单全部成交、离开队列),剩下100股给乙(乙的单成交100股、还剩200股继续排头)。丙的1000股一股没轮上——哪怕他的单子最大。

这套规则合起来叫价格-时间优先(price-time priority),也叫FIFO(先进先出)。它是目前主流交易所(A股、美股、期货、绝大多数加密货币交易所)的默认规则。也有例外——比如部分期货市场用按比例分配(pro-rata),同价位的单按大小分蛋糕——但那是少数派,本书以FIFO为主线。

大白话:横向比价格,谁的条件好谁站前面;同价竖着比时间,谁先到谁先走。队列头的人永远先成交,后面的人只能等。

为什么你的单子总是排在别人后面

理解了规则,再看真实盘口,你会产生一种憋屈:你想在10.00买,发现前面已经排了2400股;等轮到你,黄花菜都凉了。你加价到10.01抢跑?那你已经跨过了缝,等于直接买卖一,排队就白排了。

这就是限价单的核心博弈,一笔明算账:

所以"挂在哪里"是一门权衡:挂得离缝越近,成交概率越大,但被聪明人"挑中"的逆向选择风险也越大;挂得越远越安全,但可能永远轮不到。做市商(专门靠双边挂单赚价差的人)整天就在算这笔账。

改单=重新排队,这是很多人不知道的坑

你挂了10.00买1000股,排在队尾。过了一会儿你想改成1005股——只加5股,队位还在吗?

不在了。绝大多数交易所的规则是:改数量(部分市场改小不改大除外)、改价格,都视为撤掉旧单、挂入新单,时间戳重新算,回到队尾。唯一普遍不改队位的操作是减少数量(只减不增),因为你没有占任何人便宜。

这条规则的逻辑很硬:队位是用"先到"换来的资产。如果允许改大数量还不丢队位,我可以用一张1股的小单占住队首,等行情来了再悄悄改成100万股——等于免费插队。堵死这个漏洞的办法就是一刀切:任何让订单变得更"占便宜"的修改,都重新排队。

大白话:队列位置是用到达时间换来的。你可以主动放弃(撤单、改单),但系统绝不允许你拿着旧队位换新条件。写撮合系统时,cancel/replace 基本等于 cancel + new。

这章给写系统的人留下了什么

三个必须实现的机制,先记下来:

  1. 每个价格档位内部是一条严格按到达顺序的FIFO队列,撮合永远从队首开始。
  2. 撤单是把订单从队列里摘出去;改价和增量改单 = 撤旧 + 挂新。
  3. 部分成交后,剩余部分保留原队位继续排(前面甲成交完离场、乙剩的200股继续排头,就是这个规则)。

下一章换边站:看看不愿意排队的人——市价单——是怎么跨过那道缝的,以及跨过去的时候会发生什么。

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