3. 订单簿静态特征:价差、深度、斜率、宽度等核心指标计算

好,咱们今天聊聊订单簿的静态特征。说白了,就是你在某个时间点「拍一张快照」,然后从这张快照里提取出几个关键数字。这些数字能告诉你市场的流动性怎么样、买卖双方谁更强势、以及价格可能往哪个方向走。

我个人习惯把静态特征分成两类:一类是「价格维度的」,比如价差、宽度;另一类是「数量维度的」,比如深度、斜率。咱们一个一个来看。

3.1 价差(Spread)—— 最直观的流动性指标

价差,就是最优卖价(Ask)和最优买价(Bid)之间的差值。公式很简单:

Spread = Ask_Price - Bid_Price

但实际项目中,我们通常用相对价差,也就是把价差除以中间价:

Mid_Price = (Ask_Price + Bid_Price) / 2
Relative_Spread = Spread / Mid_Price

为什么要用相对价差?因为绝对价差在不同价格水平的股票上没法直接比较。比如茅台和工商银行,绝对价差差了几十倍,但相对价差可能都在同一个量级。

核心观点:价差越小,说明市场流动性越好,你进出的成本越低。做高频交易的朋友,最怕的就是价差突然拉大。

我在项目中遇到过一件事:有一次监控某个小盘股的价差,平时也就0.02元,突然某天开盘价差拉到了0.15元。我第一反应是「出事了」。果然,那家公司当天发了业绩预亏公告。价差就是市场的「预警灯」。

3.2 深度(Depth)—— 你能吃下多少单子?

深度,指的是在某个价格水平上,挂单的总数量。通常我们看的是「前N档深度之和」。

举个例子,买一档挂了1000手,买二档挂了800手,那前两档的买方深度就是1800手。卖方同理。

Bid_Depth_Level1 = Bid_Size_1
Bid_Depth_Level5 = sum(Bid_Size_1 to Bid_Size_5)
Ask_Depth_Level5 = sum(Ask_Size_1 to Ask_Size_5)

嗯,这里要注意:深度大不代表一定能成交。因为有些挂单是「虚挂」的,也就是做市商或者大资金故意挂上去吓唬人的。你一把冲进去,人家可能瞬间撤单。

我的经验:看深度的时候,我习惯同时看「挂单撤单比」。如果某个价位挂单量突然暴增,但撤单率也很高,那大概率是虚挂。别上当。

3.3 宽度(Width)—— 订单簿的「覆盖范围」

宽度这个概念,很多人容易和价差搞混。价差只看最优一档,宽度看的是整个订单簿的「有效范围」。

怎么定义?我个人习惯用「价格偏离中间价一定百分比内的总挂单量所覆盖的价格区间」。说白了,就是看从中间价往两边走,走到什么位置,累计深度能达到某个阈值(比如总挂单量的80%)。

Width = Price_Upper - Price_Lower
其中:
  Price_Upper = 满足累计卖方深度 ≥ 阈值的最小价格
  Price_Lower = 满足累计买方深度 ≥ 阈值的最大价格

宽度越大,说明订单簿越「散」,流动性分布得比较均匀。宽度越小,说明流动性集中在最优价格附近。

你想想看,如果一个股票的宽度只有0.1%,说明买卖双方都在「死磕」最优价,稍微偏离一点就没单子了。这种股票,你下大单的时候要特别小心,很容易把价格打穿。

3.4 斜率(Slope)—— 订单簿的「陡峭程度」

斜率这个概念,是从限价订单簿的「价格-累计深度」曲线里衍生出来的。简单说,就是看价格每变动一个单位,累计深度变化多少。

数学上,我们可以用线性回归来拟合价格和累计深度的关系:

Slope = Δ(累计深度) / Δ(价格)

斜率大,说明订单簿很「陡」,价格稍微一动,深度就急剧变化。这种市场,通常流动性集中在几个关键价位,一旦突破,价格会快速滑向下一档。

斜率小,说明订单簿很「平」,深度分布均匀,价格变动对深度的影响不大。这种市场相对稳定,适合做中长线。

实战用法:我经常用斜率来判断「支撑位」和「阻力位」的强度。如果买方斜率突然变大,说明买盘在某个价位附近密集堆积,那就是强支撑。

3.5 综合计算示例

好,咱们来写一段代码,把这些指标一次性算出来。我用的是Python,数据格式假设是标准的订单簿快照:

import numpy as np

