halo 的技术博客

返回

流动性有两副面孔。第一副是个股层面的:某只小盘股买卖价差大、成交清淡、你一进去就把价格推走——这是 Amihud (2002) 的 ILLIQ 度量的东西,一只股票”自己有多难交易”。第二副是系统层面的:2008 年 9 月、2015 年 A 股股灾、2020 年 3 月,整个市场的流动性会同时蒸发,所有人都想卖、没有人接盘,买卖价差集体拉宽。这两副面孔完全不是一回事。

Pastor 和 Stambaugh(PS,2003)问的是第二副面孔背后的定价问题:当市场整体流动性枯竭时,有些股票会比另一些跌得更惨——那些”流动性 beta”高的股票,在系统性流动性冲击里同向暴跌。既然它们在你最需要现金、最恐慌的时刻给你最大的伤害,理性投资者就会要求一份补偿才肯持有它们。 这份补偿,就是流动性风险溢价,它是一个系统性、不可分散的定价因子——和市场 beta、规模、价值并列。

结论先放这:在一个 600 只股票 × 240 个月的自洽合成面板上,按流动性 beta 分成五组,最不流动组年化 24.0%、最流动组只有 5.6%,收益严格单调递减;做多最不流动、做空最流动的多空组合月度 Sharpe 0.38。但这个溢价不是白捡的——下面会看到,同一个多空组合在流动性危机月整体亏损,你赚的那份年化溢价,本质是”危机来临时你也一起被埋”的对价。附完整 Python 与四类真实陷阱。

Pastor-Stambaugh 系统性流动性因子 L_t:负值代表市场整体流动性枯竭,红色区域是流动性危机时段

一、PS 因子的核心:从”回报反转”里挖出流动性#

PS 的原始度量非常巧妙。它不直接测价差或成交量,而是测一个副产品:成交量引起的回报反转。逻辑是这样的——如果某天一只股票被大单推动、超额收益很高,那么在一个流动性差的市场里,第二天价格会反转回来(因为推动是订单流压力而非信息,压力过去价格回落);流动性越差,这种”量→反转”的关系越强。

PS 对每只股票 ii 每月做一个日频回归:

ri,d+1e=θi+ϕiri,d+γisign(ri,de)voli,d+εi,d+1r_{i,d+1}^e = \theta_i + \phi_i\, r_{i,d} + \gamma_i \cdot \text{sign}(r_{i,d}^e)\cdot \text{vol}_{i,d} + \varepsilon_{i,d+1}

其中 γi\gamma_i 就是关键:它衡量”昨天带符号的成交量,对今天回报的反转作用”。γi\gamma_i 越负,说明这只股票的流动性越差(量引起的反转越强)。把所有股票的 γi\gamma_i 在横截面上加总平均,就得到那个月的市场整体流动性水平;再把它的月度创新(去掉可预测部分的意外冲击)序列化,就是 PS 系统性流动性因子 LtL_t

上面那张图画的就是 LtL_t:它有自相关(流动性状态会持续),大部分时间在零附近波动,但会突然出现几个深坑——那就是流动性危机月,整个市场的可交易性瞬间枯竭。PS 的洞见是:LtL_t 是一个可定价的状态变量。一只股票对 LtL_t 的暴露(流动性 beta),决定了它该有多少风险溢价。

二、构造合成面板:植入流动性 beta 与溢价#

为了把因果链讲清楚,我们构造一个自洽合成面板:每只股票有一个真实的流动性特征 γi\gamma_i(越负越不流动),它同时决定两件事——无条件溢价(越不流动,长期平均收益越高,作为补偿)和危机 beta(越不流动,LtL_t 下跌时亏得越多)。这两者同源,是 PS 因子的灵魂。

注意这里的关键设计:liq_premiumliq_beta 都是 -true_gamma[i] 的正比函数——溢价和风险来自同一个源头。这不是巧合的建模技巧,而是 PS 理论的核心断言:流动性溢价之所以存在,正是因为不流动的股票在系统性流动性冲击中风险敞口更大。你不可能只要溢价不要风险。

三、估计流动性 beta 并分组#

真实世界里 γi\gamma_i 要靠日内回归估计;这里我们用一个可观测的代理:每只股票月度收益对 LtL_t(控制市场因子后)的回归斜率,作为它的流动性 beta 估计量。

est_beta = np.zeros(N)
for i in range(N):
    X = np.vstack([np.ones(T), mkt, L]).T
    coef, *_ = np.linalg.lstsq(X, R[:, i], rcond=None)
    est_beta[i] = coef[2]                           # 对 L 的暴露

# 按流动性 beta 分五组:Q1 = 最不流动(暴露最大)
ranks = pd.qcut(-est_beta, 5, labels=False)
for q in range(5):
    port = R[:, ranks == q].mean(axis=1)            # 等权组合月收益
    ann = (1 + port.mean())**12 - 1
    print(f"Q{q+1}: {ann*100:.1f}%")
# Q1(最不流动) 24.0% -> Q2 18.5% -> Q3 15.7% -> Q4 11.4% -> Q5(最流动) 5.6%
python

结果见下图:五分组年化收益从最不流动组的 24.0% 严格单调递减到最流动组的 5.6%。这条单调阶梯就是流动性溢价的横截面证据——市场确实为”愿意持有难交易资产”支付了一份系统性对价。

流动性 beta 五分组:越不流动的股票,未来收益系统性越高,从 24.0% 单调降至 5.6%

四、多空组合与它的代价#

做多最不流动组(Q1)、做空最流动组(Q5),得到一个市场中性的流动性多空组合:

