halo 的技术博客

返回

一行公式撑起整个保本理财行业#

你在银行看到的”保本浮动收益”、“90% 保本型 FOF”、“目标保底净值 0.85”,绝大多数底下跑的都是同一个东西,而它的核心只有一行:

风险敞口 = m × (当前净值 − 保本底线)
plaintext

括号里那部分叫缓冲垫(cushion),是你距离”输不起的那条线”还有多远。乘数 m 决定你把这段安全距离放大几倍去买风险资产。

Perold 和 Black-Jones 在 1980 年代把它形式化为 CPPI(Constant Proportion Portfolio Insurance,固定比例组合保险)。它的行为直觉一句话讲完:

  • 赚钱 → 净值抬高 → 缓冲垫变厚 → 加仓
  • 亏钱 → 净值下滑 → 缓冲垫变薄 → 减仓
  • 亏到贴着底线 → 缓冲垫归零 → 清仓,永久躺平

最后那条是全部安全性的来源,也是全部代价的来源。理解 CPPI 的关键不在于它怎么保本——那是显然的——而在于它为这份保本付出了什么。这篇文章就是把那笔账算清楚。


引擎实现#

完整实现比大多数人想象的短。需要小心的只有两处:底线本身按无风险利率增长(保本是终值口径的承诺),以及不再平衡的日子里权重会随市场自然漂移。

max(V - F, 0) 那个截断是灵魂:缓冲垫一旦归零,w_target 恒为 0,组合永久转入纯无风险资产。这就是所谓的 cash lock(现金锁死)——后面会看到它既是保险,也是诅咒。


三种行情下它到底在干什么#

用几何布朗运动生成四年(1008 个交易日)行情。为避免”名叫牛市实际在跌”这种标签矛盾,我按实现终值筛选了代表性路径。m=4,底线 80%,每日再平衡。

CPPI 机制

行情风险资产终值CPPI 终值风险资产回撤CPPI 回撤
牛市1.7951.737−16.8%−16.8%
熊市0.3640.867−70.5%−19.1%
震荡市0.9710.911−32.3%−15.4%

下排的仓位曲线比上排的净值曲线更能说明问题:

  • 牛市:仓位早早顶到 100% 然后一直贴着上限。缓冲垫越滚越厚,m × cushion 早就超过 1.0,被 w_cap 截断。此时 CPPI 退化成买入持有,1.737 vs 1.795 的差距只是初期尚未满仓时踏空的那一小段。
  • 熊市:仓位从 80% 一路单调下滑到接近 0,然后躺平。风险资产腰斩再腰斩(−63.6%),CPPI 守住 0.867、回撤只有 19.1%。保险生效了。
  • 震荡市:仓位在 15%~45% 之间高频抖动,净值 0.911 略输给买入持有的 0.971,但回撤从 32.3% 砍到 15.4%。

牛市那一栏值得多看一眼:CPPI 在单边上涨里的回撤和买入持有完全相同(都是 −16.8%)。因为满仓状态下它就是买入持有,一分钱保护都没有。CPPI 的保护只在净值向底线靠拢时才启动,而牛市中途的回调发生在缓冲垫最厚的时候。

指望它削平牛市途中的颠簸,是对这个工具的误解。


乘数扫描:三条形状完全不同的曲线#

m 是唯一的核心参数。扫描 1 到 10:

乘数扫描

行情m=1m=3m=10
牛市终值1.2261.795
熊市终值0.9390.867
震荡市终值0.9540.867

三条曲线的形状完全不同,这正是参数选择困难的根源:

  • 牛市单调上升:m 越大越好,m=10 时全程满仓,直接吃满 1.795
  • 熊市单调下降:m 越大跌得越早越狠,但因为底线兜底,终值下限被锁死在 0.867 附近
  • 震荡市倒 U:m=3 时 0.954,m=10 时跌到 0.867

震荡市那条倒 U 是 CPPI 最本质的弱点。CPPI 是天生的追涨杀跌——涨了加仓、跌了减仓。在无趋势的来回震荡里,这个行为模式每次都在相对高位加、相对低位减,反复挨刀。波动侵蚀(volatility decay)不是实现瑕疵,是策略定义的必然推论。

换手那一栏则给出了一个反直觉的发现:年均单边换手在 m=3 时是 2.2,m=10 时反而降到 0