def compute_static_features(orderbook):
    """
    输入:orderbook 字典,包含 bids 和 asks
          bids: [[price, size], ...] 按价格降序
          asks: [[price, size], ...] 按价格升序
    输出:特征字典
    """
    best_bid = orderbook['bids'][0][0]
    best_ask = orderbook['asks'][0][0]
    mid_price = (best_bid + best_ask) / 2
    
    # 1. 价差
    spread = best_ask - best_bid
    rel_spread = spread / mid_price
    
    # 2. 深度(前5档)
    bid_depth_5 = sum([b[1] for b in orderbook['bids'][:5]])
    ask_depth_5 = sum([a[1] for a in orderbook['asks'][:5]])
    
    # 3. 宽度(累计深度达到总深度80%的价格区间)
    total_bid_depth = sum([b[1] for b in orderbook['bids']])
    total_ask_depth = sum([a[1] for a in orderbook['asks']])
    
    cum_bid = 0
    price_lower = best_bid
    for price, size in orderbook['bids']:
        cum_bid += size
        if cum_bid >= 0.8 * total_bid_depth:
            price_lower = price
            break
    
    cum_ask = 0
    price_upper = best_ask
    for price, size in orderbook['asks']:
        cum_ask += size
        if cum_ask >= 0.8 * total_ask_depth:
            price_upper = price
            break
    
    width = price_upper - price_lower
    
    # 4. 斜率(用前10档拟合)
    bid_prices = np.array([b[0] for b in orderbook['bids'][:10]])
    bid_sizes = np.array([b[1] for b in orderbook['bids'][:10]])
    cum_bid_sizes = np.cumsum(bid_sizes)
    
    # 用最小二乘法拟合
    A = np.vstack([bid_prices, np.ones(len(bid_prices))]).T
    slope_bid, _ = np.linalg.lstsq(A, cum_bid_sizes, rcond=None)[0]
    
    features = {
        'spread': spread,
        'rel_spread': rel_spread,
        'bid_depth_5': bid_depth_5,
        'ask_depth_5': ask_depth_5,
        'width': width,
        'slope_bid': slope_bid
    }
    
    return features
注意:这段代码里,我用了前10档来拟合斜率。实际项目中,档位数要根据市场情况动态调整。比如在波动大的时候,可能只用前5档就够了,因为远端的挂单随时可能撤掉。

3.6 这些指标怎么用?

好,指标算出来了,然后呢?我给大家几个实战场景:

场景 指标组合 含义
流动性好 价差小 + 深度大 + 宽度小 市场活跃,适合高频策略
流动性差 价差大 + 深度小 + 宽度大 小心大单冲击,适合限价单
买方强势 买方深度 > 卖方深度 + 买方斜率大 价格可能上涨,考虑做多
卖方强势 卖方深度 > 买方深度 + 卖方斜率大 价格可能下跌,考虑做空

我曾经犯过一个错:只看价差和深度,忽略了斜率。结果在一个斜率极陡的股票上下了大单,价格直接被打穿了三个档位,滑点损失惨重。从那以后,我每次下单前都会看一眼斜率。

3.7 知识体系总览

下面这张图,是我自己整理的知识结构。你可以把它当成一个「检查清单」,每次分析订单簿的时候,对照着看一遍:

订单簿静态特征知识体系 订单簿静态特征 价差 (Spread) 深度 (Depth) 宽度 (Width) 斜率 (Slope) 绝对价差 / 相对价差 流动性预警指标 前N档深度之和 买方深度 vs 卖方深度 价格覆盖区间 流动性分布均匀度 价格-深度曲线陡峭度 支撑/阻力强度判断 综合运用 → 判断市场状态、优化交易策略 价差 + 深度 + 宽度 + 斜率 = 完整的流动性画像

这张图把四个核心指标串起来了。你从中心出发,沿着分支往下看,每个指标都有它的子概念和实战用途。最下面那句话是我自己加的:「价差 + 深度 + 宽度 + 斜率 = 完整的流动性画像」。缺一个都不行。

一个小建议:刚开始学的时候,别急着把所有指标都用上。先盯住价差和深度,这两个最直观。等用熟了,再把宽度和斜率加进来。一口吃不成胖子,做量化也是。

好,关于订单簿静态特征的核心指标,咱们就聊到这儿。这些指标是后续所有动态分析的基础。你想想看,如果连静态特征都算不准,后面那些复杂模型就更没戏了。


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