← All backtests

Protective Put (90-Day Rolled Put) Strategy

GrowthThetaRules built-in

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.

Stock2020202120222023202420252026 YTDCAGRB&H CAGRMax 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%
Gap to buy and hold: behind ahead · option prices before Feb 2024 are modelled, real quotes after

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 copy
Show 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

  1. PS1Rule When: leg.leap.open == 0Do: buy call (as leap) delta 0.80 dte 730
  2. PS2Rule When: spot >= leg.leap.entry_spot * 1.10Do: close wait_call; buy put (as floor_put) delta 0.30 dte 90 expiry_max leg.leap.expiry strike_min leg.leap.strike + 1
  3. PS5Rule When: leg.leap.dte <= 270 or leg.leap.delta >= 0.95Do: close wait_call; roll leap delta 0.80 dte 730
  4. PS5Rule When: leg.leap.dte <= 270 or leg.leap.delta >= 0.95Do: close floor_put; roll leap delta 0.80 dte 730
  5. PS7Rule When: leg.floor_put.dte <= 30Do: roll floor_put delta 0.30 dte 90 expiry_max leg.leap.expiry strike_min leg.floor_put.strike
  6. Rule When: leg.floor_put.open == 0Do: nothing (hold)

2. Covered call while waiting

  1. PS8Rule When: leg.leap.open == 1 and leg.floor_put.open == 0 and leg.wait_call.open == 0Do: sell call (as wait_call) delta 0.20 dte 40 strike_min spot + 1
  2. PS8Rule When: leg.floor_put.open == 1Do: close wait_call
  3. Rule When: leg.wait_call.open == 0Do: nothing (hold)
  4. PS8Rule When: leg.wait_call.dte <= 3Do: roll wait_call delta 0.20 dte 40 strike_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 SPY
Show trades

Loading…

growthexample

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.

Related strategies