订单簿基础:限价订单簿结构、买卖盘口深度、价差与市场深度、订单簿的动态变化
大家好,我是你们的讲师。今天咱们来聊聊订单簿——这个所有量化交易者每天都要面对的东西。
说实话,我刚入行那会儿,觉得订单簿不就是一堆买单卖单嘛,有啥好看的?直到有一次,我因为没看懂盘口深度的微妙变化,被一个做市商狠狠收割了一波。嗯,从那以后,我再也不敢小看这个看似简单的数据结构了。
一、限价订单簿的结构
限价订单簿,英文叫 Limit Order Book,简称 LOB。说白了,它就是交易所用来记录所有未成交限价订单的电子账本。
我个人习惯把订单簿想象成一个「价格-数量」的二维表格。价格是纵轴,数量是横轴。买单在左边,卖单在右边。
核心结构:
- 买盘(Bid Side):按价格从高到低排列。最高买价叫 Bid Price。
- 卖盘(Ask Side):按价格从低到高排列。最低卖价叫 Ask Price。
- 价差(Spread):Ask Price - Bid Price,就是买卖之间的缝隙。
举个例子,假设某股票当前订单簿长这样:
| 买价(Bid) | 买量 | 卖价(Ask) | 卖量 |
|---|---|---|---|
| 10.01 | 200 | 10.03 | 150 |
| 10.00 | 500 | 10.04 | 300 |
| 9.99 | 800 | 10.05 | 600 |
这里,Bid Price = 10.01,Ask Price = 10.03,价差 = 0.02。你想想看,如果你现在想立刻买入,就得吃掉卖一价10.03的150股,再往上吃10.04的300股……这就是所谓的「吃单」。
二、买卖盘口深度
盘口深度,很多人只看第一档,也就是买一卖一。但我告诉你,这远远不够。
我在项目中遇到过好几次这样的情况:买一卖一看起来价差很小,流动性很好,但一旦你下单稍微大一点,价格就滑得不成样子。为什么?因为深层盘口是空的。
盘口深度通常用「累积深度」来衡量。比如,你想知道在10.00以上有多少买单,就把10.01、10.02……一直到某个价格的所有买单数量加起来。
我的经验: 做高频交易时,我至少看5档深度。做日内趋势交易,我会看10档甚至更多。别只看表面,深层盘口才是真正的「隐藏流动性」所在。
这里有个小技巧:你可以用Python快速计算累积深度。代码很简单:
def cumulative_depth(price_levels, side='bid'):
"""
计算累积深度
price_levels: [(价格, 数量), ...]
side: 'bid' 或 'ask'
"""
sorted_levels = sorted(price_levels,
key=lambda x: x[0],
reverse=(side == 'bid'))
cum_depth = []
total = 0
for price, qty in sorted_levels:
total += qty
cum_depth.append((price, total))
return cum_depth
# 示例
bid_levels = [(10.01, 200), (10.00, 500), (9.99, 800)]
print(cumulative_depth(bid_levels, 'bid'))
# 输出: [(10.01, 200), (10.00, 700), (9.99, 1500)]
你看,在10.00这个价位,累积买单已经达到700股了。这个数字比单纯的单档数量更有参考价值。
三、价差与市场深度
价差和深度,这两个指标是判断市场流动性的关键。
- 价差小 + 深度大:流动性好,适合大单交易。比如主流币种、大盘蓝筹股。
- 价差大 + 深度小:流动性差,小心滑点。比如一些小市值股票、冷门币种。
我曾经吃过一次亏:看到一个股票价差只有0.01,觉得流动性不错,直接下了个大单。结果买一只有100股,我硬是吃了10档才成交完,滑点损失惨重。后来我才明白,价差小不代表深度大,这两者要结合起来看。
避坑指南: 千万别只看价差!价差小但深度浅的市场,比价差大但深度深的市场更危险。因为前者会让你产生「流动性好」的错觉,实际上一口就吃穿了。
衡量市场深度,我常用一个指标叫「订单簿不平衡度」(Order Book Imbalance):
def order_book_imbalance(bid_volume, ask_volume):
"""
计算订单簿不平衡度
正值表示买方力量强,负值表示卖方力量强
"""
total = bid_volume + ask_volume
if total == 0:
return 0
return (bid_volume - ask_volume) / total
# 示例
bid_vol = 1500 # 买盘总深度
ask_vol = 1000 # 卖盘总深度
print(f"不平衡度: {order_book_imbalance(bid_vol, ask_vol):.2f}")
# 输出: 不平衡度: 0.20
这个值大于0,说明买方力量更强,价格有上涨倾向。反之亦然。当然,这不是绝对的,但至少给你一个参考。
四、订单簿的动态变化
订单簿不是静止的,它每时每刻都在变化。我个人认为,理解动态变化比理解静态结构更重要。
订单簿的变化主要有三种类型:
- 新订单进入:有人挂了新的限价单,订单簿上多了一行。
- 订单被撤销:有人撤单了,订单簿上少了一行。
- 订单被成交:有人吃单了,订单簿上的数量减少或整行消失。
你想想看,如果有人在短时间内频繁挂单又撤单,这说明什么?很可能是在「试盘」——测试市场的深度和反应速度。我在做市商团队时,就经常用这种手法来探测对手的底牌。
下面这张图展示了订单簿的动态变化过程:
你看,从T1到T3,订单簿发生了两次变化。第一次是新的买单进入,第二次是部分成交导致卖一档消失。这些变化背后,都隐藏着市场参与者的意图。
实战技巧: 我习惯用Python实时监控订单簿的变化频率。如果某个价位在1秒内被反复挂单和撤单超过3次,我就会警惕——这很可能是有人在「挂假单」诱导市场。
最后,我想说一句:订单簿是市场的「心电图」。你读懂了它,就能感知到市场的呼吸和脉搏。别只盯着K线,多看看订单簿,你会发现一个全新的世界。
公众号:蓝海资料掘金营,微信deep3321