← All backtests

LEAPS + Collar Strategy

GrowthIncomeThetaRules built-in

Own a ~2-year 0.80 Δ LEAPS instead of shares, sell a monthly 0.20 Δ call above it and hold a 0.20 Δ put under it: a collar. Roll the LEAPS call at 6 months left.
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
+225.1%+209.9+51.0%+24.1−16.1%+3.4+32.6%+8.3+22.9%−0.4+26.5%+10.1+11.3%−1.1 +38.7%+13.4%−35.6%
+157.7%+112.5+35.5%+8.6−24.9%+8.2+29.3%−24.5+30.7%+5.9+26.4%+6.2−0.9%−13.5 +28.3%+18.5%−30.7%
+190.7%+172.2+14.8%+1.6−23.4%−1.7+3.5%−11.7+26.1%+16.0+31.4%+20.0+27.7%+12.3 +28.5%+8.2%−48.0%
+7.6%−110.1+6.0%−119.1−14.0%+36.3+25.9%−213.1+36.7%−134.5+26.2%−12.6+6.0%+5.9 +12.6%+65.2%−25.0%
+112.7%+36.0+20.7%−13.2−18.6%+8.2+31.7%−16.5+17.9%−12.2+26.2%+17.6+18.2%−10.4 +25.8%+25.2%−30.2%
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 3 tracks side by side. Each day, the first rule whose conditions hold in each track acts.

1. LEAPS and call

  1. L0Buy the LEAPS call When: leg.leap.open == 0 and leg.call.open == 0Do: buy call (as leap) delta leap_delta (0.8) dte leap_dte (730) dte_min leap_dte - 120 dte_max leap_dte + 120 strict 1
  2. L3Six months left on the LEAPS call: swap it for a fresh one When: leg.leap.dte <= leap_roll_dteDo: close leap; buy call (as leap) delta leap_delta (0.8) dte leap_dte (730) dte_min leap_dte - 120 dte_max leap_dte + 120 strict 1 require new.strike != leg.leap.strike or new.expiry != leg.leap.expiry
  3. K1Sell the monthly call above the price and the LEAPS call strike When: leg.leap.open == 1 and leg.call.open == 0Do: sell call (as call) qty leg.leap.qty delta call_delta (0.2) dte dte (30) dte_min dte_min (25) dte_max dte_max (35) strike_min max(spot, leg.leap.strike) + 0.001 avoid_earnings 1
  4. K2aHalf the credit kept, but the call is worth under $0.05 near expiry: let it expire When: leg.call.pnl_pct >= take_pct and leg.call.mark < 0.05 and leg.call.dte <= 5Do: nothing (hold)
  5. K2aHalf the credit kept: buy the call back When: leg.call.pnl_pct >= take_pctDo: close call
  6. K2bAt the strike near expiry: roll up and out for a credit When: leg.call.dte <= manage_dte and spot >= leg.call.strike or abs(spot - leg.call.strike) / leg.call.strike <= near_bandDo: roll call dte 0 dte_min leg.call.dte + 1 dte_max roll_max_days - leg.call.chain_age strike_min leg.call.strike scan strike_desc avoid_earnings 1 require new.mark > leg.call.mark
  7. K2cNo credit roll: buy the call back at a loss; the LEAPS call keeps the gain When: leg.call.dte <= manage_dte and spot >= leg.call.strikeDo: close call

2. Put age

  1. W2Three weeks left on the collar put: sell it (a new one is bought the same day) When: leg.put.dte <= put_replace_dteDo: close put

3. Collar put

  1. L4Buy the collar put: ~60 days, 0.20 Δ, below the price (not on a day the LEAPS call is bought) When: leg.leap.open == 1 and leg.leap.age > 0 and leg.put.open == 0Do: buy put (as put) qty leg.leap.qty delta put_delta (0.2) dte put_dte (60) dte_min put_replace_dte + 7 strike_max min(spot, if(leg.call.open == 1, leg.call.strike, spot)) - 0.001 strict 1

Parameters and defaults

Every named number in the rules can be changed in the Rule Builder. These are the defaults the backtest used.

ParameterDefault
leap_delta0.8
leap_dte730
leap_roll_dte180
call_delta0.2
dte30
dte_min25
dte_max35
take_pct50
manage_dte10
near_band0.01
roll_max_days60
put_delta0.2
put_dte60
put_replace_dte21

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…

growthincome

Own a ~2-year 0.80 Δ LEAPS instead of shares, sell a monthly 0.20 Δ call above it and hold a 0.20 Δ put under it: a collar. Roll the LEAPS call at 6 months left.

What it is

Own a two-year 0.80 delta LEAPS instead of shares, sell a monthly 0.20 delta call above it and hold a 0.20 delta put about 60 days out under it: a collar around a LEAPS call. Calls are taken at 50% profit or rolled up and out for a credit; the put is replaced with three weeks left; the LEAPS call is rolled at six months left.

When to use it

Use it when you want steady, hedged exposure with a smoother ride than holding the LEAPS call alone, accepting a cap on big rallies in exchange.

Maximum risk

The put limits losses between rolls to roughly the distance down to its strike plus the net cost of the options. Gaps through the strike between rolls, and repeated buy-backs of the call in a strong rally, are the main costs.

Questions

Is the collar zero-cost?

Not exactly. A 0.20 delta call and a 0.20 delta put are often close in price, but put skew usually makes the put a little dearer. The backtest uses the actual prices.

What happens in a strong rally?

The call is rolled up and out for a credit when it can be; otherwise it is bought back at a loss and the LEAPS call keeps the gain.

Why roll the LEAPS call at six months instead of nine?

This version keeps the LEAPS call longer to save on roll costs, because the collar put already protects against the faster decay near the end.

Related strategies