6、微观结构因子:价差因子、深度因子、斜率因子、订单不平衡因子、信息份额

各位好,我是老张。今天咱们聊点硬核的——微观结构因子。

说实话,我刚入行那会儿,觉得高频交易就是拼网速、拼硬件。后来踩了不少坑才明白:真正拉开差距的,是你对市场微观结构的理解深度。说白了,就是你能不能从订单流里读出别人看不到的信息。

这一章,我带你逐个拆解五个核心因子。每个因子我都会讲清楚:它是什么、怎么算、实战中怎么用。嗯,咱们开始。

6.1 价差因子(Spread Factor)

价差,就是买一价和卖一价之间的差值。听起来简单吧?但这里面的门道可不少。

定义:

  • 绝对价差 = 卖一价 - 买一价
  • 相对价差 = (卖一价 - 买一价) / 中间价

我个人习惯用相对价差,因为它能跨品种比较。比如茅台和工商银行,绝对价差差好几倍,但相对价差可能都在同一个量级。

实战经验:价差因子是流动性最直接的度量。价差越小,流动性越好。我在做ETF套利时,就靠监控价差来筛选交易标的——价差超过0.1%的品种,直接跳过。

代码实现:

def calc_spread_factor(bid_price, ask_price):
    """
    计算价差因子
    :param bid_price: 买一价
    :param ask_price: 卖一价
    :return: 绝对价差、相对价差
    """
    spread_abs = ask_price - bid_price
    mid_price = (bid_price + ask_price) / 2
    spread_rel = spread_abs / mid_price
    return spread_abs, spread_rel

避坑指南:我曾经在夜盘交易中吃过亏——有些品种收盘前价差会突然放大,这时候用价差因子做信号,很容易被假突破骗进去。建议加一个时间窗口过滤,比如只取连续3笔报价都满足条件的信号。

6.2 深度因子(Depth Factor)

深度因子衡量的是订单簿的厚度。光看价差还不够,你得知道在什么价位上有多少量等着。

核心指标:

  • 总深度 = 买一到买五的挂单量之和 + 卖一到卖五的挂单量之和
  • 深度不平衡 = (买方深度 - 卖方深度) / (买方深度 + 卖方深度)

你想想看,如果买一只有100手,卖一却有1000手,这说明什么?说明卖方压力大,价格大概率要往下走。这就是深度因子的价值。

个人经验:我习惯把深度因子和价差因子结合起来用。比如价差小但深度薄,说明流动性是虚的,大单一来就崩。反过来,价差稍大但深度厚,反而更安全。

代码实现:

def calc_depth_factor(bid_volumes, ask_volumes):
    """
    计算深度因子
    :param bid_volumes: 买方各档位挂单量列表
    :param ask_volumes: 卖方各档位挂单量列表
    :return: 总深度、深度不平衡
    """
    total_bid_depth = sum(bid_volumes)
    total_ask_depth = sum(ask_volumes)
    total_depth = total_bid_depth + total_ask_depth
    depth_imbalance = (total_bid_depth - total_ask_depth) / total_depth
    return total_depth, depth_imbalance

6.3 斜率因子(Slope Factor)

斜率因子描述的是订单簿的形状。说白了,就是价格越往两边走,挂单量是怎么变化的。

计算方式:

  • 对买一到买五的价格和挂单量做线性回归,得到买方斜率
  • 对卖一到卖五的价格和挂单量做线性回归,得到卖方斜率
  • 斜率因子 = 买方斜率 - 卖方斜率

为什么会这样?因为斜率能告诉你市场的「韧性」。如果买方斜率很陡,说明价格稍微一跌就有大量买单接盘,这是支撑强的表现。

避坑指南:我曾经直接用原始斜率做信号,结果回测效果很差。后来发现,斜率因子需要做归一化处理,不然不同价格水平的品种没法比较。建议用Z-score标准化。

代码实现:

import numpy as np

def calc_slope_factor(bid_prices, bid_volumes, ask_prices, ask_volumes):
    """
    计算斜率因子
    :param bid_prices: 买方各档位价格
    :param bid_volumes: 买方各档位挂单量
    :param ask_prices: 卖方各档位价格
    :param ask_volumes: 卖方各档位挂单量
    :return: 斜率因子
    """
    # 买方斜率
    bid_slope = np.polyfit(bid_prices, bid_volumes, 1)[0]
    # 卖方斜率
    ask_slope = np.polyfit(ask_prices, ask_volumes, 1)[0]
    # 斜率因子
    slope_factor = bid_slope - ask_slope
    return slope_factor

