订单簿的深度与宽度:如何解读挂单量分布,识别支撑与阻力

做量化交易这些年,我越来越觉得订单簿就像一张战场地图。深度和宽度,说白了就是敌我双方的兵力部署。你想想看,如果连对手的兵力分布都看不懂,这仗怎么打?

今天我们就来聊聊,怎么从订单簿的挂单量分布里,找到真正的支撑位和阻力位。

一、深度 vs 宽度:两个核心维度

先搞清楚概念。我个人习惯把订单簿拆成两个维度来看:

  • 深度(Depth):某个价格区间内的挂单总量。比如买一价附近挂了1000手,买二价附近挂了2000手,这就是深度。
  • 宽度(Width):挂单覆盖的价格范围。从买一价到买十价,跨度有多大,这就是宽度。

举个例子你就明白了。假设某股票当前价格100元:

档位 买盘(手) 卖盘(手)
买一 500 -
买二 1200 -
买三 800 -
卖一 - 600
卖二 - 1500
卖三 - 900

买盘深度 = 500 + 1200 + 800 = 2500手,宽度覆盖了3个档位。卖盘同理。

核心观点:深度决定支撑/阻力的强度,宽度决定支撑/阻力的范围。

二、如何识别真正的支撑位

我在项目中遇到过不少新手,看到买一挂了500手就觉得是支撑。其实这远远不够。

真正的支撑位,需要满足三个条件:

  1. 挂单量显著高于相邻档位。比如买一只有200手,买二突然堆了2000手,那买二才是真正的支撑。
  2. 挂单量持续稳定。如果买二的2000手是瞬间挂上去又撤掉的,那就是假支撑。
  3. 价格多次在该位置反弹。历史回测中,价格跌到这个位置就弹起来,说明市场认可这个价位。

嗯,这里要注意。支撑位不是一成不变的。随着订单簿的更新,支撑位也会移动。我习惯用滑动窗口来动态计算:

def find_support_levels(order_book, window_size=5, threshold=2.0):
    """
    识别订单簿中的支撑位
    :param order_book: 订单簿数据,包含各档位挂单量
    :param window_size: 滑动窗口大小
    :param threshold: 挂单量倍数阈值
    """
    support_levels = []
    bids = order_book['bids']  # 买盘数据
    
    for i in range(window_size, len(bids)):
        current_volume = bids[i]['volume']
        avg_volume = sum(bids[i-window_size:i]['volume']) / window_size
        
        # 如果当前挂单量是平均值的2倍以上,视为支撑
        if current_volume > avg_volume * threshold:
            support_levels.append({
                'price': bids[i]['price'],
                'volume': current_volume,
                'strength': current_volume / avg_volume
            })
    
    return support_levels

实战技巧:我一般把threshold设为2.0到3.0之间。太低了容易误判,太高了会漏掉重要支撑。

三、阻力位的识别方法

阻力位和支撑位是对称的,但有个细节很多人会忽略。卖盘的挂单行为比买盘更复杂。

为什么会这样?因为卖盘里经常藏着大单的出货意图。我曾经见过一个案例,卖二挂了5000手,但价格一涨到那里,单子就撤了。这不是阻力,这是诱多。

识别阻力位,我建议看三个指标:

  • 挂单量的绝对值:卖盘挂单量越大,阻力越强
  • 挂单的稳定性:观察一段时间内挂单是否频繁撤改
  • 成交量的配合:如果价格接近阻力位时成交量放大,说明阻力有效

避坑指南:我曾经因为只看挂单量没看稳定性,在某个品种上吃了大亏。卖一挂了3000手看起来很吓人,结果那是做市商的幌子,价格轻松就突破了。从那以后,我每次都会加一个稳定性检测。

四、挂单量分布的可视化分析

光看数字不够直观。我习惯把订单簿画成柱状图,一眼就能看出哪里是"城墙",哪里是"洼地"。

下面这张图展示了典型的支撑/阻力分布:

订单簿挂单量分布图 挂单量 买三 买二 买一 当前价 卖一 卖二 卖三 支撑位 阻力位 ← 当前价 买盘 卖盘

从这张图可以清楚看到:买二位置挂单量明显高于相邻档位,形成支撑;卖二位置挂单量最高,形成阻力。价格就在这两个"城墙"之间波动。

五、动态分析:订单簿的演变

静态看订单簿只是基本功。真正有价值的是观察订单簿的动态变化。

我常用的几个观察维度:

  • 挂单量的增减速度:如果支撑位的挂单量在快速减少,说明支撑正在被消耗
  • 大单的移动方向:大单从买盘撤到卖盘,还是反过来?这反映了资金的态度
  • 价差的收窄与扩大:价差收窄通常意味着流动性好,但有时也是暴风雨前的宁静

实战案例:去年我在做BTC的订单簿分析时,发现买一位置的挂单量在10分钟内从2000手降到了300手,但价格没怎么跌。这就是典型的"虚撑"——大单在悄悄撤单,准备砸盘。我果断平了多单,半小时后价格跌了3%。

六、量化策略中的应用

说了这么多,怎么把这些知识用到策略里?我分享一个简单的思路。

策略逻辑:当价格接近支撑位且支撑位挂单量稳定时,开多单;当价格接近阻力位且阻力位挂单量稳定时,开空单。

def order_book_strategy(order_book, position):
    """
    基于订单簿的简单交易策略
    """
    support = find_support_levels(order_book)
    resistance = find_resistance_levels(order_book)
    
    current_price = order_book['current_price']
    
    # 检查是否接近支撑位(价格在支撑位上方1%以内)
    if support and current_price <= support['price'] * 1.01:
        if position == 0:  # 空仓
            return 'BUY'
    
    # 检查是否接近阻力位(价格在阻力位下方1%以内)
    if resistance and current_price >= resistance['price'] * 0.99:
        if position > 0:  # 持有多单
            return 'SELL'
    
    return 'HOLD'

优化建议:这个策略比较粗糙。我实际使用时,会加上成交量确认和波动率过滤。比如,只有在成交量放大到5日均量1.5倍以上时,才执行交易。

七、常见误区与避坑

最后说说我踩过的坑,希望能帮你少走弯路。

  • 误区一:只看深度不看宽度。深度大但宽度窄,说明支撑集中但脆弱。一旦被突破,价格可能快速滑过。
  • 误区二:忽略时间因素。凌晨3点的挂单量和下午3点的挂单量,意义完全不同。流动性不同,挂单的意图也不同。
  • 误区三:过度依赖单一指标。订单簿只是工具之一,要结合K线、成交量、市场情绪一起看。

血的教训:我曾经在某个小币种上,看到买盘深度非常好,以为有强支撑。结果那是项目方自己挂的单,等散户接盘后瞬间撤单。那一次我亏了15%。从那以后,我每次都会检查挂单的账户分布,如果发现是单一账户挂的大单,我会格外小心。

好了,关于订单簿的深度与宽度,今天就聊到这里。记住一句话:挂单量是市场的语言,读懂它,你就能听懂市场在说什么。


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