2. 流动性度量指标解析
在分组测试中,“流动性”必须被翻译成可计算、可排序、可复现的数值,否则分组边界就无从谈起。本节围绕四类最常用的流动性度量展开:换手率、成交额、Amihud非流动性指标和买卖价差。它们看似都在描述“好不好交易”,但刻画的角度差异很大——有的衡量交易活跃度,有的衡量资金容量,有的衡量价格冲击,有的衡量即时交易成本。理解这些差异,才能在不同市场、不同股票池中选对指标,避免把“活跃”误当成“低成本”。
一、换手率:交易活跃度的相对度量
换手率衡量一定时期内成交量相对于可流通股本的比例,公式为:换手率 = 区间成交量 ÷ 区间平均流通股本 × 100%。它最大的优点是消除了股本规模差异,使大盘股与小盘股可以横向比较。例如某股票一个月成交 2.4 亿股,月内平均流通股本 8 亿股,则月换手率为 30%。在分组测试中,通常取过去 20 个交易日的日均换手率作为分组变量。
换手率适合刻画“交易热度”和“筹码交换速度”,在A股等以散户交易为主、换手率差异显著的市场中区分度较好。但它有两个陷阱:其一,高换手可能来自炒作或事件冲击,并不等于低交易成本;其二,对于自由流通股本很小的股票,换手率会被机械放大。因此换手率更适合作为初筛维度,而非唯一的流动性代理。
二、成交额:资金容量的绝对度量
成交额 = 区间成交均价 × 区间成交量,直接反映一只股票能承载多少资金。它与换手率的关键区别在于“绝对 vs 相对”:换手率回答“换手快不快”,成交额回答“能装多少钱”。对于资金规模敏感的策略(如中高频调仓、较大资金体量的组合),成交额往往比换手率更贴近真实约束——一只换手率很高但股价极低的股票,成交额可能很小,大资金进出依然困难。
实操中常取过去 20 日日均成交额(单位:万元或亿元),并配合“剔除日均成交额后 10% 分位以下股票”的规则,先排除流动性过差的样本,再做分组。需要注意成交额受价格水平影响,跨市场比较时应统一币种与时间窗口,且不宜与换手率简单相加,二者存在信息重叠。
三、Amihud非流动性指标:价格冲击的度量
Amihud 指标的核心思想是:单位成交额引起的价格波动越大,流动性越差。其日度定义为 ILLIQ = |日收益率| ÷ 日成交额,区间值取日均值(成交额通常以百万元计,便于数量级阅读)。例如某股票某日收益率绝对值为 2%,成交额为 5000 万元(即 50 百万元),则当日 ILLIQ = 0.02 ÷ 50 = 0.0004。数值越大,说明同样一笔资金推动价格变化越剧烈,流动性越差。
Amihud 指标的独特价值在于它直接对应“交易的成本后果”,特别适合衡量大额交易的价格冲击,是学术与实务中构造流动性因子的常用选择。使用时要注意:它对成交额极小、收益率异常的日子非常敏感,需先剔除停牌、涨跌停、成交额接近零的样本;同时它是有量纲的相对比值,跨股票比较时应保证收益率与成交额的口径一致(如都用不复权或都用后复权收益率)。
四、买卖价差:即时交易成本的度量
买卖价差衡量最优买价与最优卖价之间的差距,常用相对价差:价差率 = (卖一价 − 买一价) ÷ 中间价 × 100%,其中中间价 = (买一价 + 卖一价) ÷ 2。它反映的是“立刻成交”所付出的隐性成本,是高频与做市视角下最直接的流动性指标。例如买一价 9.98 元、卖一价 10.02 元,中间价 10.00 元,则价差率为 0.4%。
价差的局限在于依赖逐笔或盘口高频数据,日频策略往往只能取每日收盘或定时的快照价差,代表性有限;此外价差只反映小额即时成交成本,对大规模交易的价格冲击刻画不足。因此在日频分组测试中,价差常作为辅助验证指标,而非主分组变量。
五、指标选择与计算口径的实操要点
在分组测试中,指标选择应服务于策略的资金属性与调仓频率。若策略资金体量小、调仓频繁,换手率与价差更贴近实际约束;若资金体量大、持有周期长,成交额与 Amihud 更能反映容量与冲击成本。一个可复用的处理流程是:先统一时间窗口(如过去 20 个交易日),再统一复权口径与停牌处理规则,然后计算各指标并做横截面排序,最后按分位数分组。
计算时需特别注意三点。第一,窗口一致性:换手率、成交额、Amihud 都应使用同一区间,避免一个用 20 日、一个用 60 日导致分组信息错位。第二,异常值处理:Amihud 对极小成交额极其敏感,建议先剔除日均成交额低于阈值的样本,或对指标做 1% 与 99% 分位缩尾。第三,方向统一:换手率、成交额越大表示流动性越好,而 Amihud 与价差越大表示流动性越差,分组排序时必须统一方向,否则高低流动性组的含义会颠倒。
下面给出一个可直接参考的日频计算示例(参数为教学假设,非实测结果):
# 假设窗口 W = 20 个交易日,成交额单位:百万元
turnover_20d = mean(volume / avg_float_shares, window=20) * 100
amount_20d = mean(close * volume, window=20) / 1e6
amihud_20d = mean(abs(daily_return) / (amount_daily / 1e6), window=20)
spread_20d = mean((ask1 - bid1) / ((ask1 + bid1) / 2), window=20) * 100
# 统一方向:流动性得分越高越好
liq_score = zscore(turnover_20d) + zscore(amount_20d) \
- zscore(amihud_20d) - zscore(spread_20d)
这段示例展示了口径统一与方向统一的具体做法:前两项正向相加,后两项取负后相加。实际使用时不必四项全用,可根据数据可得性选择两项主指标,其余作为验证。分组后还应检查各组样本数量是否均衡、指标分布是否出现断层,若某一组样本过少,说明分组阈值需要调整或指标存在极端值污染。
最后需要强调,任何单一指标都只是流动性的一个切面。换手率高不代表冲击成本低,成交额大不代表价差窄。稳健的做法是:以一个指标做主分组,用另一个指标做交叉验证,观察分组收益单调性是否在两种口径下都成立。若结论对指标选择高度敏感,说明分组结果可能并不稳健,应回到数据口径与样本处理上排查,而不是急于下结论。