第二章:市场微观结构——订单簿、买卖价差、市场深度与流动性
各位同学,大家好。今天我们来聊聊市场微观结构。
很多人做量化,一上来就研究各种复杂的统计模型、机器学习。但我个人习惯,第一步永远是先搞清楚“市场到底是怎么运作的”。你想想看,如果你连订单簿长什么样都不清楚,那策略再花哨,也像是蒙着眼睛开车。
这一章,我们就来拆解市场的“毛细血管”——订单簿、买卖价差、市场深度和流动性。这些东西,说白了就是市场的“心跳”和“脉搏”。
2.1 订单簿:市场的实时“心电图”
订单簿(Order Book)是什么?
简单说,它就是交易所用来记录所有未成交买单和卖单的电子账本。每一笔挂单,都像是一个“报价承诺”。
我举个例子。假设现在某只股票,订单簿长这样:
| 方向 | 价格(元) | 数量(股) |
|---|---|---|
| 卖单 | 10.05 | 200 |
| 卖单 | 10.04 | 500 |
| 卖单 | 10.03 | 300 |
| —— | —— | —— |
| 买单 | 10.02 | 400 |
| 买单 | 10.01 | 600 |
| 买单 | 10.00 | 1000 |
这里,10.03元是“卖一价”,10.02元是“买一价”。中间的差价,就是买卖价差。
我在项目中遇到过一件事。有一次,我们监控一个流动性很差的币种,订单簿上买一和卖一之间差了整整5个tick。当时我就意识到,这种品种根本不适合做高频套利。为什么?因为你的滑点成本,可能比利润还高。
嗯,这里要注意:订单簿是动态的。每一秒都在变化。所以,我们做策略时,不能只看“当前”的订单簿,还要看它的“变化趋势”。
2.2 买卖价差:你的“隐形交易成本”
买卖价差(Bid-Ask Spread),就是买一价和卖一价之间的差值。
它有多重要?
说白了,它就是你的“入场门票”。你每做一笔交易,都要先“亏”掉这个价差。比如上面那个例子,价差是0.01元。如果你买1000股,一进一出,光价差就亏了10块钱。
为什么会存在价差?
因为市场需要“做市商”来提供流动性。做市商不是做慈善的,他们赚的就是这个价差。你想想看,如果价差为零,谁还愿意做市?
我建议,在做任何套利策略之前,先算一笔账:
- 你的预期利润是多少?
- 价差成本占利润的百分比?
- 如果价差突然扩大一倍,你的策略还能盈利吗?
我曾经有一个学生,他设计了一个看起来很完美的跨期套利策略。回测年化收益30%。结果实盘一跑,亏了。为什么?因为他回测时用的是“中间价”,而实盘交易时,他必须吃“卖一价”和“买一价”。价差直接吃掉了所有利润。
2.3 市场深度:你能“吃”下多少单?
市场深度(Market Depth),指的是在某个价格水平上,有多少挂单量。
深度越大,说明市场越“厚实”。你下个大单,价格不会剧烈波动。
深度越小,市场越“薄”。你稍微买多一点,价格可能就冲上去了。
我举个例子。假设你想买10000股。如果市场深度只有5000股,那你只能吃掉“卖一”到“卖三”的所有单子。成交均价会远高于“卖一价”。
这就是“滑点”的来源。
我个人习惯,在做策略之前,一定会先拉一份“深度分布图”。看看在距离当前价格0.1%、0.5%、1%的位置,分别有多少挂单量。这能帮我判断:这个市场,到底能不能容纳我的资金量。
2.4 流动性:市场的“血液”
流动性,是一个综合概念。它包含了价差、深度、成交速度等多个维度。
一个流动性好的市场,通常具备以下特征:
- 价差小: 买卖双方竞争激烈,报价紧贴。
- 深度大: 每个价位都有足够的挂单量。
- 成交快: 你的订单能迅速被吃掉。
- 价格冲击小: 大单不会导致价格剧烈波动。
反过来,流动性差的市场,就是“鬼城”。挂单稀疏,价差巨大,一买就涨,一卖就跌。
你想想看,套利策略最怕什么?
最怕的就是“流动性陷阱”。你发现了一个价差机会,兴冲冲地冲进去。结果发现,另一边根本没有足够的对手盘。或者,你的订单成交了,但价格已经滑到了你的成本线以下。
我曾经在某个小交易所做过一次套利。那个交易所的流动性极差,买一和卖一之间差了0.5%。我以为捡到了便宜,结果我的买单成交后,卖单那边直接撤单了。我被迫持有了一个“流动性极差”的仓位,整整三天才平掉。那三天,我每天都提心吊胆。
2.5 知识体系总览
为了让大家更直观地理解这些概念之间的关系,我画了一张图。
这张图展示了它们之间的关系。订单簿是基础,它直接决定了买卖价差和市场深度。而价差和深度,共同构成了流动性。流动性,则是我们做套利策略时,最需要关注的“宏观指标”。
2.6 实战中的“微观结构”应用
说了这么多理论,我们来点实际的。
在写代码时,我通常会这样处理订单簿数据:
# 伪代码示例:计算买卖价差和深度
def analyze_order_book(bids, asks):
# bids: 买单列表 [(价格, 数量), ...]
# asks: 卖单列表 [(价格, 数量), ...]
best_bid = bids[0][0] # 买一价
best_ask = asks[0][0] # 卖一价
spread = best_ask - best_bid
# 计算前5档的总深度
bid_depth = sum([qty for price, qty in bids[:5]])
ask_depth = sum([qty for price, qty in asks[:5]])
return {
'spread': spread,
'bid_depth': bid_depth,
'ask_depth': ask_depth,
'mid_price': (best_bid + best_ask) / 2
}
这段代码很简单,但它是我所有套利策略的“起点”。每次实盘前,我都会先跑这个函数,看看当前市场的“健康状况”。
如果spread大于某个阈值,或者depth小于某个阈值,我会直接放弃交易。宁可错过,不要做错。
好了,这一章的内容就到这里。市场微观结构,是量化交易的“内功”。内功练好了,后面的招式才能发挥威力。