← 返回目录
p5.9动手⏱ 约 17 分钟

风险平价:权重分散不等于风险分散

60/40 里股票占权重 60%,却贡献了 89% 的风险;而 2022 年股债同跌,风险平价一样受伤

🔎 最后验证 2026-07📚 来源:四资产 2007-01 ~ 2026-07 的风险分解与四种权重方案回测,2026-07-31 于 ECS 实测(数据落盘于 _shared/etf_multiasset.parquet),输出见 code/outputs/🧰 yfinance 1.5.2、numpy 2.5.1、pandas 3.0.5、Python 3.12.13
为什么学这个

前面八节都在问"买什么、什么时候买"。这一节换一个问题:每个东西该占多少?

经典的 60/40——六成股票、四成债券——听起来很分散。先算它的风险是怎么分的:

       权重%    风险贡献%
美股     60.0      89.0
长期美债   40.0      11.0

权重 60%,风险 89%。

你以为自己配了"六四开",实际上你配的是"九一开"。

权重分散 ≠ 风险分散——这就是风险平价要解决的那个问题。

而这一节的另一半是它的软肋:2022 年股债同跌,风险平价重仓的债券不但没对冲,反而是重灾区。

💡 打个比方

四个人合伙开公司,出资各占 25%

但其中一个人负责的业务波动极大,公司利润的起伏九成来自他。

股权是四等分的,风险不是。

风险平价做的事,是按"谁能造成多大波动"来重新分配份额,而不是按谁出了多少钱

零、口径先说清

跨资产类别的长历史在国内公开源上拿不到,所以本节用美股 ETF 作代理:

代理资产年化%年化波动%夏普最大回撤%
SPY美股10.7719.610.620-55.2
TLT长期美债2.7915.050.258-48.4
GLD黄金9.5718.110.595-45.6
DBC商品2.1719.300.208-76.4

(2007-01-03 ~ 2026-07-29,4923 个交易日)

三条边界,现在就说,不放到最后:

  1. 这是美元资产,不含汇率对冲——人民币投资者的实际体验会不同
  2. 本课不加杠杆。原版风险平价会对低波动资产加杠杆以提高收益,那会同时放大利率风险与融资成本风险,且散户不可及
  3. 样本内部换过一次天(第五节详述)

零点五、一个现场发现的复现性事故

写这一节的时候,我发现同一份代码、同一条数据请求,两次跑出来的结果不一样:

ERC 期末倍数:3.38 / 3.63 / 3.78 / 3.95(四次独立运行)

排查结果:问题不在代码,在数据源。

同一条 yfinance 请求,不同进程之间返回的形状、索引、最后一天价格完全一致,而历史值的哈希不同。这类漂移不会报错,只会让你的结论每次都不一样。

⚠️ 避坑

这正是 p1.1「能取到 ≠ 取对了」和 p1.5「落盘 + 血缘」要解决的问题。

修法只有一个:拉一次,落盘,之后所有计算都从落盘文件读,不再联网。

def load():
    """只从落盘文件读 —— 不联网。"""
    t = pd.read_parquet(CACHE)
    print(f"数据来源:{CACHE}(数值哈希 {t['value_hash'].iloc[0]},拉取于 {t['fetched_at'].iloc[0]})")
    return t.pivot(index="date", columns="symbol", values="close")[TICKERS].dropna()

落盘之后再验一次:两次运行的输出逐字节相同。

本节所有数字都出自 _shared/etf_multiasset.parquet,数值哈希 222e5ad4c379,拉取于 2026-07-31 21:25。

一个联网重取的脚本不可复现;只有落盘之后的脚本才可复现。这句话在 P1 讲过,在这里被自己撞了一次。

顺带说明:后来连续 5 次拉取又变得完全一致——漂移是间歇性的,这比稳定的错误更难发现。

一、60/40 的风险是怎么分的

方案美股长期美债黄金商品
60/40 权重60.0%40.0%00
60/40 风险贡献89.0%11.0%00
四资产等权 权重25%25%25%25%
四资产等权 风险贡献27.9%6.7%30.9%34.4%

即使四个资产等权,风险贡献也从 6.7% 到 34.4%,差 5 倍。

因为风险贡献取决于波动率和相关性,不取决于你投了多少钱。

🔧 动手做:看看"分散"的 60/40 到底散不散(5 分钟)

