订单簿的深度与宽度:如何解读挂单量分布,识别支撑与阻力
做量化交易这些年,我越来越觉得订单簿就像一张战场地图。深度和宽度,说白了就是敌我双方的兵力部署。你想想看,如果连对手的兵力分布都看不懂,这仗怎么打?
今天我们就来聊聊,怎么从订单簿的挂单量分布里,找到真正的支撑位和阻力位。
一、深度 vs 宽度:两个核心维度
先搞清楚概念。我个人习惯把订单簿拆成两个维度来看:
- 深度(Depth):某个价格区间内的挂单总量。比如买一价附近挂了1000手,买二价附近挂了2000手,这就是深度。
- 宽度(Width):挂单覆盖的价格范围。从买一价到买十价,跨度有多大,这就是宽度。
举个例子你就明白了。假设某股票当前价格100元:
| 档位 | 买盘(手) | 卖盘(手) |
|---|---|---|
| 买一 | 500 | - |
| 买二 | 1200 | - |
| 买三 | 800 | - |
| 卖一 | - | 600 |
| 卖二 | - | 1500 |
| 卖三 | - | 900 |
买盘深度 = 500 + 1200 + 800 = 2500手,宽度覆盖了3个档位。卖盘同理。
核心观点:深度决定支撑/阻力的强度,宽度决定支撑/阻力的范围。
二、如何识别真正的支撑位
我在项目中遇到过不少新手,看到买一挂了500手就觉得是支撑。其实这远远不够。
真正的支撑位,需要满足三个条件:
- 挂单量显著高于相邻档位。比如买一只有200手,买二突然堆了2000手,那买二才是真正的支撑。
- 挂单量持续稳定。如果买二的2000手是瞬间挂上去又撤掉的,那就是假支撑。
- 价格多次在该位置反弹。历史回测中,价格跌到这个位置就弹起来,说明市场认可这个价位。
嗯,这里要注意。支撑位不是一成不变的。随着订单簿的更新,支撑位也会移动。我习惯用滑动窗口来动态计算:
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