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

第 08 章 / 共 12 章

第八章 · 各家交易所的规则差在哪

物理定律与地方法规

前七章讲的都是"物理定律":订单簿的形状、价格时间优先、撮合循环、最大成交量原则——这些是全世界交易所的公共语言,换了哪家都一样。这一章讲"地方法规":同样是撮合,A股、美股、期货、加密货币交易所在参数和规则上的真实差异。你要写自己的交易所,就得知道哪些旋钮是别人已经替你调好的、哪些得自己定。

最小价位:一分钱的讲究

第二章说tick size是"插队的最低票价"。各家定法很不一样:

给你的工程启示:tick和lot必须是每个交易品种的配置项,绝不能写死在代码里。

T+0与T+1:成交和"货到手"是两回事

A股有个让新手迷惑的规则:今天买的股票,今天不能卖(T+1);但期货、可转债、美股、加密货币都是T+0——随买随卖。注意这跟撮合引擎没关系:撮合瞬间就完成了,"T+1"限制的是成交之后的交收和再卖出权限,是结算层和风控层的规则。

这是本章最重要的架构启示:撮合引擎只负责"谁和谁按什么价成交了",不负责"货什么时候到账、到账前能不能再用"。T+0还是T+1、涨跌停多少,都是撮合外围的约束层。把撮合内核和约束层分开,你的系统才能既去服务A股式的市场,也去服务币所式的市场。

自成交防护:三种斩法

第五章说过自成交要被拦。具体怎么拦,各家给用户的选项不同,常见三档(以CME、各大币所的STP为典型):

STP通常按账户或机构ID判断。实现上就是撮合循环里每次准备成交前查一下对手单的归属,撞到就按模式处理。一个小但有用的细节:STP是订单自带的参数,同一张单上写着"如果我撞到自己怎么办",而不是交易所全局一个开关。

手续费:maker赚钱,taker付费

加密货币交易所把一件事做到了极致:maker/taker费率——挂单被吃的一方(maker,提供流动性)手续费极低甚至是负数(交易所倒贴返佣),主动吃单的一方(taker,消耗流动性)付正常费率。比如maker -0.01%、taker 0.05%:你挂的单被别人吃掉,交易所给你钱。

为什么倒贴?因为订单簿的厚度是交易所最核心的资产,深度厚才能吸引大交易者,而大交易者来了做市商才有生意——所以交易所花钱买"墙厚"。美股也早就这样:交易所给挂单方每股返佣零点几美分,"挂单返佣"甚至是一些交易策略的全部利润来源。A股是例外:没有maker/taker之分,买卖都收佣金和印花税,方向还不一样(印花税只在卖出时收)。

给你的启示:费率和返佣是按"这次成交里你是主动方还是被动方"逐笔算的。撮合循环的每一笔成交输出里,就得标清楚谁是taker谁是maker——这是计费系统的数据源,事后补标很痛苦。

交易时段与涨跌幅:A股的特色护栏

A股主板有±10%涨跌停(创业板、科创板±20%,ST股±5%),一天就四个小时的连续竞价加两头集合竞价;美股没有个股涨跌停,但有全市场熔断和个股的"涨跌停式"临时停牌机制(LULD);加密货币交易所7×24小时不眠,大多数没有涨跌停——波动靠市场自己消化,这也是为什么币圈单日-30%不稀奇。

这些护栏怎么实现,是第十二章的整章内容。这里只需要建立观念:它们的差异巨大,但都不碰撮合循环本身——涨跌停的本质就是"拒绝/不撮合超出边界的订单",是收单时的一道校验和簿子的一道闸。

一张对照表

    A股  | 美股   | 期货   | 加密货币
时段  4小时+集合竞价 | 6.5小时+盘前盘后 | 日盘+夜盘 | 7×24
T+?  股票T+1 | T+0 | T+0 | T+0
涨跌停 ±10%/±20% | 无(有LULD) | 各品种有 | 多数无
市价单 变体有保护 | 有 | 有(带保护) | 有
费率  固定佣金+印花税 | maker/taker返佣 | 固定/按额 | maker/taker明显

看懂这张表,你就明白了为什么成熟的撮合引擎都把规则做成配置:内核不变,换一套参数就是另一个市场。下一章我们跟一笔成交走完全程:从撮合成的那一刻起,交易所还要往外发哪些消息、怎么保证谁都不丢。

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