halo 的技术博客

返回

什么是限价订单簿(LOB)?#

限价订单簿(Limit Order Book, LOB)是交易所最核心的数据结构,记录了所有未成交的限价买卖订单。对于高频交易(HFT)而言,LOB是最直接的市场微观结构信息源。

LOB订单簿结构示意

一个典型的LOB包含:

  • 买一侧(Bid Side):按价格降序排列的所有买入限价单
  • 卖一侧(Ask Side):按价格升序排列的所有卖出限价单
  • 最优买卖价(BBO):最高买价(Best Bid)和最低卖价(Best Ask)
  • 买卖价差(Spread):Best Ask - Best Bid

LOB数据的关键特征#

1. 深度(Depth)分析#

LOB深度指的是在各个价格档位上的订单数量。深度分析可以帮助判断:

  • 流动性质量:深度越大,大单冲击成本越低
  • 支撑/阻力位:大量订单聚集的价格区域
  • 信息不对称:异常深度变化可能预示内幕交易
# 计算LOB深度的Python示例
import pandas as pd

def calculate_lob_depth(lob_df, levels=5):
    """计算LOB前N档深度"""
    bid_depth = lob_df['bid_size'].iloc[:levels].sum()
    ask_depth = lob_df['ask_size'].iloc[:levels].sum()
    return bid_depth, ask_depth

# 计算订单簿不平衡指标
def lob_imbalance(lob_df, levels=5):
    """LOB不平衡度:衡量买卖压力"""
    bid_vol = lob_df['bid_size'].iloc[:levels].sum()
    ask_vol = lob_df['ask_size'].iloc[:levels].sum()
    return (bid_vol - ask_vol) / (bid_vol + ask_vol)
python

2. 订单流与LOB动态#

LOB是动态变化的,主要事件包括:

  • 新订单(New Order):追加到LOB相应价格档位
  • 取消订单(Cancel):从LOB中移除
  • 成交(Trade):从LOB中删除成交部分
  • 改单(Modify):改变价格或数量

LOB动态变化过程

基于LOB的量化策略#

策略1:订单簿不平衡交易(Order Book Imbalance)#

当LOB不平衡度超过阈值时,预测短期价格变动方向:

# LOB不平衡策略示例
class OBImbalanceStrategy:
    def __init__(self, threshold=0.3, levels=5):
        self.threshold = threshold
        self.levels = levels
        
    def generate_signal(self, lob_snapshot):
        imbalance = lob_imbalance(lob_snapshot, self.levels)
        
        if imbalance > self.threshold:
            return "BUY"  # 买压强势,做多
        elif imbalance < -self.threshold:
            return "SELL"  # 卖压强势,做空
        else:
            return "HOLD"
python

策略2:流动性提供策略(Market Making)#

在LOB两侧挂单,赚取买卖价差:

# 简化版做市商策略
class SimpleMarketMaker:
    def __init__(self, spread_target=2):
        self.spread_target = spread_target  # 目标价差( ticks)
        
    def quote(self, lob):
        best_bid = lob['bid_price'].iloc[0]
        best_ask = lob['ask_price'].iloc[0]
        mid_price = (best_bid + best_ask) / 2
        
        # 在中间价附近挂双边单
        my_bid = mid_price - self.spread_target / 2
        my_ask = mid_price + self.spread_target / 2
        
        return {'bid': my_bid, 'ask': my_ask}
python

策略3:冰山订单检测(Iceberg Detection)#

冰山订单是大单拆分成多个小单隐藏真实意图。通过LOB变动模式可以检测:

def detect_iceberg(lob_history, threshold=0.8):
    """检测可能的冰山订单"""
    signals = []
    
    for i in range(1, len(lob_history)):
        prev = lob_history[i-1]
        curr = lob_history[i]
        
        # 如果价格档位保持不变但数量频繁补充
        for level in range(5):
            if (prev['bid_price'].iloc[level] == curr['bid_price'].iloc[level] and
                curr['bid_size'].iloc[level] > prev['bid_size'].iloc[level] * threshold):
                signals.append(('ICEBERG_BUY', curr['bid_price'].iloc[level]))
                
    return signals
python

LOB数据的获取与处理#

数据来源#

  1. 交易所直连:最快(微秒级),但成本高
  2. 数据供应商:Refinitiv、CME MDP等
  3. 开源数据:LOBSTER、NASDAQ ITCH等

数据格式示例#

实战注意事项#

1. 延迟至关重要#

HFT策略对延迟极度敏感:

  • 网络延迟:直连交易所(Colocation)
  • 处理延迟:C++/Rust实现,避免Python循环
  • 时间戳精度:需要纳秒级精度

2. 数据质量控制#

LOB数据常见问题:

  • 丢包:导致LOB状态不一致
  • 乱序:需要序列号重新排序
  • 重复:去重逻辑必不可少

3. 回测挑战#

LOB策略回测难点:

  • 幸存者偏差:只看到成交订单,看不到取消的
  • 前视偏差:用未来信息填充LOB
  • 市场冲击:大单会改变LOB本身

总结#

限价订单簿(LOB)是高频交易的基石数据结构。通过分析LOB深度、不平衡度和动态变化,可以构建多种量化策略。但HFT策略对技术基础设施要求极高,需要:

  • 超低延迟的系统架构
  • 高质量的LOB数据
  • 严谨的回测框架

对于普通量化交易者,可以从LOB数据中提取中低频特征(如买卖压力、深度变化率),应用到自己的策略中。

参考资料#

  1. Market Microstructure Theory by Thierry Foucault
  2. LOBSTER Data: https://lobsterdata.com
  3. High-Frequency Trading by Irene Aldridge
  4. Nasdaq TotalView-ITCH协议文档
高频交易核心:限价订单簿(LOB)深度解析与量化策略
https://blog.halo26812.eu.org/blog/2026-06-02-hft-order-book-analysis
Author halo
Published at 2026年6月2日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