19 — Hedging & Protection

Portfolio Insurance#

Dynamic FloorStatistical1 min read
◆ The PatternCPPI and OBPI — dynamic protection with a floor

Constant Proportion Portfolio Insurance (CPPI) dynamically allocates between a risky asset and a safe asset (cash/bonds) to protect a minimum floor:

Risky allocation = m × (Portfolio − Floor)
m is the multiplier (typically 3–5). As the portfolio falls toward the floor, the risky allocation shrinks. OBPI uses a put option to guarantee the floor directly. Gap risk is the main danger.
// Interactive — CPPI multiplier and portfolio path
Multiplier m
1987 crash. Portfolio-insurance selling through index futures amplified Black Monday, according to the Brady Report — a cautionary tale about mechanical hedging.
Pattern bridge: CPPI buys as prices rise and sells as they fall, a mechanical feedback loop. In October 1987 portfolio-insurance selling fed the crash it was meant to protect against — an information cascade run by rules.
Worked example

CPPI on 100 with a floor of 80 and a multiplier of 4: start with 80 in the risky asset. After +5% and +3% the exposure grows to 96 and the value to 106.9; after −10% the value is 96.2. Then a one-day −30% crash: exposure was 64.8, the loss is 19.4, and the value ends at 76.8 — below the 80 floor. CPPI protects the floor only if prices move smoothly enough to sell in time.

Where it misleads
  • The floor breaks in a gap larger than 1/m (here 25%); with a higher multiplier the crash needed is smaller.
  • It sells after falls and buys after rises. When many follow the same rule, the selling feeds the fall — the Brady Commission pointed to portfolio insurance in the 1987 crash.
  • After a fall it can lock into cash and miss the recovery: the cushion is gone.
In code
value, floor, m = 100.0, 80.0, 4                          # CPPI: risky exposure = 4 x cushion
for move in [0.05, 0.03, -0.10, -0.30]:                    # the last day is a crash
    risky = min(m * (value - floor), value)
    value = value + risky * move
    print(f"{move:+.0%}  exposure {risky:5.1f}  value {value:5.1f}  floor {floor}")
Python, in your browser — edit the code and run it again

Assumes import numpy as np and import pandas as pd. Each snippet carries its own example numbers; the comments say which are made up or simulated.

Sources
  • F. Black & R. Jones, “Simplifying Portfolio Insurance”, Journal of Portfolio Management 14(1), 1987
  • F. Black & A. F. Perold, “Theory of Constant Proportion Portfolio Insurance”, Journal of Economic Dynamics and Control 16(3–4), 1992
  • Report of the Presidential Task Force on Market Mechanisms (the Brady Report), 1988

Last reviewed October 2026 · How this site checks its content · Report a mistake

Linked from 1
← Previous
Pairs Trading
Open in the full reader, with the topic sidebar