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倍。我算了一下,光价差成本就把套利空间吃掉了大半。那次之后,我养成了一个习惯:先算价差成本,再算套利空间

避坑指南:我曾经在夜盘交易时段,看到某个品种价差突然从1个tick扩大到5个tick。当时没在意,直接下了套利单。结果成交后,另一边迟迟没成交,最后滑点吃掉了我整个月的利润。记住:价差不是固定的,它会随市场情绪剧烈波动。

价差的计算公式很简单:

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手,价格会滑到哪里。

我常用「深度图」来快速判断。深度图横轴是价格,纵轴是累计挂单量。斜率越陡,说明深度越差——稍微大点的单子就能把价格打穿。

这里我画了一张图,帮你理解订单簿和市场深度的关系:

订单簿与市场深度示意图 买盘 (Bid) 卖盘 (Ask) 买一 100.10 500手 买二 100.05 800手 买三 100.00 1200手 卖一 100.15 300手 卖二 100.20 600手 卖三 100.25 900手 价差 = 0.05 市场深度 = 各档位挂单量之和 买盘深度: 500+800+1200 = 2500手 卖盘深度: 300+600+900 = 1800手 柱子越高 = 该价位挂单量越大

你看这张图,买一挂了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']
我的经验:做套利时,我至少会看5档深度。如果某个品种的买一到买五总量,还不够我套利头寸的一半,我会拆单或者放弃。别跟深度较劲,市场永远是对的。

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
避坑指南:我曾经在收盘前5分钟,看到两个品种的成交量突然暴增,以为有大机会。结果一查,是套保盘在集中平仓。那次我跟着冲进去,直接被反向行情打脸。记住:成交量要结合时间背景看。开盘、收盘、数据发布前后的成交量,都有不同的含义。

2.5 把这些串起来:流动性评估框架

好了,订单簿、价差、深度、交易量——这四个东西不是孤立的。我一般会用一个综合框架来评估流动性:

指标 高流动性特征 低流动性特征 套利影响
买卖价差 < 1个tick > 3个tick 直接增加成本
市场深度 前5档总量 > 套利头寸的3倍 前5档总量 < 套利头寸 决定能否顺利建仓
成交量 日均成交量 > 10万手 日均成交量 < 1万手 影响平仓速度
平均每笔成交量 稳定在30-100手 剧烈波动或持续下降 反映资金性质

我个人的筛选标准是:四个指标中至少三个达标,才考虑做套利。如果两个指标亮红灯,直接跳过,别浪费时间。

你想想看,市场微观结构就像套利的「地基」。地基不稳,上面盖的房子再漂亮也没用。我见过太多人,策略回测做得漂漂亮亮,一上实盘就被流动性打回原形。说白了,就是没把订单簿当回事。

嗯,这一章的内容就到这儿。记住:看订单簿要像看心电图一样自然。每天开盘前扫一眼,收盘后复盘一下,慢慢你就能感受到市场的「呼吸」了。


公众号:蓝海资料掘金营,微信deep3321