1. 订单簿核心概念与图解目标

订单簿(Order Book)是撮合交易系统中最基础、也最容易被低估的数据结构。它把市场上所有尚未成交的买单与卖单,按价格和到达时间组织成两个有序队列,让撮合引擎能够在任意时刻快速回答三个问题:当前最优买价是多少、最优卖价是多少、下一笔订单应该和谁成交。理解订单簿,本质上就是理解“价格档位”与“时间优先”这两条规则如何共同决定成交顺序。

本节先建立三个核心概念:订单簿的定义与组成、价格档位的含义、优先队列在订单簿中的作用,最后给出整门课程的结构图解,帮助你在后续章节中定位每个知识点。

一、订单簿是什么

订单簿是某一交易标的(例如某只股票、某个合约或某个币对)全部未成交限价订单的集合。它通常分为两侧:

  • 买方(Bid 侧):所有愿意买入的挂单,按价格从高到低排列,价格最高者优先级最高。
  • 卖方(Ask 侧):所有愿意卖出的挂单,按价格从低到高排列,价格最低者优先级最高。

两侧各自形成一条“价格优先、时间优先”的有序队列。最优买价(Best Bid)与最优卖价(Best Ask)之间的差额就是买卖价差(Spread),它是衡量市场流动性的直接指标。当一笔新订单进入时,撮合引擎会先尝试与对手方最优档位成交,成交后剩余部分再挂入本方队列,这就是订单簿“先撮合、后挂单”的基本行为。

二、价格档位(Price Level)的含义

价格档位是订单簿的基本存储单元。同一个价格上可能聚集多笔订单,它们被合并成一个档位,档位内再按时间先后排队。一个档位通常包含三个字段:

  • 价格(price):该档位对应的限价。
  • 总量(total quantity):该价格上所有未成交订单的数量之和。
  • 订单队列(order queue):该价格上按到达时间排序的订单列表,队首是最早到达、优先级最高的订单。

举例来说,假设卖侧最优档位价格为 100.50,队列中有三笔卖单:A 在 09:30:01 挂出 200 股,B 在 09:30:05 挂出 300 股,C 在 09:30:09 挂出 100 股。那么该档位的总量为 600 股,队首是 A。若此时来了一笔 350 股的买单,撮合引擎会先吃掉 A 的 200 股,再吃掉 B 的 150 股,B 剩余 150 股仍留在队首位置。这个例子说明:价格决定“和谁成交”,时间决定“同一价格内先和谁成交”。

三、优先队列在订单簿中的作用

订单簿的两侧本质上都是优先队列。买方侧是一个最大堆(按价格降序),卖方侧是一个最小堆(按价格升序),堆顶即最优档位。但订单簿的优先队列比普通堆更复杂,因为它需要同时维护两层优先级:

  1. 档位层:价格优先。买侧价格越高越优先,卖侧价格越低越优先。
  2. 订单层:时间优先。同一档位内,先到达的订单先成交。

因此工程实现上常见两种结构组合:用有序映射(如红黑树、跳表)维护价格档位的有序性,用双向链表或 FIFO 队列维护档位内订单的时间顺序。这样,查询最优档位是 O(1) 或 O(log n),插入新档位是 O(log n),档位内追加订单是 O(1),取消订单则通过订单 ID 定位后从链表中摘除。理解这套结构,是后续学习撮合算法、行情快照生成和订单簿重建的前提。

订单簿:价格档位 + 档位内时间优先队列 买方 Bid 侧(价格降序) 档位 100.20 · 总量 500 A 200 B 200 C 100 ← 队首 档位 100.10 · 总量 300 D 300 档位 100.00 · 总量 800 E 500 F 300 卖方 Ask 侧(价格升序) 档位 100.50 · 总量 600 A 200 B 300 C 100 ← 队首 档位 100.60 · 总量 450 G 450 档位 100.80 · 总量 700 H 400 I 300 买卖价差 100.50 − 100.20 = 0.30 撮合规则: ① 价格优先:买侧取最高价、卖侧取最低价;② 时间优先:同档位内队首订单先成交;③ 新单先与对手方最优档位撮合,剩余量挂入本方队列。 示例数据为教学假设,用于说明档位合并与队列顺序,不代表真实市场行情。

四、课程整体结构图解

本课程共 30 章,围绕“结构—规则—实现—应用”四条主线展开。前几章建立订单簿与价格档位的基本模型,明确买卖两侧的排序方向与优先队列的两层优先级;中间章节深入撮合规则、订单生命周期、档位增删改查、快照与增量行情、订单簿重建等工程问题;后段则讨论性能优化、异常场景(如自成交、价格笼子、熔断)以及不同市场结构(连续竞价、集合竞价、做市商报价)下的订单簿变体。

学习时建议始终抓住一条主线:任何订单簿操作,最终都可以归结为“在正确的档位上,按正确的时间顺序,插入或删除一个订单”。无论是限价单、市价单、撤单、改单,还是行情推送中的增量更新,都可以用这句话来检验自己是否真正理解了结构。下一节将从买卖两侧的排序方向与最优档位判定开始,把本节的结构图落到具体字段和判定条件上。

阅读建议:先记住“买侧价格降序、卖侧价格升序、同价按时间排队”这三句话,再对照上方 SVG 中的档位与队列,尝试自己推演一笔新订单进入后的成交与挂单过程。