3、订单簿深度分析:深度图绘制、累积成交量曲线、流动性缺口识别

各位同学,今天我们来聊聊订单簿的深度分析。说实话,这是我从高频交易转做量化策略后,花时间最多的一块内容。你想想看,订单簿就像市场的「心电图」,而深度分析就是帮我们读懂这张图的关键。

3.1 深度图绘制——把订单簿「画」出来

深度图,英文叫 Depth Chart。说白了,就是把买单和卖单的累积量,按价格画成两条曲线。我个人习惯用 matplotlib 来做这件事,简单直接。

先看代码:

import pandas as pd
import matplotlib.pyplot as plt

def plot_depth_chart(bids, asks):
    """
    bids: DataFrame, 列 ['price', 'volume']
    asks: DataFrame, 列 ['price', 'volume']
    """
    # 按价格排序
    bids_sorted = bids.sort_values('price', ascending=False)
    asks_sorted = asks.sort_values('price', ascending=True)
    
    # 计算累积量
    bids_sorted['cum_vol'] = bids_sorted['volume'].cumsum()
    asks_sorted['cum_vol'] = asks_sorted['volume'].cumsum()
    
    # 画图
    plt.figure(figsize=(12, 6))
    plt.step(bids_sorted['price'], bids_sorted['cum_vol'], 
             where='post', label='Bids', color='green')
    plt.step(asks_sorted['price'], asks_sorted['cum_vol'], 
             where='post', label='Asks', color='red')
    plt.xlabel('Price')
    plt.ylabel('Cumulative Volume')
    plt.title('Order Book Depth Chart')
    plt.legend()
    plt.grid(True, alpha=0.3)
    plt.show()

嗯,这里要注意:where='post' 这个参数很关键。它决定了阶梯图的绘制方式,用 post 才能准确反映每个价格档位的累积量。

我的小技巧: 实际项目中,我习惯把买卖双方的累积量差值也画出来。这样一眼就能看出哪个方向「更厚」,对判断短期支撑阻力很有帮助。

3.2 累积成交量曲线——藏在曲线里的秘密

累积成交量曲线,其实就是深度图的另一种表现形式。但为什么我要单独拿出来讲?因为它的斜率变化,能告诉我们很多信息。

举个例子:

  • 陡峭的曲线:说明在某个价格区间,有大量订单堆积。这往往是重要的支撑位或阻力位。
  • 平缓的曲线:流动性相对分散,价格更容易穿过这个区域。

我曾经在做一个 BTC 的做市策略时,发现深度图上有个「台阶」——在 50000 美元附近,买单累积量突然跳升。后来复盘发现,那是一个大户的冰山订单。如果你只看盘口,根本发现不了。

核心要点: 累积成交量曲线的「拐点」,就是市场博弈的关键位置。我建议你至少观察 10 档以上的深度数据,别只看前 5 档。

3.3 流动性缺口识别——找到市场的「裂缝」

流动性缺口,就是订单簿上那些「空档」——某个价格区间几乎没有订单。为什么会这样?

  • 可能是市场情绪突变,做市商来不及补单
  • 也可能是某个大单被吃掉后,留下的「真空地带」

识别流动性缺口,我一般用这个方法:

def find_liquidity_gaps(bids, asks, threshold=0.5):
    """
    threshold: 价格间隔阈值,单位是 tick
    """
    gaps = []
    
    # 检查买单侧
    for i in range(len(bids) - 1):
        gap = bids.iloc[i]['price'] - bids.iloc[i+1]['price']
        if gap > threshold:
            gaps.append({
                'side': 'bid',
                'from': bids.iloc[i+1]['price'],
                'to': bids.iloc[i]['price'],
                'gap_size': gap
            })
    
    # 检查卖单侧
    for i in range(len(asks) - 1):
        gap = asks.iloc[i+1]['price'] - asks.iloc[i]['price']
        if gap > threshold:
            gaps.append({
                'side': 'ask',
                'from': asks.iloc[i]['price'],
                'to': asks.iloc[i+1]['price'],
                'gap_size': gap
            })
    
    return gaps
避坑指南: 我曾经在实盘里吃过亏——以为缺口就是机会,结果发现那是交易所的撮合延迟导致的「假缺口」。所以,一定要结合时间戳和成交记录来验证。别看到缺口就冲进去。

3.4 知识体系总览

下面这张图,是我自己总结的订单簿深度分析框架。你跟着这个思路走,基本不会跑偏。

订单簿深度分析框架 深度图绘制 累积成交量曲线 流动性缺口识别 • 买卖单累积量曲线 • 阶梯图绘制技巧 • 买卖差值可视化 • 多档位深度对比 • 斜率变化分析 • 支撑阻力位识别 • 冰山订单检测 • 累积量差值计算 • 价格间隔阈值设定 • 缺口大小量化 • 真假缺口辨别 • 缺口回补策略 三者联动:深度图 → 累积曲线 → 缺口识别

3.5 实战中的注意事项

最后,分享几个我在实战中踩过的坑:

  1. 数据频率要匹配:如果你用 tick 级数据做深度图,就别想着看小时级别的趋势。反过来也一样。
  2. 注意交易所的「潜规则」:有些交易所会隐藏部分深度数据,比如只展示前 20 档。这时候你画的深度图,其实是「半张图」。
  3. 别迷信单一指标:深度图 + 累积曲线 + 缺口识别,三个工具要一起用。单看一个,很容易被误导。
我的建议: 刚开始做深度分析时,先拿历史数据回测。把深度图、累积曲线、缺口识别这三个工具,分别用在不同的市场环境下(趋势市、震荡市、突发事件),看看它们各自的表现。这样你心里就有底了。

好了,这一章的内容就到这里。记住,订单簿深度分析不是万能的,但没有它,你的量化策略就像在黑暗中走路。下一章我们会聊到订单簿的时序特征,到时候见。


公众号:蓝海资料掘金营,微信deep3321