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

第 04 章 / 共 12 章

第四章 · 市价单:不惜代价立刻成交

不愿排队的人

限价单说:"这个价,爱来不来。"市价单说:"不管什么价,现在、立刻、马上给我成交。"

市价单(market order)是一种不填价格的订单:你只告诉交易所买还是卖、多少量,价格完全交给市场此刻的状态决定。它的撮合方式简单到粗暴——买单直接从卖一开始往上吃,卖单从买一往下吃,吃到量够为止。这个动作有个形象的名字:扫单(walking the book),像一把扫帚从墙顶往下扫。

拿第二章的盘口演示。当时卖一10.01有600股,卖二10.02有500股,卖三10.03有1200股。现在来一张"市价买入1500股":

一张单,三个价,总共1500股,均价10.0167。成交完,新的卖一变成了10.03——这一张单把整个市场的报价抬高了两格。

滑点:你以为的价格和你拿到的价格

下单那一刻你看到的卖一是10.01,最后均价却是10.0167。这个差距叫滑点(slippage)——预期成交成本和实际成交成本之间的差。

滑点不是bug,是物理。墙上的量就那么多,你要的多于顶格的量,就只能往深处吃,越深越贵。滑点的大小由第二章说的"深度"直接决定:深度厚,1500股可能一格都吃不完,滑点是零;深度薄,同样一张单能把价格顶出去老远。

大白话:市价单买的是一个"确定的成交",放弃的是"确定的价格"。限价单反过来:价格确定,成交不确定。每个下单动作都是在这两样东西之间做取舍。

薄市场里的惨案

滑点在极端情况下会变成灾难。想象一个冷门币,卖一10.01只有50个,卖二直接跳到15.00,再往上是20.00。你市价买入200个,拿到的均价是16块多——比屏幕上看到的价格贵了60%。你看到的10.01,只买到了50个。

真实世界里这类事故一再发生。2010年5月6日美股"闪崩"(Flash Crash),几分钟内道指暴跌近千点又拉回,事后调查报告的核心情节之一,就是大量市价单和止损单在瞬间被抽干的订单簿上横扫,有的股票在几分钱的价格上成交——不是因为有人觉得它就值几分钱,而是那一刻墙上真的没有买单了。

所以交易所普遍给市价单上镣铐,常见三种:

你自己写交易所时,至少要实现其中一种。裸奔的市价单是一颗留给你用户的炸弹,也是留给你自己的。

市价单存在的理由

既然这么危险,为什么还有市价单?因为有一种情况下"确定成交"比"价格好"重要得多:你必须离场的时候。爆仓强平、风险急刹、止损出逃——这些场景里,晚一秒的代价远大于一个差的成交价。市价单是逃生通道,逃生通道不看票价。

这也是为什么做市商喜欢市价单:对方慌不择路跨缝而来,自己稳稳坐在买一卖一等着接,价差和滑点都进了自己口袋。市场里每一次"立刻",都有人在对面收"立刻"的钱。

给写系统的人

市价单在撮合引擎里的实现要点,一句话说透:它不是"价格为0或无穷大"的限价单,虽然这么实现也能跑——买单限价设为系统最高价、卖单设为0,然后走正常撮合循环。但你要额外处理两件事:扫到墙尽头还有剩余怎么办(撤掉?转限价?报错?——这是产品决策,要显式做);以及保护带逻辑插在哪里(每成交一格检查一次偏离)。这些分支在第五章的完整解剖里会看到它们的位置。

下一章是全书的手术台:我们把"一张新订单进门"之后的每一微秒拆开,看撮合循环到底长什么样。

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