python risk_parity.py,看【一】60/40 的风险是怎么分的。

你会看到(实测):60% 股 40% 债听着很分散,但风险贡献几乎全在股票那边(风险贡献极差:按逆波动率算 19.6pp);那 40% 的债几乎不贡献风险,也就几乎不提供保护。ERC(等风险贡献)才把极差压到 0.0pp

想明白:权重分散 ≠ 风险分散。股票波动是债券的好几倍,60/40 的命运基本还是股票的命运。真要分散风险,得按"每个资产贡献同样的风险"配(ERC),而不是按钱平分。

二、两种风险平价实现

资产逆波动率 权重%风险贡献%ERC 权重%风险贡献%
美股22.723.723.525.0
长期美债29.612.837.125.0
黄金24.632.419.525.0
商品23.131.019.925.0

风险贡献的极差:逆波动率 19.6 pp,ERC 0.0 pp。

  • 逆波动率是"忽略相关性"的近似:权重正比于 1/σ。简单,但风险贡献仍然不平
  • ERC(等风险贡献) 把相关性也算进去,风险贡献才真正拉平

ERC 不需要优化器,一段乘性迭代就够:

def erc_weights(cov, iters=500):
    n = len(cov)
    w = np.full(n, 1.0 / n)
    for _ in range(iters):
        mrc = cov @ w                      # 边际风险贡献
        w_new = 1.0 / np.maximum(mrc, 1e-12)
        w_new /= w_new.sum()
        if np.max(np.abs(w_new - w)) < 1e-10:
            return w_new
        w = 0.5 * w + 0.5 * w_new          # 阻尼,避免震荡
    return w

回测里的协方差只用过去 252 个交易日估计,月度调仓——和前面所有节一样,引擎结构上拿不到未来数据。

三、长期表现(月度调仓,单边成本 10bp,不加杠杆)

方案年化%年化波动%夏普最大回撤%
60/407.8211.040.738-30.1
四资产等权6.179.900.654-27.7
逆波动率6.299.250.706-21.5
ERC 风险平价7.208.840.830-19.5
(参照)纯美股10.7719.610.620-55.2

ERC 的年化比纯美股低 3.6 个百分点,但最大回撤只有它的三分之一多一点(-19.5% vs -55.2%),夏普 0.830 vs 0.620。

⚠️ 避坑

"夏普更高"不等于"更适合你"。

纯美股 19.5 年年化 10.77%,ERC 是 7.20%。同样投 100 万:

  • 纯美股 → 736 万
  • ERC → 389 万

差了 347 万。这是为"回撤从 -55% 降到 -19.5%"付的价格。

值不值,取决于两件事,而且都不在数据里: ① 你会不会在 -55% 的时候卖掉(卖掉就拿不到那 736 万) ② 这笔钱有没有可能在低点被迫动用

这正是 p5.10 要正面处理的问题:从可承受回撤反推仓位,而不是从收益率反推。

四、软肋:2022 年

分年看(单位 %):

年份60/40四资产等权逆波动率ERC纯美股
2008-13.13-10.85-2.88+6.47-36.24
2013+10.90-6.63-4.99+1.18+29.00
2018-3.02-4.80-3.71-2.98-5.25
2020+18.61+13.32+12.87+10.30+17.24
2022-22.56-7.28-9.10-10.10-18.65
2023+15.92+8.59+8.74+8.21+26.71

2008 年是风险平价的高光:纯美股 -36.24%,ERC +6.47%

2022 年是它的软肋:利率快速上行,股和债同时下跌。ERC 虽然比 60/40 少亏一半(-10.10% vs -22.56%),但它也亏了——重仓的低波动资产不但没有对冲,反而是重灾区。

五、样本内部换过一次天

这是本节最重要的一条边界:

长期美债 2007~2020:年化  +7.43%,最大回撤 -26.6%,同期股债相关 -0.440
长期美债 2021~2026:年化  -8.02%,最大回撤 -44.0%,同期股债相关 +0.076

股债相关由负转正,正是 2022 年"分散化失效"的机制。

风险平价的全部逻辑建立在"不同资产在不同环境下此消彼长"之上。当相关性从 -0.44 变成 +0.08,这个前提就动摇了。

所以那句常见的宣传——"风险平价穿越牛熊"——在这份数据里只对前 14 年成立

