halo 的技术博客

返回

股票长期向上,这是常识。但真正吃掉投资者的是那几次崩盘——2008 年、2020 年 3 月、哪怕只是某次 -30% 的单月暴跌,足以把一个本来该赚钱的账户打到几年翻不了身。

有没有一种办法,让组合平时照常涨、崩盘时把地板焊住

有,而且是最古老的期权策略之一:保护性看跌(Protective Put)。逻辑极其朴素——

你持有一揽子股票,再滚动买入虚值看跌期权。股票涨,看跌过期作废,你付一点权利金,但股票收益照拿;股票崩,看跌变成实值,把下跌垫住,你的损失被锁在「行权价以下一点点」。

这就是给股票组合买一份保险。本文用 Black-Scholes 从零实现滚动 3 月看跌 overlay,跑通成本与保护的全账本,最后诚实拆穿它落地时最容易被忽视的五类陷阱。

数据声明:全文为自洽合成(月度 GBM 叠加两次人为崩盘,仅用于演示对冲机制),量级均为合成校准。真实指数里波动率曲面、股息、展期时点都会改写结果——重点看方法对账逻辑

一、Protective Put 的账本:保险怎么定价#

持有一股价格 SS 的股票,买入一份行权价 KK、到期 TT 的欧式看跌,组合在到期时的 payoff 是:

max(ST,K)股票与看跌取大PutPremium已付保费\underbrace{\max(S_T, K)}_{\text{股票与看跌取大}} - \underbrace{\text{PutPremium}}_{\text{已付保费}}

关键性质:下行被行权价 KK 焊住,上行无限。看跌期权就是那个「地板」。

我们用 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:崩盘时 cushion、平静期付保费

二、滚动 overlay 的实现:每 3 个月续一份 5% 虚值看跌#

实务里没人买一份永不到期的看跌,而是滚动续保——每 3 个月买一份新的、行权价设为当时指数的 95%(即 5% 虚值)、期限 3 个月。每次 roll 付一次权利金,持有期内逐月对看跌做 mark-to-market:

三、成本拆解:权利金是持续拖拽、看跌价值在崩盘爆发#

仔细观察保护组合的净值构成,会发现两段截然不同的故事:

  • 平静期:看跌过期作废,你每个月都在「白交保费」,净值被持续往下拽;
  • 崩盘月:看跌瞬间变实值,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 改成 (rq)(r-q)

4. 展期跳点陷阱:每次 roll 是「卖旧买新」两个动作,在跳空缺口日做会有滑点;更隐蔽的是旧看跌到期归零的瞬间,新看跌还没积累实值,组合在这几天是「裸奔」的。解法:新旧重叠几天(买新不立刻卖旧),牺牲一点成本换连续保护。

5. 过度对冲陷阱:保护组合把下跌焊在 K 附近,但也把上涨的弹性砍掉——牛市里你跑输买入持有一大截(本文 2.57x vs 1.93x)。很多人买了保险又忍不住「再抄底」「再加杠」,等于把保险白买还加倍风险。保护 overlay 是仓位管理工具,不是让你更激进去赌的 license


一句话总结:保护性看跌 overlay 是给股票组合买一份尾部保险——崩盘当月它能对冲掉 20+ 个百分点跌幅(本文实证 22.3 / 8.9 个百分点),但代价是每年约 5% 的保费拖拽、且全样本回撤未必更小。它买的是**「不怕崩盘」的睡眠权**,不是超额收益。任何一座「择时错配 / 微笑低估 / 股息漏记 / 展期跳点 / 过度对冲」的大山没翻过,回测里的保护都会在实盘里打折。

(全文为自洽合成演示,量级非真实市场数据;真实落地需接入期权波动率曲面、股息率、展期成本,并评估危机战术对冲替代持续续保。)

保护性看跌 overlay 与组合下行保护:用期权给股票买一份保险
https://blog.halo26812.eu.org/blog/protective-put-overlay
Author halo
Published at 2026年7月21日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