2. 订单簿与市场微观结构:限价订单簿(L2/L3)、买卖价差、市场深度、订单流分析
做市商这行,说白了就是跟「订单簿」打交道。你每天盯着的那个不断跳动的数字墙,就是市场的脉搏。我个人习惯把订单簿比作「战场地图」——谁在哪个价位埋伏了多少兵力,一目了然。
今天我们就来拆解这张地图。我会结合自己踩过的坑,把L2/L3数据、价差、深度这些概念讲透。
2.1 限价订单簿:市场的骨架
限价订单簿,英文叫Limit Order Book,简称LOB。它记录了所有未成交的限价单。交易所靠它来撮合买卖双方。
订单簿分两层:
- L1数据:只有最优买卖价(Best Bid/Offer)。说白了就是「当前最高买价」和「当前最低卖价」。
- L2数据:展示多个价位的挂单量。比如买一到买十,卖一到卖十。这是做市商最常用的数据。
- L3数据:能看到每个价位的每一笔挂单。谁挂的、挂了多少、什么时候挂的。嗯,这个级别数据量巨大,一般只有高频玩家才用。
核心要点:L2告诉你「哪里有人」,L3告诉你「谁在那里」。做市商策略通常基于L2就够用了,但如果你做的是Tick级别的抢单策略,L3是必须的。
我在项目中遇到过一件事:有一次我们只用了L2数据做策略,结果发现某个价位突然出现大单,我们跟着撤单。后来复盘才发现,那是个「幽灵单」——挂上去一秒就撤了。如果当时有L3数据,就能看到这个单子来自同一个账户,明显是诱多行为。
2.2 买卖价差:做市商的饭碗
买卖价差,就是卖一价减去买一价。这个数字直接决定了你的利润空间。
举个例子:
买一:100.00 挂单量 1000股
卖一:100.05 挂单量 800股
价差 = 100.05 - 100.00 = 0.05
你作为做市商,如果能在100.00买入,在100.05卖出,每笔赚0.05。但别高兴太早——这是理论利润。实际中要考虑手续费、滑点、以及被对手方吃掉的风险。
我的经验:价差不是越小越好。价差太小,说明市场流动性好,但竞争也激烈。我曾经在某个山寨币上做市,价差只有0.01%,结果一天下来利润还不够手续费。后来我调整策略,专门做那些价差在0.1%-0.3%之间的品种,反而赚得稳。
价差的变化能告诉你很多信息:
- 价差突然扩大:可能是大新闻来了,流动性瞬间枯竭
- 价差持续收窄:说明有专业做市商在竞争,或者市场情绪趋于一致
- 价差不对称:比如买盘价差小、卖盘价差大,说明买方更积极
2.3 市场深度:你能吃下多少单
市场深度,就是订单簿上各个价位的挂单总量。它回答一个问题:如果你想买1000股,价格会滑多少?
深度通常用「深度图」来展示。我习惯用Python画一个简单的深度曲线:
import numpy as np
import matplotlib.pyplot as plt
# 模拟订单簿数据
prices = np.arange(99.0, 101.0, 0.05)
bid_volumes = [500, 800, 1200, 1500, 2000, 1800, 1300, 900, 600, 300]
ask_volumes = [200, 400, 700, 1100, 1600, 2000, 2400, 2800, 3200, 3600]
# 计算累计深度
cum_bid = np.cumsum(bid_volumes[::-1])[::-1]
cum_ask = np.cumsum(ask_volumes)
plt.figure(figsize=(10, 6))
plt.step(prices[:10], cum_bid, where='mid', label='买方深度', color='green')
plt.step(prices[10:], cum_ask, where='mid', label='卖方深度', color='red')
plt.axvline(x=prices[9], color='gray', linestyle='--', label='当前价格')
plt.xlabel('价格')
plt.ylabel('累计挂单量')
plt.title('市场深度曲线')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
这张图能直观告诉你:
- 曲线越陡峭,说明深度越浅,大单容易造成价格剧烈波动
- 曲线越平缓,说明深度越好,大单可以被消化
- 买卖两侧深度不对称,说明市场存在方向性偏好
避坑指南:我曾经以为深度图上的挂单量是「真实」的。后来发现,很多高频交易者会在关键价位挂「冰山单」——只显示一部分,实际挂单量可能是显示的5倍。所以,别完全相信你看到的深度。
2.4 订单流分析:读懂市场的语言
订单簿是静态的,订单流是动态的。订单流分析,就是研究每一笔成交和挂单的变化,从中找出规律。
我常用的几个指标:
| 指标 | 含义 | 我的用法 |
|---|---|---|
| 成交笔数 | 单位时间内的成交次数 | 突然暴增说明有大户在行动 |
| 主动买/卖量 | 吃单方是买方还是卖方 | 主动买量 > 主动卖量,短期看涨 |
| 订单撤销率 | 挂单后未成交就撤单的比例 | 撤单率高说明有人在试探市场 |
| 价差恢复时间 | 大单成交后价差回到正常水平的时间 | 恢复越快,流动性越好 |
举个例子,我写过一段简单的订单流分析代码:
def analyze_order_flow(trades):
"""
分析订单流,返回主动买卖比例
trades: list of dict, 每笔成交包含 price, volume, side (buy/sell)
"""
buy_volume = sum(t['volume'] for t in trades if t['side'] == 'buy')
sell_volume = sum(t['volume'] for t in trades if t['side'] == 'sell')
total = buy_volume + sell_volume
if total == 0:
return {'buy_ratio': 0.5, 'sell_ratio': 0.5}
return {
'buy_ratio': buy_volume / total,
'sell_ratio': sell_volume / total,
'net_flow': buy_volume - sell_volume
}
# 使用示例
sample_trades = [
{'price': 100.0, 'volume': 100, 'side': 'buy'},
{'price': 100.1, 'volume': 200, 'side': 'sell'},
{'price': 100.0, 'volume': 150, 'side': 'buy'},
]
result = analyze_order_flow(sample_trades)
print(f"主动买入比例: {result['buy_ratio']:.2%}")
你想想看,如果主动买入比例持续高于60%,说明买方在抢筹。这时候你作为做市商,应该适当提高卖单价格,别傻乎乎地按原价卖。
2.5 知识体系总览
下面这张图,是我自己总结的订单簿与微观结构的知识框架。建议你保存下来,每次做策略前看一眼:
最后说一句:订单簿分析不是玄学,是统计学。别试图预测每一笔成交,而是找概率上的优势。我刚开始做的时候,总想抓住每一个Tick的波动,结果亏得很惨。后来学会看大周期、看整体深度分布,才慢慢稳定下来。
嗯,这一章的内容就到这里。记住:订单簿是你的眼睛,订单流是你的耳朵。两者结合,才能听清市场在说什么。