halo 的技术博客

返回

核心结论:尾部对冲的公平比较对象不是「不对冲」,而是「减仓到同样的尾部风险」。 因为降低尾部风险最便宜的办法从来都是少拿一点仓位,而这不需要买任何东西。

一旦换上这个对照组,结论变得非常微妙:同样把 99 分位最大回撤压到 74.70%,买保险的中位 CAGR 是 5.705%,减仓到 85.13% 仓位 + 现金是 5.657% —— 对冲多赚 0.048pp

但如果换成中位回撤口径,判决立刻翻转:同样把中位回撤压到 44.97%,减仓组给 5.854%对冲反而少赚 0.149pp

同一个策略、同一批路径,两个风险口径给出相反的答案。 这不是模棱两可——这恰好说明了尾部对冲在买什么:它买的是分布最右端那一小块,而不是「风险」这个笼统的东西。

左:20 年中位拖累 −0.317pp/年,只有 37.6% 的路径跑赢;右:匹配 99 分位回撤时对冲小胜,匹配中位回撤时对冲落败

一、基准设定#

本文模拟一个最常见的实现:每月买入 1 个月期、执行价 = 90% 现价的看跌期权,名义等于组合市值,到期结算后滚动。

所有参数都是真值,由构造给定

参数说明
标的年化对数漂移7%已做跳跃补偿
扩散年化波动16%
危机跳跃强度 λ0.25 次/年约四年一次
跳跃幅度~ N(−18%, 10%)对数空间
无风险利率2%
执行价90% 现价
保险加成35%保费 = 精算公平值 × 1.35
模拟规模20 年 × 20000 条路径日频,月度滚动

关键的建模选择:保费不用 Black-Scholes 定价,而是用精算公平值 × (1+加成)。

原因是 BS 假设对数正态,而这个世界里有跳跃。用一个平坦的隐含波动去给虚值看跌定价,会得到一个系统性低于真实期望赔付的价格——那样模拟出来的「对冲」会凭空变成一门赚钱生意(第一版就是这样,赔付率 150%,对冲白赚 1.04pp/年)。

改用精算公平值之后,赔付率有了精确的理论预期:

  • 理论 1/(1+0.35) = 74.074%
  • 实测 74.227%
  • 偏差 1.53e-03

保费本身也做了核对:单月期权价 0.0020978,× 12 = 2.5174%/年,与模拟累计保费的偏差 1.39e-17

关键对照组:不对冲的组合与对冲的组合共用同一组随机数,精确配对。两者的一切差异,100% 来自对冲本身。

二、三条安慰剂#

安慰剂 C(先看这条):对冲比例 = 0。 保留全部代码路径,只把名义设为零。

  • 中位 CAGR 拖累 0.000000
  • 逐路径净值最大绝对偏差 0.000e+00
  • 最大回撤最大偏差 0.000e+00

精确为零,不是「约等于」。实现层面没有任何泄漏。

安慰剂 A:公平定价(加成 = 0)。 保费精确等于真实期望赔付,保险公司一分钱不赚。

指标基准(加成 35%)公平定价
中位 CAGR 拖累−0.317pp+0.322pp
年保费2.517%1.865%
赔付率74.23%100.80%
跑赢不对冲的路径占比37.60%56.10%

在公平定价下,买尾部保险是划算的——中位 CAGR 提高 0.322pp。

这个结果值得停一下。保费在期望上精确等于赔付(赔付率 100.80%,误差 0.8%),按线性期望,两边应该打平。但中位数变好了,因为避免大幅回撤本身有几何价值:损失 50% 需要赚 100% 才能回本。对冲把左尾切掉,提升了长期复合增长率——这是 Jensen 不等式在起作用,与择时能力无关。

于是拖累可以精确分解:

公平定价下的几何收益+0.322 pp/年
35% 加成的成本−0.639 pp/年
合计(实测)−0.317 pp/年

尾部对冲本身是有价值的,被吃掉价值的是保费的加成。 这两件事在实务讨论里经常被混为一谈——「对冲是负期望所以不要做」这个说法,在这个模型里是错的;正确的说法是「以当前市场价格买入是负期望」。

盈亏平衡加成是 16.25%,而基准是 35%。安全边际 −53.6%。

安慰剂 B:无跳跃。 把危机跳跃关掉,只留扩散:

  • 中位 CAGR 拖累 −0.046pp(几乎为零,因为 90% 虚值的期权在纯扩散世界里基本不赔付)
  • 赔付率 74.42%(加成结构不变,符合预期)
  • 99 分位回撤:不对冲 70.46% vs 对冲 70.20%(几乎没有改善)
  • 跑赢率 33.68%

保险的标的消失后,保险就只剩成本。 这条安慰剂确认了赔付确实来自跳跃,不是来自扩散段的噪音。

左:三条安慰剂,零对冲逐路径偏差精确 0.000e+00;右:赔付率实测 74.2% 对理论 74.1%

