2. 市场微观结构基础:订单簿、买卖价差、市场深度、交易量分析
做跨品种套利,说白了就是在跟市场的「毛细血管」打交道。你下单的那一刻,价格怎么动、能不能成交、滑点有多大——这些全藏在微观结构里。我刚开始做套利那会儿,总觉得看个K线就够了,结果被订单簿狠狠教育过几次。嗯,今天咱们就把这块掰开揉碎了讲。
2.1 订单簿:市场的实时心跳
订单簿就是交易所里所有挂单的实时快照。它分两边:买盘(Bid)和卖盘(Ask)。每一档都记录着价格和对应的挂单量。
我习惯把订单簿想象成一个「排队市场」——想买的人报个价排队,想卖的人也报个价排队。价格优先、时间优先,就这么简单。
举个例子,你看下面这个简化的订单簿:
| 档位 | 买价 (Bid) | 买量 | 卖价 (Ask) | 卖量 |
|---|---|---|---|---|
| 1 | 100.10 | 500 | 100.15 | 300 |
| 2 | 100.05 | 800 | 100.20 | 600 |
| 3 | 100.00 | 1200 | 100.25 | 900 |
买一价100.10,卖一价100.15。你想立刻买入,就得吃卖一的单子,成交价100.15。想立刻卖出,就得砸买一的单子,成交价100.10。这中间的差价,就是买卖价差。
2.2 买卖价差:你的隐性成本
买卖价差(Bid-Ask Spread)就是卖一价减去买一价。它就是你「一进一出」必须付出的代价。
为什么会存在价差?说白了,做市商要赚钱,市场要覆盖风险。流动性越好的品种,价差越小。比如螺纹钢主力合约,价差可能就1个tick。但某些冷门品种,价差能大到让你怀疑人生。
我记得有一次做豆粕和菜粕的套利,两个品种看起来相关性很高。结果一查订单簿,菜粕的价差是豆粕的3倍。我算了一下,光价差成本就把套利空间吃掉了大半。那次之后,我养成了一个习惯:先算价差成本,再算套利空间。
价差的计算公式很简单:
Spread = Ask_Price - Bid_Price
相对价差 = Spread / Mid_Price
其中 Mid_Price = (Ask_Price + Bid_Price) / 2
我一般用相对价差来衡量成本。比如价差0.05,中间价100,相对价差就是0.05%。如果套利空间只有0.1%,那价差就吃掉了一半利润——这种单子我基本不会碰。
2.3 市场深度:你能吃下多少单
市场深度,就是订单簿上各个价位的挂单总量。它告诉你:如果你想买1000手,价格会滑到哪里。
我常用「深度图」来快速判断。深度图横轴是价格,纵轴是累计挂单量。斜率越陡,说明深度越差——稍微大点的单子就能把价格打穿。
这里我画了一张图,帮你理解订单簿和市场深度的关系:
你看这张图,买一挂了500手,卖一挂了300手。如果你想买200手,可以直接吃卖一的单,价格不变。但如果你想买500手,卖一只有300手,剩下的200手就得吃卖二的单——价格就滑到了100.20。
这就是市场深度对你的直接影响。我一般用「订单簿斜率」来量化深度:
# 计算累计深度
def calc_depth(orderbook, levels=5):
bid_depth = sum([level['size'] for level in orderbook['bids'][:levels]])
ask_depth = sum([level['size'] for level in orderbook['asks'][:levels]])
return bid_depth, ask_depth
# 计算滑点成本
def calc_slippage(orderbook, qty):
remaining = qty
cost = 0
for level in orderbook['asks']:
if remaining <= 0:
break
fill = min(remaining, level['size'])
cost += fill * level['price']
remaining -= fill
avg_price = cost / qty
return avg_price - orderbook['asks'][0]['price']
2.4 交易量分析:谁在主导市场
交易量是市场的「体温计」。它告诉你当前的价格变动,到底是真实需求还是虚晃一枪。
我主要看三个维度:
- 成交量:单位时间内成交的总手数。越大说明参与度越高。
- 成交笔数:成交了多少笔。笔数多但每笔小,说明散户在玩;笔数少但每笔大,说明机构在动。
- 平均每笔成交量:成交量 / 成交笔数。这个指标我特别看重。
举个例子。有一次我看到螺纹钢价格在涨,成交量也在放大。但仔细一看,平均每笔成交量从50手降到了20手。这说明什么?说明是散户在追涨,大资金在悄悄出货。果然,半小时后价格就掉头了。
我常用的一个分析工具是「成交量分布图」(Volume Profile)。它把成交量按价格区间分布,告诉你哪个价位成交最活跃。做套利时,我会把两个品种的成交量分布叠在一起看——如果它们的成交密集区不重合,说明市场结构有问题。
# 计算成交量分布
def volume_profile(trades, price_bins=20):
min_price = min(t['price'] for t in trades)
max_price = max(t['price'] for t in trades)
bin_size = (max_price - min_price) / price_bins
profile = {}
for t in trades:
bin_idx = int((t['price'] - min_price) / bin_size)
bin_low = min_price + bin_idx * bin_size
profile[bin_low] = profile.get(bin_low, 0) + t['volume']
return profile
2.5 把这些串起来:流动性评估框架
好了,订单簿、价差、深度、交易量——这四个东西不是孤立的。我一般会用一个综合框架来评估流动性:
| 指标 | 高流动性特征 | 低流动性特征 | 套利影响 |
|---|---|---|---|
| 买卖价差 | < 1个tick | > 3个tick | 直接增加成本 |
| 市场深度 | 前5档总量 > 套利头寸的3倍 | 前5档总量 < 套利头寸 | 决定能否顺利建仓 |
| 成交量 | 日均成交量 > 10万手 | 日均成交量 < 1万手 | 影响平仓速度 |
| 平均每笔成交量 | 稳定在30-100手 | 剧烈波动或持续下降 | 反映资金性质 |
我个人的筛选标准是:四个指标中至少三个达标,才考虑做套利。如果两个指标亮红灯,直接跳过,别浪费时间。
你想想看,市场微观结构就像套利的「地基」。地基不稳,上面盖的房子再漂亮也没用。我见过太多人,策略回测做得漂漂亮亮,一上实盘就被流动性打回原形。说白了,就是没把订单簿当回事。
嗯,这一章的内容就到这儿。记住:看订单簿要像看心电图一样自然。每天开盘前扫一眼,收盘后复盘一下,慢慢你就能感受到市场的「呼吸」了。
公众号:蓝海资料掘金营,微信deep3321