← All backtests

LEAPS + Married Put Strategy

GrowthThetaRules built-in

The 90-day example with one change: the put expires with the LEAPS call
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
+75.5%+60.3+83.3%+56.4−15.3%+4.2+36.7%+12.4+47.4%+24.1+21.6%+5.2+13.7%+1.2 +34.3%+13.4%−34.9%
+144.9%+99.8+24.2%−2.6−34.1%−1.0+52.4%−1.4+51.5%+26.6+22.4%+2.3−1.5%−14.1 +28.4%+18.5%−47.9%
+180.5%+162.1+24.2%+10.9−15.5%+6.1+17.5%+2.4+8.6%−1.5+15.9%+4.5+13.8%−1.6 +26.2%+8.2%−41.7%
+17.5%−100.2+16.5%−108.7−22.9%+27.4+70.4%−168.6+87.7%−83.5+10.1%−28.8+12.8%+12.7 +23.3%+65.2%−50.7%
+147.2%+70.5−18.0%−51.8−28.8%−2.0+7.7%−40.4+32.8%+2.7+0.7%−7.9+43.5%+14.9 +17.2%+25.2%−55.4%
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 strike_min leg.leap.strike + 1 expiry leg.leap.expiry
  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

The 90-day example with one change: the put expires with the LEAPS call

What it is

The 90-day protective put example with one change: the put is bought to expire with the LEAPS call, so the pair is a single long-dated position with a fixed floor.

When to use it

Use it to compare a single long-dated put against rolling shorter ones under the same LEAPS.

Maximum risk

Once the put is on, the worst case is the gap between the LEAPS call's value at that point and the put strike, plus the put's cost.

Questions

What is a married put?

A long position paired with a put bought at the same time and held for the same period, setting a fixed floor.

Why match the put's expiry to the LEAPS call?

One put for the whole life of the LEAPS call avoids the cost of rolling, at a higher price up front.

Is this a main strategy?

No, it is an example for comparison. LEAPS + Protective Put is the full version.

Related strategies