2、订单簿微观结构:限价订单簿(L2/L3)、订单簿动态变化、市场深度与弹性
各位好,我是老张。今天咱们聊聊订单簿的微观结构。说实话,这玩意儿是我入行时啃得最久的一块硬骨头。你想想看,整个市场的价格发现机制,说白了就浓缩在这个小小的订单簿里。我当年在自营团队做高频策略时,每天盯着L2数据看十几个小时,眼睛都快瞎了,但也正是那段经历让我真正理解了市场的脉搏。
2.1 限价订单簿:L2与L3的差异
先搞清楚基本概念。限价订单簿,英文叫Limit Order Book,简称LOB。它是交易所用来记录所有未成交限价订单的电子账本。
L2数据,也就是Level 2,通常展示的是每个价位的聚合挂单量。比如买一价100.00元挂了500手,买二价99.99元挂了1200手。你看到的是总量,但不知道这些单子是谁挂的,也不知道里面有多少笔小单。
L3数据,Level 3,那就细多了。它展示的是每一笔独立的订单。同样是买一价100.00元,L3会告诉你:这里有3笔订单,分别是200手、150手、150手,每笔订单还有自己的时间戳和订单ID。
核心区别一句话:L2是汇总视图,L3是明细视图。做市商和量化机构通常需要L3数据才能做精细的订单流分析。
我在项目中遇到过一件事。有一次我们做股指期货的套利策略,用的L2数据。结果发现某个价位突然出现大单,我们以为是机构在吃货,赶紧跟进去。后来拿到L3数据复盘才发现,那其实是三笔小单在同一时间戳下被聚合显示出来的。说白了,L2数据会给你一种「大单压境」的错觉,而L3才能还原真相。
2.2 订单簿的动态变化:从下单到成交
订单簿不是静止的。它每时每刻都在变化。我习惯把订单簿的动态变化归纳为四种基本操作:
- 限价单进入:新订单进入订单簿,挂在某个价位上。如果是买盘,就挂在买一侧;卖盘同理。
- 限价单撤销:挂单者主动撤单。这在高频交易中非常常见,很多订单挂上去几毫秒就撤了。
- 限价单成交:当市价单或可成交的限价单进入时,与订单簿上的对手单撮合。
- 订单修改:修改价格或数量。实际上,交易所通常把修改操作拆成「撤单+新挂单」两步。
为什么会这样?因为订单簿本质上是一个排队系统。价格优先,时间优先。你挂的价格好,你就排前面;价格一样,先来后到。
一个小技巧:我个人习惯用「订单簿事件流」来理解市场。把每一笔订单的进入、撤销、成交都当作一个事件。当你把这些事件串起来,就能看到市场微观层面的博弈。我曾经用这种方法抓到了一个做市商的撤单规律,帮团队优化了挂单策略。
来看一个简单的Python示例,模拟订单簿的更新过程:
class OrderBook:
def __init__(self):
self.bids = {} # 买盘,key=价格,value=数量
self.asks = {} # 卖盘
def add_order(self, side, price, quantity):
if side == 'buy':
self.bids[price] = self.bids.get(price, 0) + quantity
else:
self.asks[price] = self.asks.get(price, 0) + quantity
def remove_order(self, side, price, quantity):
if side == 'buy':
self.bids[price] -= quantity
if self.bids[price] <= 0:
del self.bids[price]
else:
self.asks[price] -= quantity
if self.asks[price] <= 0:
del self.asks[price]
def get_top(self, n=5):
# 获取前n档买卖盘口
sorted_bids = sorted(self.bids.items(), reverse=True)[:n]
sorted_asks = sorted(self.asks.items())[:n]
return sorted_bids, sorted_asks
嗯,这里要注意。实际生产环境中,订单簿的更新速度是微秒级的。你写的代码必须足够快。我见过有人用Python dict做订单簿,结果延迟飙到几百微秒,直接被做市商对手盘收割。
2.3 市场深度:你能吃下多少单子?
市场深度,Market Depth,衡量的是在某个价格区间内,市场能吸收多少成交量而不引起价格大幅变动。
深度越大,说明市场流动性越好。你想想看,如果你要买入10万股,而买一价只有1000股挂着,那你只能一路往上吃,把价格推高。这就是深度不足的表现。
我习惯用深度图来直观展示。下面这张SVG图展示了典型的订单簿深度结构:
从这张图你能看到,买一和卖一之间的差距就是价差。价差越小,说明市场越活跃。深度越厚,说明大单冲击成本越低。
注意:市场深度是动态变化的。我曾经在某个流动性较差的品种上做回测,白天深度很好,策略跑得顺风顺水。结果到了下午收盘前,深度骤降,一笔不大的单子就把价格打穿了。回测时没考虑这个,实盘直接亏了一笔。所以,做策略时一定要考虑深度的时序变化。
2.4 市场弹性:被打穿的价格能回来吗?
市场弹性,Resilience,指的是订单簿在遭受冲击后恢复到原有状态的能力。
举个例子。一个大买家突然吃掉卖一的所有挂单,价格被推高。如果随后有新的卖单迅速补充进来,把价格拉回原位,说明市场弹性好。如果价格一直悬在高位,回不来了,那就是弹性差。
我习惯用三个维度来衡量弹性:
| 维度 | 定义 | 量化指标 |
|---|---|---|
| 速度 | 价格恢复到冲击前水平所需的时间 | 恢复时间(毫秒/秒) |
| 深度恢复 | 冲击后订单簿深度恢复到原水平的程度 | 深度恢复率 = 恢复后深度 / 冲击前深度 |
| 价差恢复 | 冲击后价差是否回到正常水平 | 价差恢复时间 |
你想想看,为什么有些股票被大单砸了之后很快就能弹回来?因为背后有做市商或者高频交易者在提供流动性。他们看到价差变大,就会进场套利,从而把价格拉回合理区间。
实战经验:我个人在评估一个品种是否适合做高频策略时,会先看它的弹性指标。如果弹性差,说明市场缺乏流动性提供者,你的订单进去可能就出不来了。我曾经因为忽略了这个指标,在一个弹性极差的期货合约上做市,结果被对手盘盯上,连续被吃止损。后来我加了一个弹性过滤器,低于阈值的品种直接跳过。
2.5 订单簿的微观结构特征:你该关注什么?
做量化交易,尤其是高频交易,订单簿的微观结构是你每天都要打交道的。我总结了几点核心关注点:
- 订单到达率:单位时间内有多少新订单进入。这个指标能反映市场的活跃程度。
- 撤单率:挂上去又撤掉的订单比例。高频交易中,撤单率可能高达90%以上。高撤单率通常意味着市场中有大量试探性订单。
- 订单大小分布:大单和小单的比例。大单可能是机构在操作,小单可能是散户或算法交易。
- 订单簿不平衡:买盘总深度与卖盘总深度的比值。这个指标常被用来预测短期价格方向。
举个例子。如果你看到买盘深度突然增加,而卖盘深度不变,订单簿不平衡指标偏向买侧。这通常意味着有资金在托底,短期内价格可能上涨。但要注意,也可能是陷阱——有人挂大单诱多,然后迅速撤单。
核心观点:订单簿不是价格的被动反映,而是市场参与者博弈的战场。每一笔挂单、每一笔撤单,背后都是有人在决策。读懂订单簿,你就能读懂市场的短期意图。
好了,关于订单簿微观结构,我就讲这么多。记住,理论是基础,但真正能赚钱的是你对数据的敏感度和对市场行为的理解。多盯盘,多复盘,慢慢你就能看出门道。
公众号:蓝海资料掘金营,微信deep3321