订单簿与限价订单簿(LOB)深度解析

大家好,我是你们的讲师。今天我们来聊聊订单簿——这个在跨市场套利中绕不开的核心数据结构。说实话,我刚开始做量化那会儿,觉得订单簿不就是一堆买单卖单嘛,有啥好研究的?直到有一次我在做股指期货和ETF的套利时,因为没吃透订单簿的微观结构,差点被一波流动性黑洞给吞了。嗯,从那以后,我对LOB的态度就彻底变了。

一、订单簿结构:买卖双方的角力场

限价订单簿,英文叫Limit Order Book,简称LOB。说白了,它就是一张实时更新的表格,记录了市场上所有未成交的限价订单。每一笔订单都包含两个关键信息:价格和数量。

我习惯把订单簿想象成一个「价格-数量阶梯」。买方在左边,从低到高排列;卖方在右边,从高到低排列。中间那个价差,就是买卖双方的心理博弈区。

核心结构:

  • 买盘(Bid Side):按价格从高到低排列,最高买价叫Bid Price
  • 卖盘(Ask Side):按价格从低到高排列,最低卖价叫Ask Price
  • 价差(Spread):Ask Price - Bid Price,流动性越好的品种,价差越小

举个例子,假设某股票当前订单簿长这样:

买价 买量 卖价 卖量
10.01 200 10.02 150
10.00 500 10.03 300
9.99 800 10.04 600

你看,买方最高出价10.01,卖方最低要价10.02,价差只有1分钱。这说明流动性不错。我在做高频套利时,最怕的就是价差突然拉大——那往往意味着有人在撤单,或者有大单在砸盘。

二、价格-数量阶梯:深度与厚度的可视化

光看第一档是不够的。我们需要把整个订单簿的「阶梯」画出来,才能判断市场的真实深度。

我个人习惯用「累积深度图」来观察。就是把买盘从高到低累加,卖盘从低到高累加,然后画成两条曲线。你想想看,如果买盘在10.00这个价位上有1万手,但到了9.99只有100手,那说明什么?说明10.00是个重要的支撑位,一旦跌破,下面就是悬崖。

我的经验:在跨市场套利中,我经常对比两个市场的订单簿阶梯。如果A市场的买盘阶梯比B市场厚实很多,那套利机会出现时,我会优先在A市场建仓。因为厚实的阶梯意味着滑点更小。

这里有个避坑指南:我曾经在某个小品种上看到买盘阶梯很漂亮,结果一成交才发现,那些订单全是「幽灵单」——挂上去就撤,根本不给成交机会。所以,看阶梯的时候,一定要结合订单的「存活时间」来判断真假。

三、订单簿快照与增量更新

订单簿的数据有两种获取方式:快照和增量更新。

  • 快照(Snapshot):某一时刻订单簿的完整状态。就像拍了一张照片,所有档位的价格和数量都在里面。
  • 增量更新(Incremental Update):只告诉你「变了什么」。比如「10.02价位上新增了100手卖单」,或者「10.01价位上的200手买单被撤了」。

为什么要有两种?因为快照数据量大,不适合高频推送。而增量更新数据量小,可以实时传输。我刚开始做套利系统时,傻乎乎地只订阅快照,结果每次刷新都要等几百毫秒——这在套利里简直是灾难。

注意:增量更新虽然快,但有个致命问题——如果丢了一条消息,你的本地订单簿就和交易所对不上了。我建议的做法是:定期(比如每10秒)拉一次快照做「校准」,平时用增量更新保持实时性。

下面是我常用的增量更新处理代码片段:

class OrderBook:
    def __init__(self):
        self.bids = {}  # 价格 -> 数量
        self.asks = {}
    
    def apply_update(self, update):
        # update格式: {'side': 'bid', 'price': 10.01, 'size': 200, 'type': 'add'}
        if update['type'] == 'add':
            self.bids[update['price']] = update['size']
        elif update['type'] == 'delete':
            del self.bids[update['price']]
        elif update['type'] == 'modify':
            self.bids[update['price']] = update['size']
    
    def apply_snapshot(self, snapshot):
        self.bids = {item['price']: item['size'] for item in snapshot['bids']}
        self.asks = {item['price']: item['size'] for item in snapshot['asks']}

四、LOB在套利中的角色

订单簿在跨市场套利中扮演什么角色?我总结了三个核心作用:

  1. 发现套利机会:通过对比两个市场的订单簿,找到价差偏离正常范围的位置。比如A市场买一价10.01,B市场卖一价10.00,理论上存在1分钱的套利空间。但别急着下单——你得看订单簿深度,确认这1分钱能不能吃到。
  2. 评估执行成本:套利不是看理论价差,而是看「实际能成交多少」。如果A市场买一只有100手,而你想买1000手,那实际成交价会滑到买二、买三。订单簿能帮你算出这个滑点成本。
  3. 监控市场冲击:我在做跨市场套利时,最怕的就是「一边成交了,另一边订单簿变了」。比如你在A市场买入后,B市场的卖单突然撤光了。这时候你的仓位就暴露了。订单簿的实时变化能帮你提前感知这种风险。

一句话总结:订单簿就是市场的「心电图」。读懂了它,你就能在套利中比别人快半步。这半步,往往就是盈利和亏损的分界线。

五、知识体系结构图

下面我用一张SVG图来总结本章的核心逻辑:

订单簿(LOB)知识体系 限价订单簿 LOB 订单簿结构 价格-数量阶梯 快照与增量更新 买盘/卖盘 价差分析 累积深度 流动性评估 实时同步 校准机制 套利应用:发现机会 + 评估成本 + 监控风险

这张图把订单簿的核心要素串起来了。你从中间开始看,左边是结构,中间是阶梯,右边是更新机制。最下面就是它们在套利中的实际应用。我个人觉得,把这张图印在脑子里,做套利时思路会清晰很多。

一个小建议:刚开始学LOB的时候,别急着写代码。先找个交易所的Level 2数据,盯着订单簿看半小时。看它怎么变,看大单怎么挂,看价差怎么跳。这种「盘感」是任何代码都替代不了的。

好了,关于订单簿的深度解析就到这里。记住,订单簿不是静态的表格,它是市场参与者用真金白银投票的结果。读懂了它,你就读懂了市场的情绪。


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