我们习惯用「盈利增长 × 贴现率」这套框架给资产定价。但 2008 年之后,有一个变量悄悄爬上了定价公式的等号左边,却长期没被写进大多数量化模型里:央行资产负债表。
2008 年之前,美联储资产负债表约占 GDP 的 6%;三轮 QE 之后冲到 25%;2022 年起的量化紧缩(QT)又主动往回缩。这段时间里,风险资产不是在某个真空里按基本面定价,而是在一层被央行不断加厚、又不断抽走的「流动性地毯」上跳舞。地毯突然被抽走时(QT),资产会晃;地毯被铺上时(QE),资产会飘。
结论先放这:宏观流动性是可被定价的因子。 在我们的 240 个月(2006–2026)模拟数据上,把央行资产负债表(占 GDP%)的月度变化 ΔlogB 当作流动性因子,对资产月度超额收益做 OLS,得到显著的正流动性暴露 beta≈1.70(t≈10.7,R²≈0.33)——也就是说,资产负债表每多扩 1%(对数意义),资产当月平均多涨约 1.7%。更进一步,用滚动回归看时变的流动性 beta,会发现流动性越稀缺(缩表期),要求的流动性风险溢价越高。把这条规律接成一个「扩表满仓、缩表减仓」的择时策略,把回撤从被动持有的 −46% 压到了 −17%。

一、QT/QE 到底改变了什么#
一句话:QE 是央行买资产、把准备金注入银行体系;QT 是反过来缩表、把流动性收回去。
- QE(量化宽松):央行从市场买入国债/ MBS,向金融体系注入准备金,压低长端利率、抬升风险资产估值,本质是用「央行资产负债表扩张」换「私人部门流动性宽松」。
- QT(量化紧缩):央行停止再投资、让到期债券自然滚出,资产负债表主动收缩,准备金被抽走,流动性边际收紧。
这里关键的不是「央行持有了多少资产」,而是边际变化 ΔlogB——市场在给「流动性的方向」定价,不是给「存量的绝对水平」定价。所以模型里用的因不是 B_t 本身,而是它的一阶对数差分。
二、把流动性写成一个因子#
沿用多因子定价的写法,把资产月度超额收益拆成市场因子 + 流动性因子 + 噪声:
其中 就是我们要估的流动性风险溢价:它衡量「资产对流动性变化的敏感度」。 意味着扩表时资产涨得更多、缩表时跌得更多——这正是过去十几年风险资产与央行资产负债表同涨同跌的画像。
从零合成一段数据并回归,全部用 numpy:
import numpy as np
rng = np.random.default_rng(20260712)
T = 240 # 20 年月度
# 合成资产负债表轨迹(占GDP%):含 QE 扩表与 QT 缩表阶段
B = np.zeros(T); B[0] = 6.0
trend = np.zeros(T)
for (a, b, tr) in [(0, 30, 0.02), (30, 90, 0.32), (90, 168, -0.03),
(168, 180, 0.55), (180, T, -0.11)]:
trend[a:b] = tr
B = np.clip(B[0] + np.cumsum(trend) + np.cumsum(0.05*rng.standard_normal(T))*0.15, 3, 30)
gdp = np.linspace(1.0, 1.6, T)
B_gdp = B / gdp
dlogB = np.diff(np.log(B)) # 月度流动性变化(流动性因子)
N = len(dlogB)
mkt = 0.006 + 0.035 * rng.standard_normal(N)
beta_liq_true, beta_mkt_true = 1.8, 0.7
exret = beta_liq_true * dlogB + beta_mkt_true * mkt + 0.018 * rng.standard_normal(N)
# ---- OLS: exret ~ dlogB (+ 截距) ----
X = np.column_stack([np.ones(N), dlogB])
beta, *_ = np.linalg.lstsq(X, exret, rcond=None)
resid = exret - X @ beta
se = np.sqrt(np.diag((resid @ resid)/(N-2) * np.linalg.inv(X.T @ X)))
tstat = beta / se
r2 = 1 - (resid @ resid) / (((exret - exret.mean())**2).sum())
print(beta[1], tstat[1], r2) # ≈ 1.70, ≈ 10.7, ≈ 0.33python跑出来 beta_liq≈1.70、t≈10.7、R²≈0.33——流动性因子显著,且解释力不小。

散点图里,点在零线右侧(扩表月)明显偏上、左侧(缩表月)偏下,OLS 拟合线斜率显著为正。这恰恰是「流动性有价格」最直接的证据。
三、流动性越稀缺,风险溢价越高#
更精细的一步:流动性风险溢价不是常数。用 36 个月滚动窗口回归,得到随时间变化的流动性 beta,再把它对「流动性稀缺度」scarcity = 1 / (B_t/GDP) 画图:

