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) − pplaintext当 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 图把机制画得清清楚楚:

注意虚线「盈亏平衡」低于 100:你一开始就把保费付出去了,所以标的必须涨过保费才算真赚。保险的第一笔成本,是确定的。
二、Python:滚动对冲回测#
关键不在「买一次看跌」,而在「持续滚动」——这才是机构实际的做法。每个季度初,用组合价值的 f 份去买虚值看跌(保护组合价值的 f 比例),到期结算 payoff,再滚下一期。我们刻意把保费先扣、payoff 按组合单位结算,避免单位错配:
def roll_hedge(f, mat_days=63, m=0.95):
hv = np.ones(N); hv[0] = price[0]
Hh = mat_days
nr = N // Hh
fees = 0.0
for k in range(nr):
t0 = k * Hh; t1 = min(t0 + Hh, N - 1)
entry = hv[t0]
Kk = entry * m # 5% 虚值行权价
sig = iv_of(t0) # 危机时 IV 飙升 → 保险最贵
put_px = bs_put(entry, Kk, Hh / 252.0, sig)
prem = f * put_px # 保费(组合单位)
hv[t0] = entry - prem # 支付保费
fees += prem
prot = price[t1] / price[t0] # 期末标的/期初标的
payoff = f * max(Kk - entry * prot, 0.0)
hv[t0:t1 + 1] = hv[t0] * price[t0:t1 + 1] / price[t0]
hv[t1] = hv[t0] * prot + payoff
return hv, fees
eq_nv = price.copy()
hd_nv, tot_fee = roll_hedge(0.95, 63, 0.95) # 覆盖 95%, 3M, 95% 虚值python这里有个真实细节:iv_of(t) 让隐含波动在危机时飙升(“危机买保险最贵”),所以你在最该保命的时候,保费也最贵——这是实盘里最反直觉、也最容易被忽略的一点。
三、回测结果:保护有效,但贵得离谱#
把对冲组合和纯持股画在一起:

数字很能说明问题(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」(用看跌保护组合价值的比例):

| 覆盖比例 | 最大回撤 | 年化收益 |
|---|---|---|
| 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 回撤),长期稳定跑输持股。
但这不等于「不要对冲」。聪明的用法是:
- 危机时点的战术对冲:当你自己判断(或波动率/利差/广度等信号显示)尾部概率飙升时,再买保险。平时不买,省下保费;危机买,精准保护。这把「保险」从「每年必付」变成「按需付费」。
- 更便宜的尾部工具:
- Put Spread(看跌价差):买虚值 put + 卖更虚值 put,用卖出的权利金补贴买入的成本,保费能砍掉一大半,代价是超尾部不保。
- VIX 看涨 / 尾部期权:用极小权利金押注波动率尖峰,崩盘日 VIX 暴涨时获利对冲股票损失,成本远低于滚动 equity put。
- 波动率目标 / 趋势过滤:把仓位随波动缩放、或用中期趋势信号在崩盘初期降仓——这类「内生对冲」几乎零保费,却能在大多数危机里减损。
- 只在真正不可承受的账户上保:养老金、刚建仓的大资金,用少量预算买「超尾部」保护(deep OTM、长到期)即可,不要试图保每一寸波动。
一句话:保险值得买,但要用对场景、用对工具、用对价格。 持续、全面、用贵价 equity put 去保,是大多数个人和机构都亏在上面的坑。
六、六类真实陷阱#
- IV 溢价陷阱:回测用历史 realized vol 定保费会严重低估——实盘危机时 IV 暴涨,保费最贵,你恰恰在最需要时付最多。
- 上证/个股的卖空与流动性约束:A 股股指期权对冲工具有限、流动性在危机时干涸,保护性看跌的「到期结算」在实盘可能平不掉。
- 展期磨损(roll bleed):季度滚动意味着不断「卖近买远」或重新定价,contango 下每份新 put 都比上一份贵,磨损藏在回测之外。
- 单位错配:把「保费占标的 %」直接当「占组合 %」去减仓,会高估保护、低估成本——本文已用组合单位严格结算。
- 幸存者/单路径偏差:一次 20 年合成只是一条路径;真实结论要靠多路径 + bootstrap,单一样本可能刚好「保费拖垮」或「保护神佑」。
- 税费与执行滑点:期权买卖价差、印花税、行权成本会再吃一层,实盘对冲成本比回测高 1–3 个百分点。
结论#
给组合买保险,机制上对、危机里灵——本文回测里最坏季度 −23.9% 被砍到 −8.6% 就是证据。但「持续买」的经济账算不过来:年化约 16.5% 的保费拖拽,换来仅约 6 个百分点的尾部减损,长期稳定跑输。真正的答案不是「买不买」,而是平时不买、危机买;用便宜工具买、用内生对冲替;只保不可承受的账户。把保险当常设成本,是量化里最贵的一个直觉。