illiq = R[:, ranks == 0].mean(axis=1)              # 最不流动(多头)
liq   = R[:, ranks == 4].mean(axis=1)              # 最流动(空头)
ls = illiq - liq
sharpe = ls.mean() / ls.std() * np.sqrt(12)        # 0.38
python

多空组合的净值曲线见下图。这里藏着 PS 因子最诚实的一课:图上的红色竖带是流动性危机月,多空组合在这些月份和市场一起受创,而不是提供保护。 这和很多人对”因子”的直觉相反——它不是一个在危机中避险的对冲工具,恰恰相反,你做多的那批不流动股票,正是危机中被抛售最狠、流动性 beta 最高的一批。

流动性多空组合净值:红色竖带为流动性危机月,多空组合在危机中同样受创,而非提供保护

最后一张图把这个代价量化。左边验证估计有效性——估计的流动性 beta 和真实 γ\gamma 高度相关,分组不是噪声。右边是灵魂:把多空组合的月收益按”平常月”和”流动性危机月”分开画直方图,危机月的分布整体左移——平常月多空稳定为正,危机月则集中在亏损区。这就是那份年化溢价的来处:它是给”愿意在危机中和市场一起被埋”的人开的工资。

左:流动性 beta 估计与真实值高度相关;右:多空组合月收益分布,流动性危机月整体左移,揭示溢价的代价

A. 实现细节#

  • 信号构造:流动性 beta 用月度超额收益对系统性流动性因子 LtL_t 的回归斜率估计(控制市场因子)。真实 PS 方法用日频”量-反转”回归估个股 γ\gamma,本文用可观测代理简化,但保留了”不流动↔高 L 暴露”的核心映射。
  • 系统性流动性因子 LtL_t:AR(1) 自相关刻画流动性状态的持续性,随机植入 5 个危机月(LL 骤降),标准化后作为定价状态变量。
  • 溢价与风险同源:无条件溢价和危机 beta 都设为 γi-\gamma_i 的正比——这是 PS 理论的核心,不是自由参数,改这个映射就等于否定 PS 假设本身。
  • 分组方向qcut(-est_beta) 使 Q1 = 流动性 beta 最大(最不流动)、Q5 = 最流动,保证”越不流动收益越高”读起来符合直觉。
  • 多空口径:做多 Q1、做空 Q5,等权,市场中性,Sharpe 用月度收益年化(×√12)。

B. 已知偏差#

  1. 溢价和危机 beta 不可分割:本文的正向单调结论,完全依赖”不流动=高溢价+高危机风险”这个同源设定。这既是优点(复现了 PS 理论)也是局限——现实中流动性 beta 的估计噪声、以及溢价是否真的补偿了危机风险,是学界至今争论的问题(有人认为部分溢价是错误定价而非风险补偿)。
  2. 估计误差被低估:合成面板里 LtL_t 是已知的,估计流动性 beta 几乎无偏(相关系数极高)。真实市场里 LtL_t 本身要估、个股 γ\gamma 要用嘈杂的日频数据估,两层估计误差叠加,会让真实分组的单调性远不如图上干净。
  3. Sharpe 0.38 仍偏乐观:合成 idio 是独立的,真实不流动小盘股在危机中高度共同暴露(一起崩),会进一步拉低危机月表现、加厚左尾。真实 PS 因子的长期 Sharpe 通常在 0.3~0.5,且高度依赖样本区间是否覆盖危机。
  4. 危机月定义有后视嫌疑:本文用 Lt<1.5L_t < -1.5 事后标记危机月来画分布。实盘中你无法提前知道哪个月会是危机月——流动性因子的择时几乎不可行,只能长期持有承受危机拖累。

C. 结果解读#

  • PS 和 Amihud 是两回事,别混用:Amihud ILLIQ 是个股特征(截面),PS 是系统性风险暴露(对共同因子 LtL_t 的 beta)。一只股票可以 ILLIQ 很高但流动性 beta 不高(它难交易,但不跟着市场流动性一起崩)。真正被 PS 定价的是后者——和市场流动性同生共死的系统性风险,这才是不可分散、该拿溢价的部分。
  • 溢价的本质是危机对价,不是免费午餐:24% vs 5.6% 的单调阶梯很诱人,但最后一张图说清了代价——你赚的每一分流动性溢价,都对应着”危机月和市场一起亏”的承诺。这份工资该不该赚,取决于你的负债端能不能扛过危机月而不被迫平仓。锁定期长的养老金、捐赠基金适合赚,天天面临赎回的产品不适合。
  • 它不是危机对冲工具:很多人误以为”因子”天然抗跌。PS 流动性多空恰恰相反,它在流动性危机中和市场同向受创。如果你需要的是危机保护,PS 因子帮不上忙——它是一份承担危机风险换取平时溢价的策略,方向和对冲相反。
  • A 股的替代构造:中国市场没有现成的 PS 因子序列,但可以用换手率、Amihud ILLIQ 的市场横截面均值、或融资融券余额变化来构造一个本土系统性流动性代理。要注意 A 股涨跌停制度会在危机日冻结成交,让”量-反转”关系失真,构造时需剔除触板日,否则流动性 beta 估计会被制度噪声污染。
  • 落地优先级:想用 PS 因子,先想清楚你到底要暴露还是要对冲。要暴露(赚溢价)——确认负债端能扛危机月,长期持有多头不流动股,别在危机低点被迫止损;想对冲流动性风险——那要反过来做空高流动性 beta 资产,牺牲平时收益换危机保护。搞反方向,是这个因子最常见的实盘误用。
Pastor-Stambaugh 流动性因子:流动性冲击的系统性溢价
https://blog.halo26812.eu.org/blog/pastor-stambaugh-liquidity
Author halo
Published at 2026年7月26日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