7、流动性螺旋的量化指标(一):Amihud非流动性比率

各位好,今天我们聊一个实打实的干货——Amihud非流动性比率

你可能听过「流动性螺旋」这个词。说白了,就是市场越跌,流动性越差;流动性越差,市场越跌。这个恶性循环一旦启动,价格崩溃往往就在眼前。那怎么提前捕捉这个信号?Amihud比率就是我最常用的工具之一。

7.1 什么是Amihud非流动性比率?

这个指标由Yakov Amihud在2002年提出。它的核心思想很简单:一笔交易对价格造成的冲击越大,说明流动性越差

你想想看,如果你在深度好的市场上买卖100万,价格几乎不动。但在一个枯竭的市场里,同样100万可能把价格砸下去2%。这个「价格冲击」就是Amihud比率要捕捉的东西。

公式长这样:

Amihud_t = (1 / N) * Σ(|R_i| / V_i)

其中:

  • R_i = 第i笔交易的收益率(或日收益率)
  • V_i = 第i笔交易的成交金额(单位:百万元或亿元)
  • N = 统计期内的交易笔数(或天数)

嗯,这里要注意:值越大,流动性越差。这个方向别搞反了。

核心逻辑: Amihud比率衡量的是「每单位成交金额带来的价格波动」。波动越大,说明市场越脆弱。

7.2 计算步骤详解

我个人习惯用日频数据来计算。为什么?因为高频数据太吵,而且很多场景下你拿不到逐笔数据。日频已经足够捕捉流动性恶化的趋势了。

具体步骤:

  1. 获取数据:每日收盘价、每日成交金额(或成交量)
  2. 计算日收益率:R_t = ln(P_t / P_{t-1}),取绝对值
  3. 计算每日Amihud:|R_t| / V_t(V_t单位用百万元)
  4. 滚动平均:取过去N天的均值(我一般用20天,也就是一个月)

举个例子:

日期 收盘价 成交额(百万) 收益率|R| Amihud日值
2024-01-02 100.0 500 - -
2024-01-03 102.0 450 0.0198 0.000044
2024-01-04 99.5 380 0.0248 0.000065
2024-01-05 98.0 320 0.0152 0.000048

你看,1月4日成交额下降,收益率波动加大,Amihud值明显跳升。这就是流动性恶化的早期信号。

避坑指南: 我曾经在计算时直接用成交量代替成交额,结果指标完全失真。记住,一定要用成交金额,因为不同股票价格差异太大,成交量没有可比性。

7.3 用Python实现实时监控

好了,理论讲完,上代码。我习惯用pandasnumpy来处理,配合yfinance拉数据。

import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta

def calculate_amihud(ticker, window=20):
    """
    计算Amihud非流动性比率
    :param ticker: 股票代码
    :param window: 滚动窗口天数
    """
    # 拉取最近1年数据
    end = datetime.now()
    start = end - timedelta(days=365)
    data = yf.download(ticker, start=start, end=end)
    
    # 计算日收益率(绝对值)
    data['Return'] = np.log(data['Close'] / data['Close'].shift(1)).abs()
    
    # 成交额转换为百万元
    data['Volume_adj'] = data['Volume'] * data['Close'] / 1e6
    
    # 计算每日Amihud
    data['Amihud_daily'] = data['Return'] / data['Volume_adj']
    
    # 滚动平均(去掉无穷大值)
    data['Amihud_daily'] = data['Amihud_daily'].replace([np.inf, -np.inf], np.nan)
    data['Amihud_20d'] = data['Amihud_daily'].rolling(window=window).mean()
    
    return data[['Close', 'Amihud_daily', 'Amihud_20d']].dropna()

# 使用示例
df = calculate_amihud('AAPL', window=20)
print(df.tail())

这段代码我用了很多次。有几个细节你需要注意:

  • 处理无穷大:当成交额为0时,除法会得到inf,必须去掉
  • 滚动窗口:20天是经验值,你可以根据品种调整。国债期货我习惯用10天,股票用20天
  • 数据频率:如果做日内监控,可以改成5分钟K线,但逻辑一样

⚠️ 重要提醒: Amihud比率对极端值非常敏感。如果某天出现「乌龙指」或数据错误,指标会瞬间爆表。我建议加一个3倍标准差截断,把异常值拉回来。

7.4 实战中的判断标准

光算出数字还不够,你得知道什么值算「危险」。我根据多年经验总结了一个参考区间:

Amihud值(20日均值) 流动性状态 操作建议
< 0.00001 良好 正常交易
0.00001 - 0.00005 一般 适当降低仓位
0.00005 - 0.0001 较差 减少交易频率
> 0.0001 危险 暂停交易,准备对冲

当然,这个阈值因品种而异。比特币的Amihud值可能是股票的100倍,你得自己校准。

7.5 知识体系图

下面这张图帮你理清Amihud比率在整个流动性监控体系中的位置:

流动性螺旋监控体系 价格数据 成交金额 收益率计算 Amihud非流动性比率 |R| / V → 滚动平均 流动性状态判断(良好/一般/较差/危险) 仓位管理 → 交易频率调整 → 对冲策略启动 (流动性螺旋预警) 阈值需根据 品种自行校准

7.6 我踩过的坑

最后分享一个真实教训。2020年3月,美股熔断期间,我用Amihud比率监控标普500ETF。当时指标从0.00002飙到0.00015,按我的标准应该清仓。但我犹豫了——觉得「这次不一样」。结果呢?后面三天又跌了12%。

从那以后,我给自己定了个规矩:Amihud比率突破阈值,无条件减仓。宁可错过反弹,不能死在流动性枯竭里。

核心总结: Amihud非流动性比率是捕捉流动性螺旋的「温度计」。它不完美,但足够实用。配合其他指标(比如买卖价差、订单簿深度),你能构建一套完整的流动性预警系统。

好了,这一章就到这里。代码拿去跑跑看,有问题随时交流。