三、97.92% 的月份在付钱#

这是理解尾部对冲最重要的一张图。

把每个月「对冲组合 − 不对冲组合」的相对收益拿出来(共 480 万个月观测):

指标
均值−0.0557%
中位−0.2113%
收益为负的月份占比97.92%
收益为正的月份占比2.08%
最好 1% 月份的平均+12.88%
最好 5% 月份的平均+2.92%
单月最好+48.93%
剔除最好 1% 后的均值−0.1864%(年化 −2.24%)

剔除最好 1% 的月份,这个策略年化亏 2.24%。 全部价值集中在 480 万个月份里的那 4.8 万个。

这个结构有一个直接的实务后果:任何基于「最近表现」的评估,都会在错误的时点做出错误的决定。 在一个没有危机的 3 年里,对冲的拖累是持续的、可见的、每个月都在账单上;而它的价值是一次性的、不可预测的、只在最糟的那个月出现。

这也解释了为什么尾部对冲基金的资金流是顺周期的:危机后大量流入(刚看到赔付),平静期持续流出(每月都在亏)。而这恰好是最差的时点选择——危机后保险最贵,平静期最便宜。

左:97.92% 的月份在付钱,赔付极稀疏;右:剔除最好 1% 月份后年化 −2.24%

四、非单调:更贵的保险给出更差的保护#

这是全文最反直觉的结果。

扫描执行价(虚值程度),其余不变:

执行价/现价年保费中位 CAGR 拖累99 分位回撤年赔付次数
99%21.14%−5.023pp74.2%4.27
97%12.02%−2.593pp71.2%2.57
95%6.85%−1.283pp72.3%1.37
92%3.46%−0.562pp73.8%0.47
90%(基准)2.52%−0.371pp74.6%0.26
85%1.32%−0.173pp76.5%0.13
80%0.60%−0.079pp78.7%0.08
70%0.06%−0.001pp81.6%0.01
不对冲0081.9%

看第一行和第二行。K=99% 的年保费是 21.14%,几乎是 K=97%(12.02%)的两倍,但它的 99 分位回撤(74.2%)反而比 K=97%(71.2%)更差。

原因很直白:保费本身就是回撤。 每年花掉 21.14% 的净值去买保险,这笔支出是确定的、持续的、直接计入净值曲线的。在一段没有危机的时期里,光是付保费就能造出可观的回撤——而保险赔付并不会在那段时间到来。

尾部保护最强的档位是 K=97%(99 分位回撤 71.2%),不是最贵的 K=99%。「买更接近平值的保护」这个直觉,在超过某个点之后会自我抵消。

而单位回撤改善最便宜的档位是 K=80%:花 0.60%/年 的保费,换 3.1pp 的 99 分位回撤改善,每 1pp 改善的成本约 0.026pp/年。K=97% 的同一指标是 0.246pp —— 贵 9.5 倍。

便宜的深度虚值保险效率最高,但它提供的绝对保护量很小。 这是个真实的权衡,不是「哪个更好」的问题。

保险加成剂量反应 / 危机频率过零点 / 越虚值越便宜但保护越少

五、危机要多频繁,保险才回本#

扫描跳跃强度:

跳跃强度中位 CAGR 拖累赔付率跑赢率
0 次/年−0.046pp74.4%33.68%
0.25(基准)−0.371pp74.7%37.40%
0.60 次/年−0.693pp74.6%36.90%
1.30 次/年−1.366pp74.2%33.00%

注意:拖累随危机频率单调恶化,而且全区间没有过零点。

这是因为保费是按精算公平值定价的——危机变多,保费同步变贵,加成 35% 这个比例不变,于是买方永远付出那 35%。赔付率在全区间稳定在 74% 左右,正是这个机制的体现。

这个结果推翻了一个常见说法:「如果未来危机比历史更频繁,尾部对冲就会赚钱。」在一个保险定价会跟随风险调整的市场里,不会。 只有当你对危机频率的判断优于卖方时,才会赚钱——而那是一个关于信息优势的论断,不是关于尾部风险本身的论断。

对冲比例的扫描则是单调且温和的:

对冲比例中位 CAGR 拖累中位回撤99 分位回撤
0048.3%81.9%
0.25−0.063pp46.7%79.3%
0.50−0.183pp45.8%77.0%
1.00−0.371pp44.9%74.6%
1.50−0.612pp45.3%73.9%

注意 1.50 那一行的中位回撤反而回升(45.3% > 44.9%),而 99 分位继续改善。过度对冲开始用中位数的钱去买更深的尾部——同样是保费制造回撤的效应。

六、保护是真的,而且只在尾部#

分位数上的对照非常干净:

最大回撤分位不对冲每月买保险改善
50 分位48.12%44.97%+3.15pp
95 分位72.55%65.72%+6.83pp
99 分位81.76%74.70%+7.06pp

