第四章:订单簿分析:Level 1/Level 2数据解读,买卖盘口与深度图
订单簿,说白了就是市场的「实时供需地图」。
我个人习惯把订单簿比作一个菜市场。Level 1数据告诉你「现在白菜多少钱一斤」,Level 2数据则告诉你「有多少人想买,有多少人想卖,他们各自出什么价」。嗯,这里面的门道,比大多数人想象的要深得多。
4.1 Level 1 vs Level 2:你能看到什么?
先搞清楚这两个概念。很多新手一上来就搞混。
| 数据层级 | 包含内容 | 典型用途 |
|---|---|---|
| Level 1 | 最新成交价、买一/卖一价、当日最高/最低、成交量 | 散户看盘、简单策略 |
| Level 2 | 全部买卖盘口的价位与挂单量、逐笔成交明细 | 高频交易、做市商、机构策略 |
Level 1就像你只看到海面上的浪花。Level 2则让你看到水面下的暗流涌动。我在项目中遇到过不少团队,只靠Level 1数据做高频策略,结果被市场深度变化打得措手不及。你想想看,如果只看买一卖一,你根本不知道下面还有多少「隐形弹药」。
核心区别: Level 1告诉你「现在什么价」,Level 2告诉你「这个价能成交多少」。
4.2 买卖盘口:读懂挂单的语言
买卖盘口,就是订单簿上每一档的价格和对应的挂单量。举个例子:
卖五:10.05 2000股
卖四:10.04 1500股
卖三:10.03 3000股
卖二:10.02 1000股
卖一:10.01 500股
-------------------
买一:10.00 800股
买二:9.99 1200股
买三:9.98 2500股
买四:9.97 1800股
买五:9.96 3000股
这里有几个关键点,我建议你重点关注:
- 价差(Spread): 买一和卖一之间的差距。价差越小,流动性越好。高频交易最喜欢价差窄的市场。
- 挂单量分布: 如果卖盘堆积如山,买盘稀稀拉拉,说明卖方压力大。反之亦然。
- 大单挂单: 突然出现一笔远超正常水平的挂单,往往是机构在「秀肌肉」。我曾经见过一个策略,专门盯着这种大单挂单的撤单行为来套利。
一个小技巧: 别只看当前档位。我个人习惯把前五档的挂单量加起来,算一个「累计深度」。这比单看某一档要靠谱得多。
4.3 深度图:把订单簿画出来
深度图,就是把订单簿的挂单量按价格累加,画成一条曲线。它能直观地告诉你:
- 在某个价格区间,到底有多少「弹药」在等着
- 价格突破某个点位后,会不会引发连锁反应
下面这张图,是我用SVG画的一个典型深度图结构。它展示了买卖双方的「力量对比」。
这张图里,红色区域代表买方深度,绿色区域代表卖方深度。两条曲线交汇的地方,就是当前成交价。如果红色区域比绿色区域厚实,说明买方力量更强,价格有上涨动力。反之亦然。
注意: 深度图是静态快照。市场是动态的,挂单随时可能撤掉。我曾经见过一个极端案例:某只股票深度图显示买盘非常厚实,结果一瞬间所有大单全部撤走,价格直接跳水。所以,别只看深度图,还要看挂单的「稳定性」。
4.4 实战:如何用订单簿数据做决策
光看懂数据还不够,你得知道怎么用。我分享几个实战中常用的思路:
- 检测虚假挂单(Spoofing): 如果某个价位突然出现大单,但很快又撤掉,这很可能是有人在「演戏」。我的策略会标记这种行为,并在后续交易中避开这些价位。
- 寻找支撑/阻力位: 订单簿上挂单量特别大的价位,往往就是心理上的支撑位或阻力位。价格到了这些位置,要么被弹回,要么被突破。
- 计算订单簿失衡度: 一个简单的公式:(买盘总量 - 卖盘总量) / (买盘总量 + 卖盘总量)。正值表示买方占优,负值表示卖方占优。我个人习惯用这个指标作为入场信号的辅助判断。
避坑指南: 我曾经犯过一个错误——只看前五档的挂单量。后来发现,有些机构会把大单挂在更深的档位,然后通过算法逐步「喂单」到前面。所以,我建议你至少看十档,甚至全量数据。
4.5 代码示例:解析Level 2数据
下面是一个简单的Python代码片段,演示如何解析Level 2数据并计算买卖盘口失衡度。嗯,这里只展示核心逻辑,实际生产环境要复杂得多。
import json
def parse_order_book(raw_data):
"""
解析Level 2订单簿数据
raw_data: 从交易所API获取的原始JSON数据
"""
data = json.loads(raw_data)
bids = data['bids'] # 买盘,格式 [[价格, 数量], ...]
asks = data['asks'] # 卖盘,格式 [[价格, 数量], ...]
# 计算前五档的总挂单量
total_bid_volume = sum([float(bid[1]) for bid in bids[:5]])
total_ask_volume = sum([float(ask[1]) for ask in asks[:5]])
# 计算失衡度
if total_bid_volume + total_ask_volume > 0:
imbalance = (total_bid_volume - total_ask_volume) / (total_bid_volume + total_ask_volume)
else:
imbalance = 0
return {
'best_bid': bids[0][0] if bids else None,
'best_ask': asks[0][0] if asks else None,
'spread': float(asks[0][0]) - float(bids[0][0]) if bids and asks else None,
'imbalance': imbalance
}
# 使用示例
sample_data = '{"bids":[["10.00","800"],["9.99","1200"]],"asks":[["10.01","500"],["10.02","1000"]]}'
result = parse_order_book(sample_data)
print(f"失衡度: {result['imbalance']:.2f}")
这段代码很简单,但它是很多高频策略的基础。你想想看,如果失衡度突然从0.1跳到0.8,说明买方力量急剧增强,这时候追涨的风险就相对小一些。当然,前提是你能确认这不是虚假挂单。
总结一下: 订单簿分析的核心,就是透过挂单数据,读懂市场参与者的「真实意图」。Level 2数据给了你一把手术刀,但怎么用,还得靠经验和判断力。
好了,这一章的内容就到这里。记住,数据是死的,人是活的。多复盘,多总结,你也能成为订单簿分析的高手。