订单簿基础:限价订单簿(LOB)的结构、买卖盘口(Bid/Ask)、市场深度与价差

好,咱们今天聊点实在的。限价订单簿,英文叫 Limit Order Book,简称 LOB。这东西说白了,就是交易所用来记录所有买卖挂单的电子账本。我刚开始接触量化交易那会儿,觉得订单簿就是个高级点的 Excel 表格,后来被市场狠狠教育了几次,才明白这里面的门道有多深。

一、限价订单簿(LOB)的核心结构

先看一张图,这是我手绘的 LOB 结构示意。你把它想象成一个两层楼的超市货架:

限价订单簿(LOB)结构示意图 卖盘(Ask / Offer Side) Ask 5: 10.06 Ask 4: 10.05 Ask 3: 10.04 200股 500股 800股 累积: 200 累积: 700 累积: 1500 价差(Spread)= 10.03 - 10.02 = 0.01 买盘(Bid Side) Bid 1: 10.02 Bid 2: 10.01 Bid 3: 10.00 1000股 600股 300股 累积: 1000 累积: 1600 累积: 1900 卖单 买单 价差

这张图里,上半部分是卖盘,下半部分是买盘。每个价格档位都挂着对应的委托量。我个人习惯把 LOB 看作市场的「心电图」——它实时反映着买卖双方的博弈状态。

二、买卖盘口(Bid / Ask)—— 市场的呼吸

盘口,就是订单簿上最靠近成交价的那一层。买一(Bid 1)是当前愿意出的最高买入价,卖一(Ask 1)是当前愿意接受的最低卖出价。

举个例子。假设某股票当前 LOB 数据如下:

档位 买价(Bid) 买量 卖价(Ask) 卖量
1 10.02 1,000 10.03 200
2 10.01 600 10.04 500
3 10.00 300 10.05 800

这里,Bid 1 = 10.02,Ask 1 = 10.03。你想买入,要么直接吃卖一的 10.03 价格,要么挂 10.02 等着别人卖给你。我在做高频策略时,最关注的就是盘口的变化速度——如果 Bid 1 在 1 秒内被连续吃掉 3 次,说明买方力量很强,我会考虑跟单。

核心概念:盘口是市场的「第一道防线」。任何大资金想要快速成交,都必须先突破这道防线。你盯盘时,盘口的跳动频率比价格本身更能反映市场情绪。

三、市场深度 —— 你能吃下多少而不被察觉?

市场深度,说白了就是订单簿上各个价格档位的挂单总量。它回答一个关键问题:你想买 10 万股,会不会把价格打飞?

我举个例子。假设卖一到卖五的挂单如下:

  • 卖一 10.03:200 股
  • 卖二 10.04:500 股
  • 卖三 10.05:800 股
  • 卖四 10.06:1,200 股
  • 卖五 10.07:2,000 股

你想买入 3,000 股。如果直接市价买入,会发生什么?

# 模拟市价买入 3000 股的价格冲击
def simulate_market_buy(quantity, order_book):
    remaining = quantity
    total_cost = 0
    for price, volume in order_book:
        if remaining <= 0:
            break
        trade_vol = min(remaining, volume)
        total_cost += trade_vol * price
        remaining -= trade_vol
        print(f"吃掉 {price} 的 {trade_vol} 股,剩余 {remaining} 股")
    avg_price = total_cost / quantity
    print(f"平均成交价: {avg_price:.4f}")
    return avg_price

# 卖盘数据
ask_side = [(10.03, 200), (10.04, 500), (10.05, 800), (10.06, 1200), (10.07, 2000)]
simulate_market_buy(3000, ask_side)

输出结果:

吃掉 10.03 的 200 股,剩余 2800 股
吃掉 10.04 的 500 股,剩余 2300 股
吃掉 10.05 的 800 股,剩余 1500 股
吃掉 10.06 的 1200 股,剩余 300 股
吃掉 10.07 的 300 股,剩余 0 股
平均成交价: 10.0527

看到了吗?你原本以为成交价在 10.03 附近,结果实际均价到了 10.0527。这就是市场深度不足带来的滑点。我曾经在交易一个冷门 ETF 时吃过这个亏——看着盘口挺厚,一出手直接打穿了三个档位,瞬间亏掉几千块。