改善随分位数单调增强。 这确认了买到的确实是尾部保护,而不是全局的波动率降低。

收益分布的两端:

分位不对冲对冲
5 分位 CAGR−1.426%−0.680%
中位 CAGR6.022%5.705%
95 分位 CAGR13.424%12.205%

左尾改善 0.746pp,右尾牺牲 1.219pp。 这是一个明确的分布重塑:削掉右边补贴左边,中位数付出 0.317pp 的代价。

如果你的效用函数在左尾足够陡(例如有强制平仓线、有赎回压力、有负债端约束),这笔交易是划算的。如果没有,它就只是把钱从一个口袋换到另一个口袋,中间被收了 0.317pp 的过路费。

左:收益分布两端的重塑;右:保护随分位数单调增强

七、样本量红线:219 年#

月度相对收益的均值 −0.0557%,标准差 1.428%,信噪比 0.039

要以 |t| = 2 确认这个拖累真实存在,需要 2630 个月 = 219.1 年

而 5 年滚动窗口的跑赢率是 35.85%,10 年窗口 37.58%

把这两个数字放在一起看:你需要 219 年才能在统计上确认对冲是亏的,但每个 10 年窗口里有 62% 的概率它看起来确实是亏的。 这两件事不矛盾——前者说的是精确估计拖累的大小,后者说的是判断符号。

实务含义很直接:关于「尾部对冲值不值得」的争论,在任何人的职业生涯长度内都无法用实证数据解决。 双方都能找到支持自己的窗口。这也是为什么这个话题每次危机后都会重新吵一遍。

12 个独立宇宙的中位拖累:CV = 0.1737。明显高于本系列其他文章(多数在 0.01~0.07),而这个数字本身是信息:拖累的估计值高度依赖样本里恰好发生了几次危机——这正是样本量红线 219 年的另一种表述。

八、代码实现#

三个容易踩的坑:

1. 不要用 BS 给这个期权定价。 第一版用了平坦 IV × 1.35 的 BS 价,结果赔付率 150% —— 保险被系统性低估,对冲白赚 1.04pp/年,整篇文章的结论会完全反过来。含跳跃的分布,虚值看跌的真实期望赔付远高于对数正态给出的价格。换成精算公平值 × (1+加成) 之后,赔付率精确落在理论值 74.07% 上。

2. 月度收益的分母口径必须一致。 对冲组合的月初净值要用扣保费之前的值,否则保费会被算进「收益」里,得到一个有偏的相对收益序列。

3. 回撤要在日频上算,不能只在月末采样。 月末采样会系统性低估最大回撤——跳跃通常在月内发生并部分反弹。但逐日 Python 循环跑 5040 步 × 35 次扫描是不可行的(第一版就卡死了)。解法是按月分块:外层 240 个月,内层 21 天一次性生成,用 np.maximum.accumulate 向量化算 running peak。

九、什么时候该买,什么时候不该#

该买的情况:

  • 有硬性平仓线或负债端约束。 如果 −60% 的回撤会触发强制清算或大规模赎回,那么「99 分位回撤从 81.8% 降到 74.7%」不是一个统计学改善,而是生存与否的区别。此时中位数上那 0.317pp 是完全值得的。
  • 买的是深度虚值。 K=80% 每 1pp 回撤改善只要 0.026pp/年,是 K=97% 的 1/9.5。如果目的是防灾而不是平滑净值曲线,越虚值效率越高。
  • 在平静期买。 这个模型里加成是固定的,现实中不是——加成在危机后飙升、在平静期压缩。资金流恰好反着来。

不该买的情况:

  • 目的是「降低波动」或「提高 Sharpe」。 中位回撤口径下,减仓到 92.67% 仓位就能达到同样效果,还多赚 0.149pp。尾部对冲不是减仓的高级版本,它是一个只在极端分位数上起作用的工具。
  • 用近 3~5 年表现来评估。 5 年窗口跑赢率 35.85%,而 97.92% 的月份在付钱。任何基于近期业绩的评估都会在最糟的时点砍掉这个头寸。
  • 相信「危机变多所以对冲会赚钱」。 危机频率从 0 拉到 1.3 次/年,拖累从 −0.046pp 单调恶化到 −1.366pp,全区间无过零点。保费会跟着涨。

最后回到那个分解。在公平定价下,尾部对冲的中位 CAGR 是 +0.322pp/年——它是有价值的。 实际的 −0.317pp,全部来自 35% 的加成,而盈亏平衡加成是 16.25%。

所以真正的问题从来不是「要不要对冲尾部」,而是:你付的这个加成,是 16% 以下还是 35% 以上? 这个数字在市场上每天都在变,而它才是唯一决定答案的东西。

尾部对冲的成本拖累:保险费到底吃掉多少长期收益
https://blog.halo26812.eu.org/blog/tail-hedge-cost-drag
Author halo
Published at 2026年8月7日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