保护性看跌 overlay 与组合下行保护:用期权给股票买一份保险
保护性看跌 overlay(protective put)是把股票组合下行风险焊住的最经典工具:持有一揽子股票 + 长期滚动买入虚值看跌,崩盘时看跌变成实值把损失垫住,平静期则持续付权利金。本文用 Black-Scholes 从零实现滚动 3 月看跌 overlay,自洽合成下两次崩盘分别对冲掉 22.3 与 8.9 个百分点跌幅,但累计保费年化拖拽约 5.4%——诚实拆穿择时错配/微笑低估/股息漏记/展期跳点/过度对冲五类真实陷阱(中阶)。
股票长期向上,这是常识。但真正吃掉投资者的是那几次崩盘——2008 年、2020 年 3 月、哪怕只是某次 -30% 的单月暴跌,足以把一个本来该赚钱的账户打到几年翻不了身。
有没有一种办法,让组合平时照常涨、崩盘时把地板焊住?
有,而且是最古老的期权策略之一:保护性看跌(Protective Put)。逻辑极其朴素——
你持有一揽子股票,再滚动买入虚值看跌期权。股票涨,看跌过期作废,你付一点权利金,但股票收益照拿;股票崩,看跌变成实值,把下跌垫住,你的损失被锁在「行权价以下一点点」。
这就是给股票组合买一份保险。本文用 Black-Scholes 从零实现滚动 3 月看跌 overlay,跑通成本与保护的全账本,最后诚实拆穿它落地时最容易被忽视的五类陷阱。
数据声明:全文为自洽合成(月度 GBM 叠加两次人为崩盘,仅用于演示对冲机制),量级均为合成校准。真实指数里波动率曲面、股息、展期时点都会改写结果——重点看方法与对账逻辑。
一、Protective Put 的账本:保险怎么定价#
持有一股价格 的股票,买入一份行权价 、到期 的欧式看跌,组合在到期时的 payoff 是:
关键性质:下行被行权价 焊住,上行无限。看跌期权就是那个「地板」。
我们用 Black-Scholes 给滚动看跌定价。欧式看跌闭式:
import numpy as np
from scipy.stats import norm
def bs_put(S, K, T, r, sigma):
"""Black-Scholes 欧式看跌价格"""
if T <= 0 or sigma <= 0:
return max(K - S, 0.0)
d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
d2 = d1 - sigma * np.sqrt(T)
return K * np.exp(-r * T) * norm.cdf(-d2) - S * norm.cdf(-d1)python这张图把账本讲清楚:蓝色是保护组合,灰带是两次崩盘。平静期它略低于红色(付保费),崩盘时它几乎不跌——保险在那一刻付了钱。

二、滚动 overlay 的实现:每 3 个月续一份 5% 虚值看跌#
实务里没人买一份永不到期的看跌,而是滚动续保——每 3 个月买一份新的、行权价设为当时指数的 95%(即 5% 虚值)、期限 3 个月。每次 roll 付一次权利金,持有期内逐月对看跌做 mark-to-market:
M = 144 # 12 年 × 12 月
mu_a, sig_a = 0.17, 0.13 # 年化 drift / vol
r_a = 0.02
dt = 1.0 / 12
monthly = (mu_a - 0.5*sig_a**2)*dt + sig_a*np.sqrt(dt)*rng.normal(size=M)
monthly[70] += -0.30 # 第 6 年附近 -30% 崩盘
monthly[107] += -0.17 # 第 9 年附近 -17% 崩盘
idx = np.cumprod(1 + monthly) # 标的财富指数(初始 1)
# 滚动 3 月看跌, 5% 虚值
K_frac, T_put, roll_every = 0.95, 0.25, 3
prem_paid = np.zeros(M); roll_strike = np.zeros(M); roll_date = np.zeros(M, dtype=bool)
for t in range(0, M, roll_every):
K = K_frac * idx[t]
prem_paid[t] = bs_put(idx[t], K, T_put, r_a, sig_a)
roll_strike[t] = K; roll_date[t] = True
# 逐月 mark-to-market 当前在险看跌
put_mtm = np.zeros(M)
for t in range(M):
last = np.where(roll_date[:t+1])[0]
if len(last) == 0:
continue
rr = last[-1]; T_rem = T_put - (t - rr)*dt
if T_rem > 0:
put_mtm[t] = bs_put(idx[t], roll_strike[rr], T_rem, r_a, sig_a)
cum_prem = np.cumsum(prem_paid) # 累计权利金(保险成本)
prot_idx = idx + put_mtm - cum_prem # 保护型组合净值python三、成本拆解:权利金是持续拖拽、看跌价值在崩盘爆发#
仔细观察保护组合的净值构成,会发现两段截然不同的故事:
- 平静期:看跌过期作废,你每个月都在「白交保费」,净值被持续往下拽;
- 崩盘月:看跌瞬间变实值,mark-to-market 价值爆发,把那一截跌幅垫住。
把「标的 − 累计权利金(纯成本)」和「保护组合(含看跌价值)」叠在一起看最清楚:

