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、归属信息 | 高频交易、深度流动性分析 |
2.3 买卖盘口(Bid/Ask)的深度解析
盘口深度,就是看每个价位上挂了多少钱。我一般会关注三个维度:
- 价差(Spread):最优卖价减去最优买价。价差越小,流动性越好。
- 挂单量分布:看大单集中在哪个价位。我曾经在ETH上看到买一挂了500个BTC的大单,结果价格硬是没跌下去。
- 买卖力量对比:把买盘和卖盘的总量做个比值。比值大于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这个价位有很强的支撑意愿。我个人习惯把这种“大单托底”的情况标记出来,作为潜在入场信号。
2.4 订单簿的快照与增量更新
这里有个容易混淆的概念——快照和增量。我刚开始做数据对接时,就因为没搞清楚这两者的区别,导致订单簿重建出了大问题。
快照(Snapshot):某一时刻订单簿的完整状态。比如你打开交易软件,看到的所有挂单就是一张快照。
增量(Incremental Update):订单簿发生变化的部分。比如有人撤单了,或者新挂了一笔单子,交易所只推送变化的部分。
实际应用中,流程是这样的:
- 先拉取一次快照,作为基准
- 然后持续接收增量更新
- 把增量应用到快照上,维护本地订单簿
下面我用一张图来展示整个数据流:
嗯,这里要注意一点:增量更新的格式通常是这样的:
{
"type": "update",
"bids": [
[101.00, 0], // 价格101.00,数量0表示撤单
[100.90, 200] // 价格100.90,数量200表示新挂单或修改
],
"asks": [
[101.20, 150]
]
}
看到没?数量为0就表示这个价位的挂单全部撤掉了。我刚开始做的时候,以为数量为0是数据异常,还去问交易所客服,结果闹了个笑话。
说实话,订单簿这东西,越用越觉得有意思。它就像市场的“心电图”,每一笔挂单、每一次撤单,都是市场参与者的真实意图。后面我们会继续深入,看看怎么用这些数据做流动性预判。