halo 的技术博客

返回

很多策略的「收益」和「风险」是绑定的:涨得猛的时候波动也大,跌得狠的时候波动也大。于是你以为自己在赚 alpha,其实大部分额外收益只是承担了额外风险——一旦用波动率目标(volatility targeting)把风险拉平,那些「超额收益」就消失了一大半。但有一类策略不一样:它的预期收益(μ)大致恒定,可波动率(σ)剧烈时变。对这类策略,Moreira & Muir (2017) 提了一个极简却有力的做法——波动率管理组合(Volatility-Managed Portfolio, VM):不预测方向,只根据「当前波动有多大」来缩放敞口。

核心直觉一句话:如果一个策略的收益不随自身方差放大,那在高波动期主动降杠杆,砍掉的主要是噪声而非 alpha,组合 Sharpe 不会塌、风险却大幅降。这就是 VM 的全部武器——一个公式 w_t = c / σ̂_t²

我们用 30 年月度合成数据验证:基础策略月度 μ=0.4%、波动率由随机波动率 AR(1) 驱动(高波动聚集、且难以被完美预测)。原始满仓组合年化波动 16.1%、最大回撤 −49%;波动率管理组合(用过去 36 个月已实现方差估计 σ̂_t²、w_t=c/σ̂_t²、c 取使平均敞口≈1)把年化波动压到 5.6%(降 65%)、最大回撤砍到 −18.6%(降 62%),而 Sharpe 几乎不变(0.320→0.285,比值 0.89)。

一、为什么「收益不随方差放大」是 VM 成立的前提#

VM 不是凭空降风险的魔法。它的威力有明确前提——基础策略的预期超额收益 μ 恒定,不随自身方差 σ² 放大

# 基础策略月度收益:恒定 μ + 时变波动 σ_t 乘标准正态
h[t] = PHI * h[t-1] + N(0, SIG_H)     # 随机波动率(对数尺度),高波动聚集
sig_t = SIG0 * exp(h[t])              # 真实时变月度波动率
r_t   = MU + sig_t * z_t ,  z_t ~ N(0,1)   # 注意:μ 是常数,不乘 σ_t
python

关键点:收益里的 MU常数,而 sig_t * z_t 那部分才是随 σ_t 放大的噪声。如果一个策略是 r_t = a·σ_t + sig_t·z_t(收益随方差放大),那 VM 去杠杆会把 alpha 也砍掉——VM 对它无效甚至有害。VM 只对「收益端不随波动放大、风险端却时变」的策略有效,这正是许多横截面异常(size、value、momentum)的实证特征:异常溢价不随自身波动上升。

二、波动率怎么估计:trailing realized variance#

VM 不预测未来的 σ,只用过去已实现收益估计当前波动(一个因果可得的代理):

def realized_var(r, t, w=36):
    """用过去 w 个月收益的平方和估计当期方差(trailing realized variance)。"""
    if t < w:
        return np.var(r[: max(t, 1)]) + 1e-12
    return np.mean(r[t - w: t] ** 2) + 1e-12   # 月度尺度,已含方差定义
python

再算 VM 敞口:

def build_vm(r):
    """波动率管理组合(Moreira-Muir):w_t = c / σ̂_t²。
    c = 1 / E[1/σ̂²] 使平均敞口≈1(不靠杠杆放大,纯做风险变换)。"""
    sig2_hat = np.array([realized_var(r, t) for t in range(MONTHS)])
    c = 1.0 / (1.0 / sig2_hat).mean()
    w = c / sig2_hat                       # 敞口(杠杆)
    w = np.clip(w, 0.3, 2.5)              # 实操杠杆上下限
    r_vm = w * r
    return r_vm, w, sig2_hat
python

w_t = c/σ̂_t² 的经济含义:把每期风险预算钉在固定值。σ̂_t 大 → 少买(去杠杆),σ̂_t 小 → 多买(加杠杆)。它从不判断「下个月涨还是跌」,只回答「现在波动太大,少冒点险」。

三、真实波动飙升时,VM 自动去杠杆#

下图是一条代表性路径(30 年)的真实年化波动率(橙)与 VM 敞口(蓝):

波动率管理:真实波动飙升时,VM 敞口自动降到 <1(去杠杆)

每当真实波动率冲高(橙色峰),VM 敞口(蓝线)立刻被压到 1 以下——2008 式的高波动段里它几乎半仓甚至更低。这不是预测,是「波动高了就缩」的机械反应。

敞口和估计波动率的散点关系更直白:

敞口随波动率逆缩放:w_t ∝ 1/σ̂²(红线下界 0.3、上界 2.5 为实操约束)

w_t = c/σ̂_t² 画出一条完美的双曲线——估计波动越高,敞口越低。两段红色虚线是实操约束:极端低波动时最多加到 2.5 倍杠杆,极端高波动时至少去到 0.3 仓。

四、VM 把波动熨平,Sharpe 几乎不变#

累计净值对比(代表性路径,月度):

累计净值:VM 在更低波动下取得几乎不输的 Sharpe

