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 计算步骤详解
我个人习惯用日频数据来计算。为什么?因为高频数据太吵,而且很多场景下你拿不到逐笔数据。日频已经足够捕捉流动性恶化的趋势了。
具体步骤:
- 获取数据:每日收盘价、每日成交金额(或成交量)
- 计算日收益率:R_t = ln(P_t / P_{t-1}),取绝对值
- 计算每日Amihud:|R_t| / V_t(V_t单位用百万元)
- 滚动平均:取过去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实现实时监控
好了,理论讲完,上代码。我习惯用pandas和numpy来处理,配合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比率在整个流动性监控体系中的位置:
7.6 我踩过的坑
最后分享一个真实教训。2020年3月,美股熔断期间,我用Amihud比率监控标普500ETF。当时指标从0.00002飙到0.00015,按我的标准应该清仓。但我犹豫了——觉得「这次不一样」。结果呢?后面三天又跌了12%。
从那以后,我给自己定了个规矩:Amihud比率突破阈值,无条件减仓。宁可错过反弹,不能死在流动性枯竭里。
核心总结: Amihud非流动性比率是捕捉流动性螺旋的「温度计」。它不完美,但足够实用。配合其他指标(比如买卖价差、订单簿深度),你能构建一套完整的流动性预警系统。
好了,这一章就到这里。代码拿去跑跑看,有问题随时交流。