3、流动性因子:Amihud非流动性指标、Roll spread估计量、有效价差与实现价差、流动性比率

流动性,说白了就是你能不能快速把资产卖掉,还不怎么亏钱。

我刚开始做量化那会儿,总觉得流动性是个很虚的概念。直到有一次,我拿着一个看似完美的因子策略去跑回测,结果实盘一跑就崩——因为那个小票根本没人接盘。嗯,从那以后,我再也不敢忽视流动性了。

这一章,我们来拆解几个最经典的流动性因子。它们各有各的脾气,但组合起来用,效果往往出奇的好。

3.1 Amihud非流动性指标

这个指标是我个人最常用的。它由Yakov Amihud在2002年提出,核心思想很简单:交易量越大,价格波动越小,流动性就越好

公式长这样:

ILLIQ_i = (1/D) * Σ(|R_i,d| / Volume_i,d)

其中:

  • R_i,d 是股票i在第d天的收益率
  • Volume_i,d 是当天的成交金额(注意,不是股数)
  • D 是交易天数

说白了,就是每单位成交金额能撬动多大的价格变化。数值越大,说明流动性越差。

实战经验:我在做A股因子时发现,Amihud指标对ST股和次新股特别敏感。如果你不做剔除,这些股票会把整个因子截面拉偏。我建议至少剔除上市不满60天的股票。

代码实现也不复杂:

import pandas as pd
import numpy as np

def calc_amihud(returns, volume):
    """
    计算Amihud非流动性指标
    returns: 日收益率序列
    volume: 日成交金额序列(单位:元)
    """
    # 防止除零
    volume = volume.replace(0, np.nan)
    illiq = np.abs(returns) / volume
    # 月度平均
    monthly_illiq = illiq.resample('M').mean()
    return monthly_illiq

避坑指南:我曾经犯过一个低级错误——直接用成交股数代替成交金额。结果小盘股和大盘股的流动性差异被严重扭曲。记住,一定要用成交金额(元),不是股数。

3.2 Roll spread估计量

Roll spread是个很有意思的指标。它不需要高频数据,只用日度收益率就能估算买卖价差。

原理是这样的:如果市场存在买卖价差,那么收益率序列会表现出负的一阶自相关。你想想看,买方推动的价格上涨,下一笔很可能就是卖方砸下来。这种来回震荡,就是价差的体现。

公式:

Roll Spread = 2 * √(-Cov(ΔP_t, ΔP_{t-1}))

其中ΔP是价格变化。注意,如果协方差为正,则取0。

注意:Roll spread有个硬伤——它假设市场是有效的,且价差恒定。现实中,这个假设经常不成立。我实测过,在A股市场,Roll spread对大盘股估计偏小,对小盘股估计偏大。使用时最好做截面标准化。

代码实现:

def calc_roll_spread(prices):
    """
    计算Roll spread估计量
    prices: 日度价格序列
    """
    dp = prices.diff().dropna()
    cov = dp.rolling(window=20).cov(dp.shift(1))
    # 只取负协方差
    cov = cov.clip(upper=0)
    spread = 2 * np.sqrt(-cov)
    return spread

3.3 有效价差与实现价差

这两个指标需要高频数据,但精度比Roll spread高得多。

有效价差衡量的是:你的成交价格相对于真实价格的偏离程度。

有效价差 = 2 * |成交价格 - 买卖中间价|

实现价差则更关注:你成交后,价格朝不利方向跑了多少。

实现价差 = 2 * (成交价格 - 成交后一段时间内的中间价)

我个人的习惯是:做日内策略时用实现价差,做隔夜策略时用有效价差。为什么?因为实现价差能捕捉到订单对市场的冲击,而有效价差更多反映的是流动性提供者的补偿。

实战案例:有一次我在回测一个高频因子,发现有效价差因子在开盘后30分钟内特别有效。后来一查,原来是集合竞价后的价格发现过程还没完成,价差被系统性高估了。这个窗口期,就是套利的机会。

3.4 流动性比率

流动性比率是个大家族。最常用的是Amivest流动性比率Hui-Heubel流动性比率

Amivest比率:

L_Amivest = Σ(Volume_t) / Σ(|R_t|)

说白了,就是每单位价格波动能承载多少成交量。数值越大,流动性越好。

Hui-Heubel比率:

L_HH = (P_max - P_min) / P_min / (Volume / Shares)

这个指标考虑了价格振幅和换手率的关系。我一般在做跨市场比较时用它,因为它对市值做了归一化。

指标名称 数据需求 优点 缺点
Amihud 日度收益率+成交额 数据易得,计算简单 对极端值敏感
Roll spread 日度价格 仅需价格数据 假设过强,估计有偏
有效价差 高频订单簿 精度高 数据成本高
流动性比率 日度量价 直观易懂 不同比率结果可能矛盾

我的建议:如果你刚开始做流动性因子,先从Amihud入手。它数据要求低,逻辑清晰,而且和很多异象因子都有相关性。等你把基础打牢了,再上高频指标。

知识体系总览

下面这张图,是我自己梳理的流动性因子框架。你可以把它当作一个检查清单:

流动性因子 价格冲击类 Amihud非流动性指标 流动性比率 价差类 Roll spread估计量 有效价差 实现价差 核心逻辑:低流动性 = 高预期收益 但要注意,流动性因子在危机时刻会集体失效

嗯,流动性因子这块,内容其实挺多的。但核心就一句话:流动性差的资产,需要更高的收益来补偿。这个逻辑在A股、美股、港股都成立,只是强度不同。

我个人在实盘中,一般会同时监控3-4个流动性指标。如果它们同时发出信号,那这个交易决策的置信度就高得多。如果只有一个指标在叫,我会再等等。


专注资料整理