halo 的技术博客

返回

2008 年、2020 年 3 月,很多长期持有的投资者不是被市场「打败」的,而是被自己的回撤「吓退」在最低点。于是一个自然的问题出现了:能不能给组合买份保险,平时付点保费,崩盘时少亏点? 期权市场给出的标准答案就是保护性看跌(Protective Put):持有股票的同时,买入看跌期权,把下行封顶。

但「保险」从来不是免费的。本文把这笔账算到底:用 Black-Scholes 给看跌定价,再做一个 20 年(5040 个交易日)的滚动对冲回测——95% 持股 + 持续把组合价值的 5% 拿去买 3 个月虚值(95%)看跌。结果很扎心也很有价值:对冲后年化从 +4.4% 被保费拖到 −2.6%,单季保费约 4.1%(年化拖拽 16.5%),而最坏季度只从 −23.9% 减到 −8.6%。结论先放在这里:持续滚动买保险不值,但危机时点的战术对冲、以及更便宜的尾部工具才真正划算。

保护性看跌成本:越接近平值越贵

一、保护性看跌:机制与定价#

保护性看跌的逻辑一句话讲完:你持有 1 单位股票(价值 S),再花 p 买一张行权价 K 的看跌。到期时:

组合价值 = S_T + max(K − S_T, 0) − p
plaintext

S_T 跌破 K,看跌 payoff 把损失补回来,下行被封在 K − p 附近;当 S_T 上涨,你只损失保费 p,上行几乎完整保留。这就是「付保费换保险」。

保费 p 用 Black-Scholes 看跌公式(这里我们忽略分红 q):

from math import erf, sqrt

def bs_put(S, K, T, sig, r=0.02, q=0.0):
    if T <= 0 or sig <= 0:
        return max(K - S, 0.0)
    d1 = (np.log(S / K) + (r - q + 0.5 * sig ** 2) * T) / (sig * np.sqrt(T))
    d2 = d1 - sig * np.sqrt(T)
    N = lambda x: 0.5 * (1 + erf(x / sqrt(2)))
    return K * np.exp(-r * T) * N(-d2) - S * np.exp(-q * T) * N(-d1)
python

不同行权价的保费(3 个月、隐含波动 18%):90%→1.4%,95%→2.8%,100%→5.0%,105%→7.9%,110%→11.4%。规律很直观——越接近平值越贵(保护越实),越虚值越便宜(只保崩盘)。下面这张 payoff 图把机制画得清清楚楚:

保护性看跌 payoff:下行封顶,上行仅损保费

注意虚线「盈亏平衡」低于 100:你一开始就把保费付出去了,所以标的必须涨过保费才算真赚。保险的第一笔成本,是确定的。

二、Python:滚动对冲回测#

关键不在「买一次看跌」,而在「持续滚动」——这才是机构实际的做法。每个季度初,用组合价值的 f 份去买虚值看跌(保护组合价值的 f 比例),到期结算 payoff,再滚下一期。我们刻意把保费先扣、payoff 按组合单位结算,避免单位错配:

这里有个真实细节:iv_of(t) 让隐含波动在危机时飙升(“危机买保险最贵”),所以你在最该保命的时候,保费也最贵——这是实盘里最反直觉、也最容易被忽略的一点。

三、回测结果:保护有效,但贵得离谱#

把对冲组合和纯持股画在一起:

滚动对冲 vs 纯持股

数字很能说明问题(20 年回测):

指标100% 持股95% 股 + 持续买看跌
年化收益+4.4%−2.6%
最大回撤−79.7%−73.5%
单季保费≈ 4.1%(年化拖拽 ≈ 16.5%)
最坏单季(最惨5季同期)−23.9%−8.6%

两句话总结:

  • 保护确实生效:在最惨的若干个崩盘季度,对冲把单季损失从 −23.9% 砍到 −8.6%——看跌在危机里真金白银地补回了缺口。
  • 但代价离谱:每季度约 4.1% 的保费,年化拖拽约 16.5%,硬生生把 +4.4% 磨成 −2.6%。你用 16.5%/年的成本,只买到了约 6 个百分点的尾部减损。