实战技巧:判断市场深度是否足够,可以看「订单簿斜率」。如果从卖一到卖五,每档挂单量递增平缓,说明深度好;如果突然在某档出现巨大挂单(比如卖三有 10 万股),那叫「墙」,往往是机构在护盘或压盘。

四、价差(Spread)—— 你的隐性成本

价差 = 卖一价 - 买一价。它是你每做一次「买入后立即卖出」所必须承担的损失。

回到上面的例子,价差 = 10.03 - 10.02 = 0.01 元。如果你在 10.02 买入,立刻在 10.03 卖出,扣除手续费后大概率是亏的。为什么?因为价差就是市场的「过路费」。

价差的大小受几个因素影响:

因素 价差变化 我的经验
流动性高(如茅台) 价差小,通常 1-2 个 tick 做高频的首选,滑点可控
流动性低(如小盘股) 价差大,可能 5-10 个 tick 挂限价单,别市价冲
开盘/收盘时段 价差扩大 2-3 倍 我一般避开前 5 分钟
重大消息发布时 价差瞬间拉大 要么撤单,要么改被动策略

避坑指南:我曾经在下午 2:55 分(收盘前 5 分钟)用市价单买入一只小盘股,当时价差只有 0.02,结果因为流动性骤降,实际成交价被拉高了 0.08。嗯,从那以后,我给自己定了个规矩:收盘前 10 分钟,只挂限价单,不市价交易。

五、订单簿的动态博弈 —— 你看到的未必是真的

这里我要说一个很多新手容易忽略的点:订单簿上的挂单,不一定是「真心想成交」的。

举个例子。你在卖一看到 10.03 挂了 10 万股,觉得卖压很大。但有没有可能,这是某个机构故意挂的「障眼法」?他其实想买入,但怕把价格推高,就先挂个大卖单吓唬人,等价格跌下来再偷偷吃货。这种行为在业内叫「冰山订单」或「虚假挂单」。

我自己的做法是:不只看挂单量,还要看「挂单持续时间」。如果一个卖单挂了 30 分钟纹丝不动,那大概率是虚的。真正想卖的人,通常会根据市场变化不断调整价格。

六、如何用代码实时监控 LOB?

这里给一段简单的 Python 代码,用于从交易所 API 获取 LOB 快照并计算关键指标:

import time
from some_exchange_api import get_orderbook  # 假设的API

def monitor_lob(symbol, interval=0.5):
    """每0.5秒监控一次订单簿"""
    while True:
        lob = get_orderbook(symbol)
        bid1_price = lob['bids'][0][0]
        bid1_vol = lob['bids'][0][1]
        ask1_price = lob['asks'][0][0]
        ask1_vol = lob['asks'][0][1]
        spread = ask1_price - bid1_price
        
        # 计算前5档总深度
        bid_depth = sum(v for _, v in lob['bids'][:5])
        ask_depth = sum(v for _, v in lob['asks'][:5])
        
        print(f"时间: {time.strftime('%H:%M:%S')} | "
              f"买一: {bid1_price} ({bid1_vol}) | "
              f"卖一: {ask1_price} ({ask1_vol}) | "
              f"价差: {spread} | "
              f"买深度: {bid_depth} | 卖深度: {ask_depth}")
        
        # 检测异常:价差突然扩大
        if spread > 0.05:  # 假设正常价差0.01-0.03
            print("⚠️ 价差异常扩大,注意风险!")
        
        time.sleep(interval)

# 启动监控
monitor_lob("AAPL", interval=0.5)

这段代码虽然简单,但我在实盘监控中一直在用。你想想看,如果价差突然从 0.01 跳到 0.05,说明市场出事了——要么是流动性瞬间枯竭,要么是有大消息要公布。这时候,我建议你先停下手头的策略,观察几秒再说。

七、总结一下今天的内容

订单簿这东西,说简单也简单,说复杂也复杂。简单的是结构——买盘、卖盘、价差、深度,就这四个要素。复杂的是背后的博弈——每一笔挂单背后都是一个人在思考、在决策。

我个人觉得,理解 LOB 的关键不在于记住那些术语,而在于培养一种「盘口感」。就像老司机听发动机声音就知道该不该换挡一样,你盯 LOB 盯久了,扫一眼盘口变化,就能大概猜出接下来 3 秒内价格会往哪走。

嗯,今天就聊到这儿。记住一句话:订单簿是市场的「底牌」,但底牌也会骗人。保持怀疑,持续验证,这才是量化交易者的生存之道。


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