← All backtests

Poor Man's Covered Call (PMCC) Strategy

IncomeGrowthThetaRules built-in

A ~2-year 0.80 Δ LEAPS with weekly 0.15 Δ calls sold above it: a poor man's covered call. Roll the LEAPS call when old or deep in the money; set hedge_delta to add a crash put.
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.

Unhedged: nothing protects against a crash beyond what the strategy itself holds.

Stock2020202120222023202420252026 YTDCAGRB&H CAGRMax drawdown
+183.4%+168.2+73.0%+46.1−14.3%+5.1+30.8%+6.6+29.5%+6.2+22.4%+6.0+9.5%−2.9 +38.8%+13.4%−37.4%
+251.7%+206.6+43.9%+17.1−23.2%+9.8+47.7%−6.1+18.0%−6.8+16.9%−3.3+0.1%−12.6 +35.1%+18.5%−29.6%
+197.1%+178.6+55.0%+41.8−11.4%+10.3−1.3%−16.4+24.7%+14.6+24.5%+13.1+13.3%−2.0 +33.0%+8.2%−44.9%
+14.8%−102.9+16.8%−108.4−18.1%+32.2+36.5%−202.5+78.6%−92.6+14.5%−24.3−2.7%−2.8 +17.3%+65.2%−44.7%
+273.0%+196.3+39.5%+5.7−6.5%+20.3+29.1%−19.1+25.5%−4.5+13.1%+4.5+20.1%−8.4 +41.3%+25.2%−26.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 3 tracks side by side. Each day, the first rule whose conditions hold in each track acts.

1. LEAPS

One LEAPS call, rolled when old or deep in the money

  1. L1Buy the LEAPS call When: leg.leap.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. L2Getting old or deep in the money: swap it for a fresh one When: leg.leap.dte <= leap_roll_dte or leg.leap.delta >= leap_roll_deltaDo: 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

2. Short call

A weekly call above the LEAPS call

  1. K1Sell the call above the price and the LEAPS call strike When: leg.leap.open == 1 and leg.leap.age > 0 and leg.call.open == 0Do: sell call (as call) delta call_delta (0.15) dte call_dte (7) dte_min call_dte - 3 dte_max call_dte + 3 strike_min max(spot, leg.leap.strike) + 0.001 avoid_earnings 1
  2. K2aHalf the credit kept: buy it back When: leg.call.pnl_pct >= take_pctDo: close call
  3. K2bAt the strike near expiry: roll up and out for a credit When: leg.call.dte <= manage_dte and spot >= leg.call.strike * 0.99Do: 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
  4. K2cNo credit roll: buy it back; the LEAPS call keeps the gain When: leg.call.dte <= manage_dte and spot >= leg.call.strikeDo: close call

3. Crash put

A cheap far put under whatever is held; hedge_delta 0 turns it off

  1. CP1Something is held and no crash put: buy one When: hedge_delta > 0 and leg.hedge.open == 0 and shares >= 100 or book.open > 0Do: buy put (as hedge) qty max(1, round(shares / 100)) delta hedge_delta (0) dte hedge_dte (90) dte_min hedge_replace_dte + 7 strike_max spot - 0.001 strict 1
  2. CP2Nothing left to protect: sell it When: leg.hedge.open == 1 and shares < 100 and book.open <= 1Do: close hedge
  3. CP3Down to its last month, or worth hedge_take_x its cost: sell it and buy a fresh one When: leg.hedge.open == 1 and leg.hedge.dte <= hedge_replace_dte or (hedge_take_x > 0 and leg.hedge.mark >= leg.hedge.cost * hedge_take_x)Do: close hedge; buy put (as hedge) qty max(1, round(shares / 100)) delta hedge_delta (0) dte hedge_dte (90) dte_min hedge_replace_dte + 7 strike_max 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_dte270
leap_roll_delta0.95
call_delta0.15
call_dte7
take_pct50
manage_dte2
roll_max_days60
hedge_delta0
hedge_dte90
hedge_replace_dte30
hedge_take_x3

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…

incomegrowth

A ~2-year 0.80 Δ LEAPS with weekly 0.15 Δ calls sold above it: a poor man's covered call. Roll the LEAPS call when old or deep in the money; set hedge_delta to add a crash put.

What it is

Buy a two-year 0.80 delta LEAPS and sell weekly 0.15 delta calls above it, like a covered call on shares but with far less cash. Calls are bought back at half their credit or rolled up and out when the price reaches them; the LEAPS call is rolled when it is old or deep in the money.

When to use it

Use it when you would run covered calls on a stock but do not want to buy 100 shares, and you expect the stock to drift up or sideways.

Maximum risk

You can lose most of what the LEAPS call cost if the stock falls hard; the short calls only offset a little. In a sharp rally the short call can lose more than its credit, though the LEAPS call gains more.

Questions

How is a PMCC different from a covered call?

The LEAPS call replaces the shares. It costs a fraction of the share price, so returns on cash are higher, but the LEAPS call loses time value and has a higher break-even.

What if the short call goes in the money?

Near expiry it is rolled up and out for a credit if possible. If no credit roll exists it is bought back, and the LEAPS call keeps the larger gain.

Should I add the crash put?

Set hedge_delta to 0.05 to add one. Whether it pays depends on the period: it pays in sudden crashes and costs a little every quiet year. Run both in the Rule Builder to compare.

Related strategies