更反直觉的是:对冲后最大回撤(−73.5%)反而比纯持股(−79.7%)没好多少,长期回撤甚至更深。原因是持续对冲的回撤主要来自保费拖拽——组合每个季度都被扣一笔钱,慢慢磨出一条漫长的「水下曲线」,崩盘保护补回来的那点,填不满保费的坑。所以「多买点保险」并不能显著改善回撤,却会把收益吃光。

四、对冲效率扫描:覆盖越多,收益崩得越狠#

我们扫一遍「保险覆盖比例 f」(用看跌保护组合价值的比例):

对冲效率:覆盖比例 vs 回撤/保费

覆盖比例最大回撤年化收益
0%−79.7%+4.4%
50%−75.6%+1.0%
90%−73.5%−2.1%
95%−73.5%−2.6%
100%−73.5%−3.0%

曲线非常诚实:覆盖比例从 0 提到 100%,回撤只改善了约 6 个百分点,年化收益却从 +4.4% 塌到 −3.0%。边际效用极低、边际成本极高。这正是「保险」的经济本质——它的价值在极端尾部,而极端尾部很少发生,所以平摊到每一年,你付的保费远大于你拿回的保护。

五、到底值不值?结论与更聪明的替代#

直接给结论:

把「持续滚动买虚值看跌」当成长期常设策略,不值。 它的年化保费拖拽(约 16.5%)远超它能削减的尾部损失(约 6pp 回撤),长期稳定跑输持股。

但这不等于「不要对冲」。聪明的用法是:

  1. 危机时点的战术对冲:当你自己判断(或波动率/利差/广度等信号显示)尾部概率飙升时,再买保险。平时不买,省下保费;危机买,精准保护。这把「保险」从「每年必付」变成「按需付费」。
  2. 更便宜的尾部工具
    • Put Spread(看跌价差):买虚值 put + 卖更虚值 put,用卖出的权利金补贴买入的成本,保费能砍掉一大半,代价是超尾部不保。
    • VIX 看涨 / 尾部期权:用极小权利金押注波动率尖峰,崩盘日 VIX 暴涨时获利对冲股票损失,成本远低于滚动 equity put。
    • 波动率目标 / 趋势过滤:把仓位随波动缩放、或用中期趋势信号在崩盘初期降仓——这类「内生对冲」几乎零保费,却能在大多数危机里减损。
  3. 只在真正不可承受的账户上保:养老金、刚建仓的大资金,用少量预算买「超尾部」保护(deep OTM、长到期)即可,不要试图保每一寸波动。

一句话:保险值得买,但要用对场景、用对工具、用对价格。 持续、全面、用贵价 equity put 去保,是大多数个人和机构都亏在上面的坑。

六、六类真实陷阱#

  1. IV 溢价陷阱:回测用历史 realized vol 定保费会严重低估——实盘危机时 IV 暴涨,保费最贵,你恰恰在最需要时付最多。
  2. 上证/个股的卖空与流动性约束:A 股股指期权对冲工具有限、流动性在危机时干涸,保护性看跌的「到期结算」在实盘可能平不掉。
  3. 展期磨损(roll bleed):季度滚动意味着不断「卖近买远」或重新定价,contango 下每份新 put 都比上一份贵,磨损藏在回测之外。
  4. 单位错配:把「保费占标的 %」直接当「占组合 %」去减仓,会高估保护、低估成本——本文已用组合单位严格结算。
  5. 幸存者/单路径偏差:一次 20 年合成只是一条路径;真实结论要靠多路径 + bootstrap,单一样本可能刚好「保费拖垮」或「保护神佑」。
  6. 税费与执行滑点:期权买卖价差、印花税、行权成本会再吃一层,实盘对冲成本比回测高 1–3 个百分点。

结论#

给组合买保险,机制上对、危机里灵——本文回测里最坏季度 −23.9% 被砍到 −8.6% 就是证据。但「持续买」的经济账算不过来:年化约 16.5% 的保费拖拽,换来仅约 6 个百分点的尾部减损,长期稳定跑输。真正的答案不是「买不买」,而是平时不买、危机买;用便宜工具买、用内生对冲替;只保不可承受的账户。把保险当常设成本,是量化里最贵的一个直觉。

尾部风险对冲:用期权给组合买保险值不值
https://blog.halo26812.eu.org/blog/tail-risk-hedging-options
Author halo
Published at 2026年7月13日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