代表性路径里,原始组合 Sharpe 0.256、VM 组合 0.251——几乎一样,但 VM 的曲线明显「更平滑、回撤更浅」。200 次蒙特卡洛平均:原始 Sharpe 0.320、VM 0.285(比值 0.89)。

24 个月滚动年化波动率对比:

波动率管理:把组合波动整体熨平(风险预算恒定)

VM(蓝)的滚动波动被整体压平到一条低得多的带,而原始组合(红)的波动随市场 regime 大幅起伏。这正是 VM 的本职:风险预算恒定化,把「时变波动」这个风险来源从组合里抠掉。

指标原始组合(满仓)波动率管理 VM变化
年化收益+5.1%+1.6%因降杠杆而降
年化波动16.1%5.6%降 65%
Sharpe0.3200.285比值 0.89(几乎未塌)
最大回撤−49.0%−18.6%降 62%

结论:VM 用「少赚一点(收益被降杠杆摊薄)」换来了「波动砍六成、回撤砍六成」。Sharpe 几乎不变说明——省下来的不是 alpha,是纯粹的冗余风险。对需要控回撤、上杠杆、或做风险预算配置的机构,这比「多赚 2 个点」值钱得多。

五、六类真实陷阱#

  1. 前提错,VM 反噬:VM 的全部收益在于「μ 不随 σ² 放大」。若你的策略收益本身随波动放大(如某些趋势跟踪、带方向押注的筹码),VM 去杠杆会把真 alpha 也砍掉,Sharpe 反而下降。落地前先用回归检验 r_t 对 σ_t² 的斜率是否≈0,斜率显著为正就别用 VM。
  2. 波动率估计是滞后的:我们用过去 36 个月 realized variance,它是已实现的、因果可得,但本质是「慢信号」。波动率有聚集也有突变(如 COVID 闪崩),36 个月窗口的反应会慢半拍——极端行情里 VM 降杠杆降得太晚,保护不够。窗口越短反应越快但噪声越大,要权衡。
  3. Jensen 杠杆陷阱(理论 vs 实操差异):理论上,若用 c=mean(σ̂²)(MM 论文常数)且 σ̂ 完美=σ,Sharpe 会E[1/σ²]·E[σ²]≥1 的 Jensen 效应而上升。但实盘 σ̂ 有估计误差,这个「免费 Sharpe 提升」会消失甚至反转——本文用 c=1/E[1/σ̂²] 锁定平均敞口=1,结果 Sharpe 基本持平(比值 0.89),这反而是更诚实的实操预期:VM 主要价值是降波动/降回撤,而非提 Sharpe
  4. 杠杆约束吃掉尾部保护:我们设 [0.3, 2.5] 的杠杆上下限。若去掉上限,低波动期 VM 会加到 5~8 倍,一旦紧接着波动回升,高杠杆+回升波动=巨大回撤。下限 0.3 也意味着高波动期你几乎空仓、错过反弹。约束是工程必需,但也意味着 VM 不是「无损」。
  5. 频率错配:VM 在月度频率、用月度收益估计、月度调仓最干净。若搬到日频、用日 realized variance,估计噪声剧增、交易磨损上升,且日频 VM 容易在「波动假高峰」过度去杠杆。降频(月/双周)通常比高频更稳。
  6. 合成数据局限:本面板是「恒定 μ + 随机波动率 AR(1)」的自洽合成,横截面异常的真实波动结构更复杂(相关性、regime 切换、波动与收益的杠杆效应)。真实 VM 还要处理:估计窗口选择、不同资产波动的联动、以及——VM 把单策略波动压平后,往往要和别的策略做风险预算组合才释放完整价值(单独看收益被摊薄了)。

六、结语#

波动率管理组合是「少即是多」的典范:

  • 不预测方向,只用一个公式 w_t = c/σ̂_t² 把风险预算钉死;
  • 前提是「收益不随方差放大」——对这类策略,高波动期降杠杆砍的是噪声不是 alpha;
  • 在我们的合成里,它把年化波动从 16.1% 压到 5.6%(−65%)、最大回撤从 −49% 砍到 −18.6%(−62%),而 Sharpe 几乎不变——省下的是冗余风险,不是 alpha

和之前聊的风险平价、CPPI、波动率目标放一起看:CPPI 用 cushion 做仓位的「底线保护」、风险平价做跨资产的「风险均摊」、VM 做单策略的「波动归一」——它们都不是靠预测赚钱,而是靠「把不可控的风险拨回可控」赚钱。VM 尤其适合作为多策略风险预算组合的底漆层:先把每个子策略的波动拉平,再做上层配置,才不会让「恰好最近波动大的那个」喧宾夺主。

注:本文收益面板为自洽合成数据(恒定 μ + 随机波动率 AR(1)、trailing realized variance 估计),用于演示 VM 的波动归一与回撤削减;真实落地需先检验「收益不随方差放大」前提、权衡估计窗口、并对杠杆设上下限。

波动率管理组合(Moreira-Muir):用已实现波动缩放敞口而非预测方向
https://blog.halo26812.eu.org/blog/volatility-managed-portfolio
Author halo
Published at 2026年7月14日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