6.4 订单不平衡因子(Order Imbalance Factor)

这个因子是我个人最常用的。它衡量的是买方和卖方挂单量的失衡程度。

定义:

  • 订单不平衡 = (买方挂单量 - 卖方挂单量) / (买方挂单量 + 卖方挂单量)
  • 取值范围:-1 到 1
  • 正值表示买方强势,负值表示卖方强势

你想想看,如果订单不平衡突然从0.1跳到0.8,说明有大资金在买方挂单,价格大概率要涨。这就是一个很好的入场信号。

实战经验:我在做日内交易时,会把订单不平衡因子和价格走势结合起来看。如果价格上涨但订单不平衡在下降,说明上涨动力不足,这时候我会考虑减仓。反过来,价格下跌但订单不平衡在上升,就是抄底的好时机。

代码实现:

def calc_order_imbalance(bid_volume, ask_volume):
    """
    计算订单不平衡因子
    :param bid_volume: 买方挂单量
    :param ask_volume: 卖方挂单量
    :return: 订单不平衡值
    """
    if bid_volume + ask_volume == 0:
        return 0
    imbalance = (bid_volume - ask_volume) / (bid_volume + ask_volume)
    return imbalance

6.5 信息份额因子(Information Share Factor)

这个因子稍微复杂一点。它衡量的是不同交易渠道对价格发现的贡献度。

核心思想:

  • 同一个资产可能在多个市场交易(比如A股和港股、期货和现货)
  • 哪个市场先发现价格,哪个市场的信息份额就高
  • 信息份额因子 = 某个市场的价格发现贡献度 / 所有市场的总贡献度

说白了,就是看哪个市场在「带节奏」。我记得在做跨市场套利时,就靠这个因子来判断哪个市场是主导。

避坑指南:计算信息份额需要用到向量误差修正模型(VECM),这个模型对数据频率很敏感。我曾经用1分钟数据算出来的结果和用5分钟数据完全相反。建议先用不同频率试跑一下,找到最稳定的那个。

代码实现(简化版):

import statsmodels.api as sm

def calc_information_share(price_series_a, price_series_b):
    """
    计算信息份额(简化版)
    :param price_series_a: 市场A的价格序列
    :param price_series_b: 市场B的价格序列
    :return: 市场A的信息份额
    """
    # 构建VECM模型
    data = np.column_stack([price_series_a, price_series_b])
    model = sm.tsa.VECM(data, k_ar_diff=1, coint_rank=1)
    results = model.fit()
    
    # 提取误差修正系数
    alpha = results.alpha
    # 计算信息份额
    info_share = alpha[0]**2 / (alpha[0]**2 + alpha[1]**2)
    return info_share

6.6 因子组合与实战应用

单个因子用起来效果有限,真正厉害的是把它们组合起来。我分享一个我常用的组合策略:

因子组合 信号含义 操作建议
价差小 + 深度厚 + 订单不平衡为正 流动性好,买方强势 积极做多
价差大 + 深度薄 + 订单不平衡为负 流动性差,卖方强势 观望或做空
斜率因子陡峭 + 订单不平衡突变 支撑/阻力位被突破 顺势跟进
信息份额切换 主导市场发生变化 调整交易策略

重要提醒:任何因子组合都不是万能的。市场环境会变,因子之间的相关性也会变。我建议每季度重新评估一次因子的有效性,该淘汰的淘汰,该调整的调整。

6.7 本章知识体系

下面这张图是我自己画的,把五个因子的关系理清楚了。你保存下来,以后写代码时对照着看。

微观结构因子知识体系 微观结构因子 价差因子 深度因子 斜率因子 订单不平衡因子 信息份额因子 实战应用:因子组合 + 信号生成 五个因子从不同维度刻画市场微观结构,组合使用效果更佳

好了,这一章的内容就到这里。五个因子,每个都有它的独特价值。我个人建议你先从价差因子和订单不平衡因子入手,这两个最容易上手,也最容易看到效果。等跑通了,再慢慢加入深度因子和斜率因子。信息份额因子嘛,等你有跨市场交易需求时再深入研究也不迟。

记住,因子是工具,不是圣杯。真正重要的是你对市场的理解。

无相订单流研究社 微信Lucian808555