流动性定义与度量:三维度与常见指标
聊到利率债流动性,我经常被问到:到底什么是流动性?
说白了,流动性就是资产变现的难易程度。你手里拿着10个亿的国债,想半小时内卖掉,能不能做到?能做到,说明流动性好;做不到,说明流动性差。就这么简单。
但做量化分析不能只靠感觉。我们需要把流动性拆解成可量化的维度。我个人习惯从三个角度去看——宽度、深度、弹性。这三个维度,基本能覆盖流动性的全貌。
一、流动性的三维度
1. 宽度(Width)——交易成本维度
宽度衡量的是交易成本。最直观的指标就是买卖价差。
举个例子:某只国债的买一价是100.01元,卖一价是100.03元。价差2分钱。你买进去立刻卖,亏的就是这2分钱。价差越小,说明流动性越好。
我在项目中遇到过这样的情况:有些老券的买卖价差能到5毛钱以上,基本就是"僵尸券"了。做市商都不愿意报价,你挂单进去可能一天都成交不了。
相对买卖价差 = (卖一价 - 买一价) / 中间价 × 100%
2. 深度(Depth)——交易量维度
深度看的是市场能承载多大的交易量而不引起价格剧烈波动。
你想想看,一个深度好的市场,你砸进去1个亿,价格可能只波动1个bp。深度差的市场,500万就能把价格打穿好几个bp。
深度指标通常用订单簿数据来算。比如看买一到买五的总挂单量,或者卖一到卖五的总挂单量。我习惯用"深度比率"——即某个价格区间内的挂单总量占流通量的比例。
做回测时,千万别忽略深度。我见过有人用高频数据做策略,回测收益漂亮得很,一上实盘就亏钱。为什么?因为回测时假设了无限深度,实际市场根本吃不下那么大单子。
3. 弹性(Resilience)——价格恢复维度
弹性衡量的是:当大单冲击后,价格需要多久能回到均衡水平。
弹性好的市场,比如活跃券,大单砸下去,几分钟内价格就回来了。弹性差的市场,比如某些地方债,砸下去可能半天都缓不过来。
弹性指标不太好直接算,我一般用"价格冲击衰减时间"来近似。具体做法是:找到大额成交事件,看成交后价格恢复到冲击前水平所需的时间。
弹性指标对数据频率要求很高。用日频数据算弹性基本是扯淡,至少要用分钟级数据。我建议用tick级数据,效果最好。
二、常见流动性指标
三维度是理论框架。落到实际交易中,我们还需要具体的量化指标。下面这三个是我最常用的。
1. 买卖价差(Bid-Ask Spread)
这是最直接的流动性指标。计算方式前面已经说了。
实际应用中,我建议用加权平均价差,而不是简单价差。因为有些券的买卖挂单量很不均衡,比如买一挂了1000万,卖一只挂了100万。这时候简单价差会低估实际交易成本。
# 加权买卖价差计算示例
def weighted_spread(bid_prices, bid_volumes, ask_prices, ask_volumes):
"""
计算加权买卖价差
bid_prices: 买盘价格列表 [买一价, 买二价, ...]
bid_volumes: 买盘量列表
ask_prices: 卖盘价格列表
ask_volumes: 卖盘量列表
"""
total_bid_vol = sum(bid_volumes)
total_ask_vol = sum(ask_volumes)
weighted_bid = sum(p * v for p, v in zip(bid_prices, bid_volumes)) / total_bid_vol
weighted_ask = sum(p * v for p, v in zip(ask_prices, ask_volumes)) / total_ask_vol
spread = (weighted_ask - weighted_bid) / ((weighted_ask + weighted_bid) / 2)
return spread * 10000 # 返回bp单位
2. 换手率(Turnover Rate)
换手率 = 成交量 / 流通量。这个指标简单粗暴,但很有效。
一般来说,活跃券的日换手率在5%-15%之间。低于1%的基本就是冷门券。我记得有一次做地方债流动性分析,发现某只10年期地方债的月换手率只有0.3%,相当于一个月都没怎么交易过。
| 换手率区间 | 流动性评级 | 典型券种 |
|---|---|---|
| > 10% | 极好 | 新发活跃国债 |
| 3% - 10% | 良好 | 次新国债、部分政金债 |
| 1% - 3% | 一般 | 老券、部分地方债 |
| < 1% | 差 | 超老券、冷门地方债 |
我曾经犯过一个错误:直接用日换手率做流动性排序。后来发现,有些券虽然日换手率高,但都是小单刷出来的,深度很差。所以我现在都是换手率+深度指标一起看。
3. Amihud非流动性指标
这个指标是学术界最常用的流动性度量之一。它的逻辑很简单:价格对成交量的敏感度。
公式:Amihud = |日收益率| / 日成交额
数值越大,说明单位成交额引起的价格波动越大,流动性越差。
举个例子:某国债日收益率0.01%,成交额100亿。Amihud = 0.01% / 100亿 = 1e-12。另一只券日收益率0.05%,成交额只有5亿。Amihud = 0.05% / 5亿 = 1e-10。后者流动性差了两个数量级。
# Amihud指标计算
def amihud_illiquidity(returns, volumes):
"""
计算Amihud非流动性指标
returns: 日收益率序列
volumes: 日成交额序列(单位:元)
"""
import numpy as np
# 避免除零
volumes = np.where(volumes == 0, np.nan, volumes)
illiquidity = np.abs(returns) / volumes
# 通常取月度或季度均值
monthly_avg = np.nanmean(illiquidity.reshape(-1, 20), axis=1)
return monthly_avg * 1e6 # 放大系数,便于观察
Amihud指标对零成交日很敏感。如果某只券经常零成交,Amihud会变成无穷大。我建议先剔除零成交日,或者用成交额加权的滚动窗口来计算。
三、三维度与指标的关系
讲到这里,你可能已经发现了:三个维度并不是孤立的。宽度、深度、弹性之间相互影响。
比如,宽度窄的券通常深度也好,因为做市商愿意提供流动性。弹性差的券往往宽度也宽,因为市场恢复慢,做市商需要更大的价差来补偿风险。
我习惯用一张图来展示它们的关系:
嗯,这张图我画了很多遍。你看,三个维度交叉的区域就是综合流动性。Amihud指标其实就落在中间,因为它同时反映了宽度和深度的影响。
实际做分析时,我建议三个维度都看,但侧重点可以不同。比如做日内交易,宽度最重要;做持仓管理,深度更重要;做风险对冲,弹性更关键。
好了,流动性定义和度量就讲到这里。记住一句话:没有完美的流动性指标,只有最适合你交易场景的指标。