自洽合成下两组对账数字:
- 标的终值 2.57x,保护组合终值 1.93x(少赚的那截就是保险费);
- 累计权利金占初始约 64%,年化拖拽约 5.4%;
- 崩盘当月(月 70):标的 −28.8%,保护组合仅 −6.6% —— 看跌对冲掉 22.3 个百分点;
- 崩盘当月(月 107):标的 −16.8%,保护组合 −7.9% —— 对冲掉 8.9 个百分点。
结论很诚实:保险在崩盘月是真金白银地付了钱,但代价是每年约 5% 的保费拖拽。
四、回撤对比:保护组合把崩盘削平,但拖拽会抬高峰前#
把两者回撤画在一起,崩盘区的保护一目了然:

这里必须说一句实话:全样本最大回撤上,保护组合(-31.7%)并没有比买入持有(-28.8%)更小——原因是保费拖拽让保护组合在「崩盘恰好发生在续保后不久、看跌尚未充分积累实值」的窗口反而更脆弱。这正是保护性看跌的灵魂矛盾:
它保护的是「崩盘当月的单月跌幅」(对冲掉 22 / 9 个百分点),不是「整个样本的最大回撤」。 如果你最怕的是那种一觉醒来账户腰斩的瞬间,它是利器;如果你看的是长期夏普,保费拖拽会反噬。
所以保护性看跌的正确定位是**「尾部保险」而非「收益增强」**——它买的不是未来,是睡眠。
五、进阶:什么时候该买、买多虚值#
参数选择直接决定「保费贵不贵、地板焊多低」:
# 参数扫描:虚值深度 vs 续保频率
for K_frac in (0.90, 0.95, 0.98): # 越接近平值 -> 保护越强、保费越贵
for roll_every in (1, 3, 6): # 续保越勤 -> 保护越连续、交易成本越高
...python实务经验:
- 越接近平值(K 越高):地板越高、保护越强,但保费陡增。5% 虚值是常见甜点,2% 虚值保费可能吃掉大半涨幅。
- 续保越勤:保护越连续,但每次 roll 都重新付时间价值,且增加交易摩擦。季频(3 月)是主流折中。
- 危机战术对冲:与其 12 年无脑续保,不如在 VIX 低位、估值高位时战术性加保——保费便宜、保护贵。这是把「持续买不值」变成「便宜时买才值」的关键升级。
六、诚实拆穿五类真实陷阱#
1. 择时错配陷阱(最致命):崩盘若发生在刚续保、看跌还是虚值的窗口,保护很弱;若发生在看跌快到期、已深度实值的窗口,保护很强。上面全样本回撤的差异正是这个。解法:用更长到期(如 6–12 月 LEAPS) 减少续保频率、摊薄时点风险,或改买价差(put spread) 控制成本。
2. 波动率微笑低估陷阱:BS 用常数波动率 σ 定价,但崩盘时 IV 飙升(微笑左翼陡),真实看跌比 BS 贵得多。用 BS 常数 vol 算保费,会系统性低估真实成本——实盘保费比回测高,拖拽比你想的狠。解法:用微笑校准的 IV 或 VIX 期限结构定价。
3. 股息漏记陷阱:股票支付股息时,除息日价格下跌,但看跌期权的标的(指数期货/ETF)已含股息预期。若用「现货价」直接套 BS 而不扣股息率 q,会把看跌定贵,虚增保护、低估成本。正确公式应把 drift 改成 。
4. 展期跳点陷阱:每次 roll 是「卖旧买新」两个动作,在跳空缺口日做会有滑点;更隐蔽的是旧看跌到期归零的瞬间,新看跌还没积累实值,组合在这几天是「裸奔」的。解法:新旧重叠几天(买新不立刻卖旧),牺牲一点成本换连续保护。
5. 过度对冲陷阱:保护组合把下跌焊在 K 附近,但也把上涨的弹性砍掉——牛市里你跑输买入持有一大截(本文 2.57x vs 1.93x)。很多人买了保险又忍不住「再抄底」「再加杠」,等于把保险白买还加倍风险。保护 overlay 是仓位管理工具,不是让你更激进去赌的 license。
一句话总结:保护性看跌 overlay 是给股票组合买一份尾部保险——崩盘当月它能对冲掉 20+ 个百分点跌幅(本文实证 22.3 / 8.9 个百分点),但代价是每年约 5% 的保费拖拽、且全样本回撤未必更小。它买的是**「不怕崩盘」的睡眠权**,不是超额收益。任何一座「择时错配 / 微笑低估 / 股息漏记 / 展期跳点 / 过度对冲」的大山没翻过,回测里的保护都会在实盘里打折。
(全文为自洽合成演示,量级非真实市场数据;真实落地需接入期权波动率曲面、股息率、展期成本,并评估危机战术对冲替代持续续保。)