而 14 年,恰恰长到足以让人相信它是规律。

六、这一节该带走什么

风险平价解决的是"风险分配",不是"收益预测"。

它让你知道自己承担的是什么风险,而不保证这些风险会得到补偿

它能做它不能做
把风险贡献拉平(ERC 极差 0.0 pp)预测哪个资产会涨
显著降低回撤(-19.5% vs -55.2%)在所有资产同跌时保护你(2022)
让你看清 60/40 其实是 89/11保证相关性结构不变
❓ 测验
你把组合改成「股票 25%、债券 25%、黄金 25%、商品 25%」,然后说「我已经充分分散了」。哪里不对?
✏️ 填空
60/40 组合里股票的权重是 60%,而它对组合风险的贡献是 ___%。

📌 免责:本课为技术教学,所用 ETF 仅作资产类别代理,不推荐任何标的或资产配置方案;为美元资产、不含汇率对冲、不加杠杆,历史模拟不构成投资建议。

✅ 小结

四件事:

  1. 权重分散 ≠ 风险分散。60/40 里股票权重 60%、风险贡献 89.0%;即使四资产等权,风险贡献也从 6.7% 到 34.4%,差 5 倍
  2. 两种实现的差别在相关性。逆波动率忽略相关性,风险贡献极差仍有 19.6 pp;ERC 把协方差算进去,极差 0.0 pp,而且一段乘性迭代就能解,不需要优化器
  3. 长期表现:ERC 夏普 0.830、最大回撤 -19.5%,而纯美股是 0.620 和 -55.2%;代价是年化低 3.6 个百分点——19.5 年下来 100 万变 389 万 vs 736 万值不值取决于你会不会在 -55% 时卖掉,而那不在数据里
  4. 软肋在 2022:股债同跌,ERC -10.10%(比 60/40 的 -22.56% 好,但仍是亏)。根因在第五节:长期美债 20072020 年化 +7.43%、股债相关 -0.440;20212026 年化 -8.02%、相关 +0.076

一句话:风险平价解决的是"风险分配",不是"收益预测"。它让你知道自己承担的是什么风险,而不保证这些风险会得到补偿。

下一节是 P5 的收尾,也是把前面所有节接上你自己的那一节:从"我能承受多少回撤"反推"我该放多少仓位"。这是整章唯一一个答案不来自数据、而来自你自己的参数。

下一节 → 风险预算:从可承受回撤反推仓位上限
🔎 来源与核验· 7 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「四资产 2007-01-03 ~ 2026-07-29(4923 个交易日)单资产表现:SPY 年化 10.77%/波动 19.61%/夏普 0.620/回撤 -55.2%;TLT 2.79%/15.05%/0.258/-48.4%;GLD 9.57%/18.11%/0.595/-45.6%;DBC 2.17%/19.30%/0.208/-76.4%」
📚 本节 code/risk_parity.py,2026-07-31 于 ECS 实测(yfinance,auto_adjust),输出见 code/outputs/stdout.txt✓ 已核验 2026-07
「风险贡献分解(全样本协方差):60/40 中股票权重 60% 而风险贡献 89.0%、债券 40% 对 11.0%;四资产等权的风险贡献为 27.9%/6.7%/30.9%/34.4%」
📚 同上实测✓ 已核验 2026-07
「两种风险平价权重:逆波动率风险贡献极差 19.6 pp;ERC 权重(美股 23.5%/美债 37.1%/黄金 19.5%/商品 19.9%)风险贡献均为 25.0%,极差 0.0 pp」
📚 同上实测✓ 已核验 2026-07
「月度调仓、单边成本 10bp、不加杠杆的长期表现:60/40 年化 7.82%/夏普 0.738/回撤 -30.1%;四资产等权 6.17%/0.654/-27.7%;逆波动率 6.29%/0.706/-21.5%;ERC 7.20%/0.830/-19.5%;纯美股 10.77%/0.620/-55.2%」
📚 同上实测✓ 已核验 2026-07
「分年表现:2008 年 ERC +6.47% vs 纯美股 -36.24%;2022 年 ERC -10.10%、60/40 -22.56%、纯美股 -18.65%」
📚 同上实测✓ 已核验 2026-07
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · p5.10
风险预算:整章唯一一个答案不来自数据的参数
继续读下一节 →