
限价订单簿(LOB)基础#
限价订单簿(Limit Order Book, LOB)是电子化交易市场的核心数据结构,记录了所有未成交的限价买单和卖单。LOB 以价格优先级和时间优先级组织订单,为市场提供流动性并决定证券的即时可执行价格。
LOB 数据结构#
一个典型的 LOB 包含:
- 买价(Bid):按价格降序排列的买单队列
- 卖价(Ask):按价格升序排列的卖单队列
- 最优买价(Best Bid):最高买价
- 最优卖价(Best Ask):最低卖价
- 买卖价差(Spread):Best Ask - Best Bid
# LOB 数据结构示例
lob_snapshot = {
'timestamp': '2026-06-03 09:30:00.123456',
'bids': [
(199.95, 500), # (价格, 数量)
(199.90, 1200),
(199.85, 800)
],
'asks': [
(200.05, 300),
(200.10, 900),
(200.15, 1500)
]
}python订单类型与LOB动态#
限价订单(Limit Order)#
以指定价格或更好价格成交的订单,增加流动性,存放在LOB中。
市价订单(Market Order)#
以当前最优价格立即成交的订单,消耗流动性,从LOB中移除订单。
取消订单(Cancel Order)#
从LOB中撤销未成交的限价订单。
LOB动态示例#
时间 T1: LOB状态
Bids: (199.95, 500), (199.90, 1200)
Asks: (200.05, 300), (200.10, 900)
时间 T2: 市价买单 400股
→ 消耗 (200.05, 300),剩余100消耗 (200.10, 100)
新LOB:
Bids: (199.95, 500), (199.90, 1200)
Asks: (200.10, 800), (200.15, 1500)
时间 T3: 限价卖单 (200.00, 600)
→ 新增到Asks队列
新LOB:
Bids: (199.95, 500), (199.90, 1200)
Asks: (200.00, 600), (200.10, 800), (200.15, 1500)plaintext
LOB特征统计#
1. 深度(Depth)#
不同价格水平的累计订单量,反映流动性深度。
# 计算LOB深度
def calculate_depth(lob, levels=5):
bid_depth = sum(qty for _, qty in lob['bids'][:levels])
ask_depth = sum(qty for _, qty in lob['asks'][:levels])
return bid_depth, ask_depthpython2. 订单流不平衡(Order Flow Imbalance, OFI)#
买卖订单量的不平衡,预测短期价格方向。
OFI = 买单量 - 卖单量plaintext3. 成交率(Fill Rate)#
限价订单成交的概率,受订单价格和市场规模影响。
高频策略基于LOB#
1. 做市策略(Market Making)#
在买卖两侧挂单,赚取买卖价差,管理库存风险。
# 简化做市策略
def market_making_strategy(lob, inventory):
best_bid = lob['bids'][0][0]
best_ask = lob['asks'][0][0]
# 调整价差基于库存
spread_adjustment = 0.01 * (inventory / 1000)
my_bid = best_bid + 0.01 - spread_adjustment
my_ask = best_ask - 0.01 + spread_adjustment
return my_bid, my_askpython2. 订单流交易(Order Flow Trading)#
根据OFI预测价格方向,进行极短期方向性交易。
3. 统计套利(Statistical Arbitrage)#
利用相关证券的LOB差异,进行配对交易。
LOB数据获取与处理#
数据来源#
- 交易所直接Feed:最快速(纳斯达克TotalView, 纽交所OpenBook)
- 数据供应商:Refinitiv, Bloomberg, IEX Cloud
- 开源数据集:LOBSTER, FI2020
数据处理挑战#
- 数据量巨大:单只股票每天GB级LOB更新
- 时间戳精度:需要微秒或纳秒级精度
- 消息排序:确保事件顺序正确
# 使用LOBSTER数据示例
import pandas as pd
# 加载LOB数据
lob_data = pd.read_csv('LOB_20260603.csv', header=None)
lob_data.columns = ['time', 'type', 'id', 'price', 'qty']
# 重建LOB快照
def rebuild_lob(messages):
lob = {'bids': {}, 'asks': {}}
for _, msg in messages.iterrows():
if msg['type'] == 1: # 限价买单
lob['bids'][msg['price']] = lob['bids'].get(msg['price'], 0) + msg['qty']
elif msg['type'] == 2: # 限价卖单
lob['asks'][msg['price']] = lob['asks'].get(msg['price'], 0) + msg['qty']
elif msg['type'] == 3: # 取消买单
lob['bids'][msg['price']] -= msg['qty']
return lobpython风险管理#
库存风险#
高频做市积累单方面库存,需动态调整报价。
逆向选择#
信息不对称导致逆向选择,需检测大单预警。
技术风险#
系统延迟、订单错误、交易所连接中断。
总结#
限价订单簿微观结构是高频交易的基石。理解LOB的动态、特征和相关策略,是开发成功高频交易系统的前提。随着市场结构演化,LOB分析将继续是量化研究的热点领域。
参考文献#
- Gould, M. D., et al. (2013). “Limit order books.” Quantitative Finance, 13(11), 1709-1742.
- Abergel, F., et al. (2016). “Limit Order Books: A Systematic Approach.” Cambridge University Press.
- Cartea, Á., et al. (2015). “Algorithmic and High-Frequency Trading.” Cambridge University Press.