订单簿基础:限价订单簿结构、买卖盘口深度、价差与市场深度、订单簿的动态变化

大家好,我是你们的讲师。今天咱们来聊聊订单簿——这个所有量化交易者每天都要面对的东西。

说实话,我刚入行那会儿,觉得订单簿不就是一堆买单卖单嘛,有啥好看的?直到有一次,我因为没看懂盘口深度的微妙变化,被一个做市商狠狠收割了一波。嗯,从那以后,我再也不敢小看这个看似简单的数据结构了。

一、限价订单簿的结构

限价订单簿,英文叫 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,说明买方力量更强,价格有上涨倾向。反之亦然。当然,这不是绝对的,但至少给你一个参考。

四、订单簿的动态变化

订单簿不是静止的,它每时每刻都在变化。我个人认为,理解动态变化比理解静态结构更重要。

订单簿的变化主要有三种类型:

  1. 新订单进入:有人挂了新的限价单,订单簿上多了一行。
  2. 订单被撤销:有人撤单了,订单簿上少了一行。
  3. 订单被成交:有人吃单了,订单簿上的数量减少或整行消失。

你想想看,如果有人在短时间内频繁挂单又撤单,这说明什么?很可能是在「试盘」——测试市场的深度和反应速度。我在做市商团队时,就经常用这种手法来探测对手的底牌。

下面这张图展示了订单簿的动态变化过程:

订单簿动态变化示意图 时间 → T1: 初始状态 买盘 10.01 200 10.00 500 9.99 800 卖盘 10.03 150 10.04 300 10.05 600 T2: 新买单进入 买盘 10.02 300 ← 新 10.01 200 10.00 500 卖盘 10.03 150 10.04 300 10.05 600 T3: 成交后 买盘 10.02 100 10.01 200 10.00 500 卖盘 10.04 200 10.05 600 T1: 初始订单簿 T2: 新买单10.02进入,买一变为10.02 T3: 部分成交,卖一10.03消失,卖二变为10.04

你看,从T1到T3,订单簿发生了两次变化。第一次是新的买单进入,第二次是部分成交导致卖一档消失。这些变化背后,都隐藏着市场参与者的意图。

实战技巧: 我习惯用Python实时监控订单簿的变化频率。如果某个价位在1秒内被反复挂单和撤单超过3次,我就会警惕——这很可能是有人在「挂假单」诱导市场。

最后,我想说一句:订单簿是市场的「心电图」。你读懂了它,就能感知到市场的呼吸和脉搏。别只盯着K线,多看看订单簿,你会发现一个全新的世界。


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