原因是高 m 让组合长期顶满 w_cap——顶满就不需要调仓了。所以”m 越大交易成本越高”是错的,真实关系是中等 m 的换手最高,因为只有中等 m 才会让仓位长期停在需要频繁微调的区间。


缺口风险:1/m 是理论上的生死线#

CPPI 的保本承诺建立在一个隐含假设上:价格连续,你总有机会在击穿底线前调仓。

跳空缺口直接违反这个假设。

理论很清楚:满仓风险敞口为 m × cushion,若风险资产单日下跌 g,损失为 m × cushion × g。当 m × cushion × g > cushion,即 g > 1/m 时,底线被击穿。

  • m=2 → 能扛 50% 单日跳空
  • m=4 → 25%
  • m=6 → 16.7%
  • m=8 → 12.5%

实测(平稳上行 250 天后遭遇单日跳空):

缺口风险

乘数理论阈值 1/m实测首次破底
m=250.0%50% 内未击穿
m=425.0%27.5%
m=616.7%20.0%
m=812.5%17.5%

实测阈值系统性地高于理论值。原因是 250 天上涨后缓冲垫已经增厚,且 w_cap=1.0 的无杠杆约束让实际敞口低于 m × cushion

但方向上理论完全正确:m 越大,能扛住的一夜之间就越小。选 m=8 意味着你在赌单日跳空不超过 17.5%。2020 年 3 月美股熔断、2024 年 8 月日经单日 −12.4%,这类事件的量级离这条线并不遥远。

这里有一个残酷的耦合:正是在市场最需要保护的极端时刻,缺口风险最大,而保本承诺最可能失效。组合保险最不可靠的时候,恰好是你最需要它的时候。


再平衡频率:杀伤力全在尾部#

直觉上,调仓越频繁、跟踪越紧、越安全,但成本越高。我用 40 条随机路径(3 年,10bp 单边成本,m=5)检验:

再平衡间隔平均终值平均回撤破底率
1 天1.157−26.3%0%
5 天1.167−26.4%0%
10 天1.167−26.4%0%
21 天1.170−26.6%0%
63 天1.159−27.1%22%

看均值你会得出”频率无关紧要”的结论——1.157 到 1.170 的差异完全在噪声范围内,10bp 的成本几乎看不出来。

但最后一列是断崖:季度再平衡的破底率是 22%,每日到月度都是 0%。

这是典型的尾部风险结构。用平均终值或平均回撤这类中心统计量做决策,会完全错过它。日频到月频之间你可以随便选(甚至月频略优,因为少挨了些震荡市里的追涨杀跌),但跨过某个阈值后保本承诺会以离散的方式崩塌

一个务实的替代方案是阈值触发再平衡:只在实际权重偏离目标超过某个百分比时才调整。它在平静期省下换手,在剧烈波动期自动提高调仓频率——恰好把交易花在刀刃上。


蒙特卡洛:这笔交易的完整账单#

前面都是单条路径或小样本。600 次蒙特卡洛(3 年,μ=6%,σ=20%)给出完整分布:

蒙特卡洛

策略均值中位数5% 分位95% 分位跌破 0.8 概率
CPPI (m=4)1.1711.0060.8621.8830.0%
买入持有1.2091.1450.6242.00916.7%
恒定混合 60/401.1471.1270.7831.5796.0%

这张表是全文的结论。

CPPI 兑现了承诺:600 条路径无一跌破 0.8,5% 分位 0.862 远高于买入持有的 0.624。

代价同样真实:中位数 1.006 比买入持有的 1.145 低了 14 个百分点。一半以上的路径里,CPPI 只是勉强跑赢现金。

分布形状比数字更直白:CPPI 的净值分布左侧被 0.8 那条线硬生生截断,同时右侧比买入持有明显更薄。它不是”降低风险且保持收益”,而是把左尾切下来的一部分,连同右尾的一部分,一起换成了确定性

和恒定混合 60/40 的对比更能说明 CPPI 的定位。60/40 的中位数 1.127 略高于 CPPI 的 1.006,跌破 0.8 的概率 6.0% 也不算高。如果你的约束是”控制风险”,60/40 更简单也更便宜;只有当约束是”绝对不能跌破某条线”时,CPPI 的复杂度才有意义。

这是一个硬约束优化问题,不是收益优化问题。搞混这一点,就会用错工具。


棘轮版:把底线钉在历史新高上#