横轴越往右,资产负债表相对 GDP 越小、流动性越稀缺(典型如 QT 缩表期);纵轴是滚动流动性 beta,也就是市场此刻「要求的流动性补偿」。二者正相关——流动性越紧,资产要求的风险溢价越高,等价于「同样一笔现金流,在缩表期要更便宜才有人买」。这正是 QT 通过「流动性稀缺 → 风险溢价抬升 → 估值压缩」这条链影响价格的机制。
四、实战应用:流动性择时#
把上面那句话变成策略:当月 ΔlogB>0(扩表/流动性注入)满仓,ΔlogB<0(缩表/流动性回收)降到 40% 仓位,外加 0.1% 无风险底仓:
signal = np.where(dlogB > 0, 1.0, 0.4)
pnl_timing = np.cumprod(1.0 + signal * exret + 0.001)
pnl_passive = np.cumprod(1.0 + exret)python
结果对比:
- 被动持有:CAGR 15.8%,最大回撤 −46%;
- 流动性择时:CAGR 19.0%,最大回撤 −17%。
关键不是「预测拐点」,而是承认流动性在变、并据此调整风险预算:QT 缩表期把仓位从满仓砍到 40%,避开流动性收紧最痛、回撤最深的那一段;QE 扩表期满仓,把流动性红利吃满。它把一个宏观叙事,变成了可回测、可监控、可问责的明确数字。
数据落地:你的流动性代理从哪来#
上面的 dlogB 是合成变量,实盘里你要换成可观测、且公布及时的流动性代理。常见选择按频率从粗到细:
- 央行总资产(周度):美联储 H.4.1 表每周公布的资产负债表规模,取对数差分即
dlogB的直接现实版;缺点是周度、且含季节性(如 quarter-end 临时扩张)。 - ON RRP(隔夜逆回购余额):货币基金把多余现金存央行的量,是「体系中闲置流动性」的晴雨表。ON RRP 快速回落往往意味着准备金被抽向实体,是 QT 的领先指标。
- TGA(财政部一般账户):财政部在央行的现金。TGA 抽水(发债回笼)会瞬间收紧银行准备金,与 QT 叠加时形成「双重抽水」。
- 全球加总:把美联储、ECB、BoJ、BoE 等主要央行总资产按汇率合成一个全球流动性指数,避免被单一央行不同步误导(见陷阱 3)。
实用经验:用 ON RRP + TGA 的周度变化做「即时流动性温度计」,用央行总资产做「趋势确认」,二者同向时信号最强、反向时按兵不动。这样能把月度 dlogB 的前视与频率错配(陷阱 5)压到最低。
五、真实陷阱(诚实版)#
1. 反向因果(endogeneity):不是「扩表 → 资产涨」单向,也可能是「资产暴跌 → 央行被迫扩表救市」。OLS 的 beta 同时捕获了这两方向,把它当纯暴露会高估主动择时能力。严谨做法要用外生流动性冲击(如央行沟通造成的预期外变化)做工具变量。
2. 稀缺度 ≠ 绝对水平:定价的是 ΔlogB 的边际变化和相对稀缺度,不是 B_t 的绝对大小。一个仍很大的资产负债表若停止增长,边际上已是收紧。只看「央行还持有很多资产」会误判流动性已宽松。
3. 全球央行不同步:美联储 QT 时,欧央行/日央行可能仍在扩表,全球流动性是净结果。单看一家央行会漏掉跨境流动性对冲。
4. 信号渠道 vs 数量渠道:市场很大一部分反应发生在「央行前瞻指引」宣布的那一刻,而非实际缩表落地时。用实际 ΔlogB 建模会漏掉「预期已 price-in」的部分,回测里的暴露可能被低估。
5. 频率错配:资产负债表是月度、且公布滞后;资产价格是日度。用月度信号做日度调仓,会引入前视与执行时滞,实盘 beta 会显著低于回测。
6. 样本窗口依赖:2008 后的「QE 永远托底」样本,可能让流动性 beta 偏高估;若未来进入「财政主导 + 高通胀」 regime,扩表未必再推升风险资产。这段 beta 不是永恒常数。
结语#
央行资产负债表不是宏观散文里的背景板,而是可被写进多因子模型、可被定价、可被择时的流动性因子。只要记住——它定价的是「边际变化」和「相对稀缺度」,真正的功夫在于区分「信号」与「数量」、并躲开反向因果那道坑。把这道坑迈过去,它就是你宏观风险预算里最被低估的那个旋钮。
本文数据与图表均由
generate_quantitative_tightening_images.py用 numpy 从零计算生成(模拟资产负债表轨迹 + 流动性因子回归 + 滚动风险溢价 + 择时回测),非占位图。把dlogB换成你自己的流动性代理(如联储资产规模、逆回购余额变化),整套代码可直接复用。