第四章:订单簿分析: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 实战:如何用订单簿数据做决策

光看懂数据还不够,你得知道怎么用。我分享几个实战中常用的思路:

  1. 检测虚假挂单(Spoofing): 如果某个价位突然出现大单,但很快又撤掉,这很可能是有人在「演戏」。我的策略会标记这种行为,并在后续交易中避开这些价位。
  2. 寻找支撑/阻力位: 订单簿上挂单量特别大的价位,往往就是心理上的支撑位或阻力位。价格到了这些位置,要么被弹回,要么被突破。
  3. 计算订单簿失衡度: 一个简单的公式:(买盘总量 - 卖盘总量) / (买盘总量 + 卖盘总量)。正值表示买方占优,负值表示卖方占优。我个人习惯用这个指标作为入场信号的辅助判断。
避坑指南: 我曾经犯过一个错误——只看前五档的挂单量。后来发现,有些机构会把大单挂在更深的档位,然后通过算法逐步「喂单」到前面。所以,我建议你至少看十档,甚至全量数据。

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数据给了你一把手术刀,但怎么用,还得靠经验和判断力。

好了,这一章的内容就到这里。记住,数据是死的,人是活的。多复盘,多总结,你也能成为订单簿分析的高手。

专注资料整理