2、订单簿数据结构:Level 1/2/3 数据详解

做量化交易这些年,我见过不少新手一上来就盯着K线看。说实话,K线是滞后的。真正能让你提前嗅到市场动向的,是订单簿。今天我们就来拆解订单簿的数据结构,这东西搞明白了,流动性预判才算真正入门。

2.1 订单簿是什么?

订单簿,说白了就是一个实时更新的买卖挂单列表。买方挂单叫Bid,卖方挂单叫Ask。每一笔挂单都包含价格和数量两个核心信息。

我习惯把订单簿想象成一个“排队现场”:

  • 买方在左边排队,出价高的排前面
  • 卖方在右边排队,要价低的排前面
  • 中间的空隙就是买卖双方的博弈区

嗯,这个比喻虽然简单,但很实用。你想想看,价格为什么会动?就是因为有人在不断吃掉对方的挂单。

2.2 Level 1 / 2 / 3 数据详解

交易所提供的数据深度不同,分为三个等级。我刚开始做回测时踩过坑,以为Level 1就够了,结果策略实盘直接崩了。

数据等级 包含内容 典型用途
Level 1 最优买卖价(Best Bid/Ask)、最新成交价、成交量 简单行情展示、散户交易
Level 2 多档位买卖盘口(通常5-10档)、每档挂单量 量化策略、做市商参考
Level 3 全量订单簿、每笔挂单的订单ID、归属信息 高频交易、深度流动性分析
关键点:Level 3数据能看到每一笔挂单的“身份”,比如谁挂的、什么时候挂的。这对识别大资金动向非常关键。

2.3 买卖盘口(Bid/Ask)的深度解析

盘口深度,就是看每个价位上挂了多少钱。我一般会关注三个维度:

  1. 价差(Spread):最优卖价减去最优买价。价差越小,流动性越好。
  2. 挂单量分布:看大单集中在哪个价位。我曾经在ETH上看到买一挂了500个BTC的大单,结果价格硬是没跌下去。
  3. 买卖力量对比:把买盘和卖盘的总量做个比值。比值大于1.2,说明买方强势。

举个例子,假设当前盘口是这样的:

卖五:101.50  200股
卖四:101.40  150股
卖三:101.30  300股
卖二:101.20  100股
卖一:101.10  250股
-------------------
买一:101.00  400股
买二:100.90  180股
买三:100.80  220股
买四:100.70  90股
买五:100.60  110股

你看,买一挂了400股,明显比卖一的250股多。这说明什么?说明买方在101.00这个价位有很强的支撑意愿。我个人习惯把这种“大单托底”的情况标记出来,作为潜在入场信号。

小技巧:如果买一和卖一之间的价差突然扩大,往往是市场即将变盘的信号。我曾经用这个特征提前捕捉到了一次BTC的闪崩。

2.4 订单簿的快照与增量更新

这里有个容易混淆的概念——快照和增量。我刚开始做数据对接时,就因为没搞清楚这两者的区别,导致订单簿重建出了大问题。

快照(Snapshot):某一时刻订单簿的完整状态。比如你打开交易软件,看到的所有挂单就是一张快照。

增量(Incremental Update):订单簿发生变化的部分。比如有人撤单了,或者新挂了一笔单子,交易所只推送变化的部分。

实际应用中,流程是这样的:

  1. 先拉取一次快照,作为基准
  2. 然后持续接收增量更新
  3. 把增量应用到快照上,维护本地订单簿
避坑指南:我曾经因为增量更新的顺序没处理好,导致本地订单簿和交易所对不上。后来我加了一个序列号校验,每次增量都检查是否连续。如果发现跳号,立即重新拉取快照。

下面我用一张图来展示整个数据流:

交易所 快照(Snapshot) 增量更新 本地订单簿 策略 数据流方向 先拉快照建立基准 再持续接收增量更新 本地订单簿实时维护

嗯,这里要注意一点:增量更新的格式通常是这样的:

{
  "type": "update",
  "bids": [
    [101.00, 0],    // 价格101.00,数量0表示撤单
    [100.90, 200]   // 价格100.90,数量200表示新挂单或修改
  ],
  "asks": [
    [101.20, 150]
  ]
}

看到没?数量为0就表示这个价位的挂单全部撤掉了。我刚开始做的时候,以为数量为0是数据异常,还去问交易所客服,结果闹了个笑话。

核心总结:订单簿分析的核心就三件事——看懂数据结构、理解盘口深度、处理好快照和增量的关系。这三件事搞定了,你就能从订单簿里读出很多别人看不到的信息。

说实话,订单簿这东西,越用越觉得有意思。它就像市场的“心电图”,每一笔挂单、每一次撤单,都是市场参与者的真实意图。后面我们会继续深入,看看怎么用这些数据做流动性预判。


专注资料整理