Protective Put (90-Day Rolled Put) Strategy
A LEAPS call; at +10% a ~90-day 0.30 Δ put, rolled with 30 days left, never to a lower strike
Default settings, 2020 to Nov 4, 2026.
By stock and year
Select a row to chart it below. Shade is the gap to buying and holding that stock.Hedged by design: the protection is part of the strategy, so there is no unhedged version.
| Stock | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 YTD | CAGR | B&H CAGR | Max drawdown |
|---|---|---|---|---|---|---|---|---|---|---|
| +57.0%+41.8 | +80.4%+53.5 | −17.8%+1.7 | +32.0%+7.7 | +49.5%+26.2 | +22.4%+6.1 | +15.2%+2.8 | +31.3% | +13.4% | −31.9% | |
| +100.9%+55.8 | +16.9%−9.9 | −36.0%−2.9 | +53.8%−0.0 | +57.3%+32.5 | +24.1%+3.9 | −2.1%−14.7 | +24.1% | +18.5% | −45.1% | |
| +156.5%+138.0 | +31.6%+18.4 | −16.1%+5.6 | +18.0%+2.9 | +12.9%+2.8 | +15.8%+4.4 | +13.4%−2.0 | +26.2% | +8.2% | −42.9% | |
| +7.3%−110.5 | +11.6%−113.6 | −13.0%+37.4 | +45.8%−193.1 | +52.0%−119.2 | −0.5%−39.3 | −9.1%−9.2 | +11.3% | +65.2% | −33.6% | |
| +111.9%+35.2 | −18.1%−52.0 | −34.1%−7.2 | +27.6%−20.6 | +32.7%+2.6 | +7.1%−1.4 | +37.6%+9.1 | +16.5% | +25.2% | −57.7% |
Growth of $10,000
Weekly closes on a log scale; the red shade is the strategy's drawdown from its last high. Returns are on the capital the strategy needed at its peak, with interest on idle cash. Hypothetical: how the backtests are made.
Rules · the when / do flow, read-only until you make a copyShow flow
The strategy runs as 2 tracks side by side. Each day, the first rule whose conditions hold in each track acts.
1. LEAPS + floor
- PS1Rule
When:
leg.leap.open == 0Do: buy call (as leap)delta 0.80dte 730 - PS2Rule
When:
spot >= leg.leap.entry_spot * 1.10Do: close wait_call; buy put (as floor_put)delta 0.30dte 90expiry_max leg.leap.expirystrike_min leg.leap.strike + 1 - PS5Rule
When:
leg.leap.dte <= 270 or leg.leap.delta >= 0.95Do: close wait_call; roll leapdelta 0.80dte 730 - PS5Rule
When:
leg.leap.dte <= 270 or leg.leap.delta >= 0.95Do: close floor_put; roll leapdelta 0.80dte 730 - PS7Rule
When:
leg.floor_put.dte <= 30Do: roll floor_putdelta 0.30dte 90expiry_max leg.leap.expirystrike_min leg.floor_put.strike - Rule
When:
leg.floor_put.open == 0Do: nothing (hold)
2. Covered call while waiting
- PS8Rule
When:
leg.leap.open == 1andleg.floor_put.open == 0andleg.wait_call.open == 0Do: sell call (as wait_call)delta 0.20dte 40strike_min spot + 1 - PS8Rule
When:
leg.floor_put.open == 1Do: close wait_call - Rule
When:
leg.wait_call.open == 0Do: nothing (hold) - PS8Rule
When:
leg.wait_call.dte <= 3Do: roll wait_calldelta 0.20dte 40strike_min spot + 1
Make a copy to change any of it and run your own backtest.
Trade log · every open, roll, assignment and close for SPYShow trades
Loading…
A LEAPS call; at +10% a ~90-day 0.30 Δ put, rolled with 30 days left, never to a lower strike
What it is
An example built from the LEAPS call + Protective Put rules: hold a LEAPS call and, once the stock is up 10%, buy a 0.30 delta put about 90 days out, rolled with 30 days left and never to a lower strike, so the floor only ratchets up.
When to use it
Use it to see how a shorter, cheaper rolled put compares with a put that runs to the LEAPS call's expiry.
Maximum risk
Losses are limited to the gap between the LEAPS call and the current put strike plus the cost of each put; each roll adds cost, which adds up over years.
Questions
Why roll to a strike no lower than before?
So the floor can only move up. A rally raises the floor; a fall keeps the old, higher floor in place.
Is a 90-day put cheaper than a married put?
Each one is cheaper, but rolling it four times a year usually costs more in total than one long-dated put.
Why is this marked as an example?
It is a variation for comparison and learning, not one of the main strategies.