3. 订单簿微观结构:限价订单簿(L2/L3)、盘口深度、买卖价差、市场冲击成本
做市商这行干久了,你会发现一个道理:价格波动是表象,订单簿才是真相。我刚开始做量化的时候,整天盯着K线图看,觉得涨涨跌跌挺有规律。后来被市场狠狠教育了几次,才明白——真正决定价格的,是那一层一层挂着的限价单。
今天咱们就来扒一扒订单簿的微观结构。说白了,就是看看市场这个「大水池」里,水到底有多深,暗流又在哪里。
3.1 限价订单簿:市场的「实时地图」
限价订单簿(LOB),你可以把它想象成一个双向拍卖市场。一边是买家,一边是卖家,中间是成交价。
我个人习惯把L2和L3分开看:
- L2数据:聚合后的盘口。比如「买一价100.00,数量500股;买二价99.99,数量1200股...」。它告诉你每个价位上有多少单子,但不知道这些单子是谁挂的。
- L3数据:每一笔订单的原始信息。谁挂的?什么时候挂的?ID是什么?这就像拿到了市场的「户籍档案」。
我在做高频做市的时候,L3数据是必须的。为什么?因为你能看到订单的撤销和修改行为。有人挂了一个大单,3秒后又撤了——这可能是试探,也可能是陷阱。L2数据里你只能看到「哦,这个价位有单子」,但L3能告诉你「这个单子活了多久」。
3.2 盘口深度:别被表面价格骗了
盘口深度,就是每个价位上的挂单量。很多人只看买卖价差,觉得差1个tick就是流动性好。其实不然。
举个例子:
# 模拟盘口深度数据
order_book = {
'asks': [ # 卖盘
(100.00, 100), # 卖一价100.00,只有100股
(100.01, 5000), # 卖二价100.01,有5000股
(100.02, 200),
],
'bids': [ # 买盘
(99.99, 300), # 买一价99.99,300股
(99.98, 10000), # 买二价99.98,10000股
(99.97, 150),
]
}
def calculate_market_depth(book, levels=5):
"""计算前N档的累计深度"""
ask_depth = sum(qty for price, qty in book['asks'][:levels])
bid_depth = sum(qty for price, qty in book['bids'][:levels])
return ask_depth, bid_depth
ask_d, bid_d = calculate_market_depth(order_book, 2)
print(f"前2档卖盘深度: {ask_d}股")
print(f"前2档买盘深度: {bid_d}股")
你看,卖一只有100股,但卖二有5000股。如果你只看卖一价,觉得「哇,价差才0.01,流动性真好」。但真要买1000股,你得吃掉卖一,再吃掉卖二的一部分——成交均价就变成了100.009,比卖一贵了0.9%。
这就是深度的重要性。我见过不少新手做市商,只看价差不看深度,结果被大单一口吞掉,滑点吃到哭。
3.3 买卖价差:做市商的「面包和黄油」
买卖价差(Bid-Ask Spread),就是买一价和卖一价之间的差距。这是做市商的主要收入来源——你低价买,高价卖,赚的就是这个差价。
但价差不是固定的。它受很多因素影响:
| 因素 | 影响方向 | 我遇到过的案例 |
|---|---|---|
| 波动率 | 波动越大,价差越宽 | 财报发布前,价差能扩大3-5倍 |
| 成交量 | 成交量越大,价差越窄 | BTC在亚洲时段价差明显比欧美时段宽 |
| 时间 | 开盘/收盘时段价差宽 | A股开盘前5分钟,价差经常是平时的2倍 |
| 订单不平衡 | 买卖单失衡时价差扩大 | 某次大额卖单涌入,价差瞬间从0.01跳到0.05 |
我个人习惯用相对价差来衡量,而不是绝对价差。比如一个100块的股票,价差0.01,相对价差是0.01%;一个1块的币,价差0.01,相对价差就是1%。后者明显更难做市。
3.4 市场冲击成本:大单的「隐形杀手」
市场冲击成本,就是你下单时「推动」价格的那部分成本。它不像手续费那样明码标价,但往往比手续费贵得多。
我举个例子你就明白了:
假设当前盘口是这样的:
卖一: 100.00 1000股
卖二: 100.01 2000股
卖三: 100.02 3000股
你想买3000股。如果直接市价买入:
- 吃掉卖一1000股,成交价100.00
- 吃掉卖二2000股,成交价100.01
- 成交均价 = (100.00×1000 + 100.01×2000) / 3000 = 100.0067
- 相比卖一价,你多付了0.0067/股,这就是冲击成本
冲击成本 = 成交均价 - 最优卖价(或最优买价 - 成交均价)
我曾经踩过一个坑:在流动性差的币对上做市,以为价差小就安全。结果一个大单进来,直接把价格推了2%,我的库存瞬间浮亏。从那以后,我每次报价前都会算一下「每档深度占比」——就是每个价位的挂单量占总深度的比例。如果前3档深度占比超过80%,说明流动性集中,风险相对可控;如果前3档只占30%,那后面可能藏着大单,得小心。
3.5 知识体系总览
下面这张图,是我自己梳理的订单簿微观结构知识框架。做市商策略的每一步,都离不开这些基础概念。
3.6 实战中的微观结构应用
说了这么多理论,咱们来点实际的。做市商策略里,订单簿微观结构怎么用?
- 报价频率调整:当盘口深度突然变薄(比如前3档深度下降30%以上),我会降低报价频率,避免被「钓鱼」。
- 价差动态设置:根据相对价差和波动率,动态调整报价价差。波动率上升时,价差放宽;流动性好时,价差收窄。
- 大单处理:如果检测到盘口出现「冰山订单」(挂单量远大于显示量),我会暂停报价,等冰山融化再说。
- 库存管理:结合市场冲击成本模型,计算最优的报价量和报价价格,避免库存过度暴露。
嗯,这一章的内容就到这儿。记住,数据是死的,但市场是活的。别死记硬背那些指标,多去观察、多去复盘。你会发现,订单簿里藏着很多市场的「小秘密」。