标准 CPPI 有个明显缺陷:底线永远锚定期初本金。净值涨到 1.8 之后,理论上你可以从 1.8 一路跌回 0.8 而”没有违反承诺”——但没有任何投资者能接受这种事。

棘轮 CPPI(ratchet / TIPP)的修正是让底线跟随净值新高上调:F = max(F, peak × 0.80)

棘轮 CPPI

行情标准终值 / 回撤棘轮终值 / 回撤
牛市1.737 / −16.8%1.429 / −10.5%
熊市0.867 / −19.1%0.890 / −17.0%
震荡市0.911 / −15.4%0.913 / −15.1%

代价集中在牛市:终值从 1.737 掉到 1.429(少赚 17.7%),换来回撤从 16.8% 降到 10.5%。这正好补上了前面指出的那个洞——标准 CPPI 在牛市中途毫无保护,棘轮版把浮盈锁进了底线。

熊市和震荡市里两者几乎无差别,因为底线从未被抬起过。

**棘轮把”保住本金”改成了”保住战果”。**代价是你在每一波上涨中都提前锁死了一部分参与度,且更容易触发 cash lock——一旦从高点回落到棘轮底线,你会在相对高位永久清仓,之后的反弹一分都吃不到。


三盆冷水#

**第一,cash lock 是永久性的,而市场会反弹。**缓冲垫归零后 w_target 恒为 0,此后无论行情多好都与你无关。前面熊市那条路径里 CPPI 在中途就基本清仓了——如果第四年出现 V 形反转,它一分都吃不到。这不是 bug,是保本承诺的数学必然:**要保证不跌破底线,就必须在贴近底线时放弃所有向上参与度。**实务上的缓解手段(设置最低仓位、缓冲垫低于阈值时暂停减仓)本质都是在偷偷放弃保本承诺,做之前请想清楚你在放弃什么。

第二,“保本”是概率陈述,不是保证。缺口风险那一节已经证明,m=8 遇上 17.5% 的跳空就会失守。此外,底线的兑现依赖于无风险资产真的无风险——2022 年债券和股票同步下跌时,“安全”的那一半也在亏钱。宣传材料里的”保本”通常还附带一堆前提:持有到期、发行方不违约、市场不出现极端缺口。CPPI 提供的是在连续价格路径假设下的保本,而危机恰恰是这个假设失效的时刻。

**第三,最优 m 依赖你无法预知的未来行情。**乘数扫描已经很清楚:牛市里 m 越大越好,震荡市里 m=3 附近最优,熊市里 m 越小越好。你必须在事前选定一个 m,而它的表现完全取决于事后才知道的 regime。常见的”波动率自适应 m”(如 m = 目标风险 / 已实现波动)是个合理方向,但它把参数选择问题换成了波动率预测问题——而波动率在崩盘时的跳变速度往往快过任何估计窗口的反应速度。没有免费的午餐,只有换个地方交的学费。


什么时候该用它#

用一个判据自检:你有没有一条真正硬的底线?

  • 有明确的绝对底线(保本理财产品、养老金给付下限、监管资本约束、“这笔钱明年要付首付”)→ CPPI 是为你设计的。它把一个软性的风险偏好问题变成硬约束满足问题,而且实现只有几十行代码。
  • 只是”想少亏点” → 用 60/40 恒定混合。前面的数据显示它中位数更高、复杂度更低、无 cash lock 风险,唯一劣势是不给绝对保证。
  • 追求长期最大化终值 → 别用 CPPI。中位数 1.006 vs 买入持有 1.145 已经说明一切,你在为一份不需要的保险持续付费。

参数上,如果确实要用:

  • m 取 3~5:能扛 20%~33% 的单日跳空,换手也在可控范围
  • 底线设 80%~90%:太高会让缓冲垫从一开始就薄到没有参与度
  • 月频或阈值触发再平衡:日频没有额外收益,季度频率的 22% 破底率不可接受
  • 想保住浮盈就上棘轮,但接受牛市少赚约 18% 和更早触发 cash lock

最后一句:CPPI 不是一个能让你赚更多钱的策略,它是一个能让你在特定情形下不被迫离场的机制。当你的负债端有刚性约束时,“不被迫离场”本身就值那笔保费。没有这个约束还去买这份保险,就只是白交钱。

CPPI 组合保险:用动态乘数在保本底线上追逐风险资产
https://blog.halo26812.eu.org/blog/cppi-portfolio-insurance
Author halo
Published at 2026年7月30日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