Covered Call Ratio Write Strategy
Hold 100 shares and sell two 0.20 Δ calls about a month out: one covered, one not. Take half; near the strike roll both up and out for a credit, and if the stock runs stop_pct past the strike with no credit roll, buy the calls back.
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.
| Stock | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 YTD | CAGR | B&H CAGR | Max drawdown |
|---|---|---|---|---|---|---|---|---|---|---|
| +16.4%+1.2 | +29.6%+2.7 | −0.5%+19.0 | +11.6%−12.6 | +5.4%−17.9 | +7.2%−9.2 | +9.3%−3.2 | +11.2% | +13.4% | −22.2% | |
| +21.2%−23.9 | +17.5%−9.3 | −5.5%+27.6 | +16.1%−37.7 | +3.9%−20.9 | +6.2%−13.9 | +5.2%−7.4 | +9.1% | +18.5% | −12.0% | |
| +13.1%−5.4 | +41.9%+28.6 | −2.5%+19.1 | +4.7%−10.4 | +5.6%−4.5 | +0.6%−10.8 | +12.1%−3.2 | +10.2% | +8.2% | −31.3% | |
| +7.0%−110.8 | +9.4%−115.8 | −6.7%+43.6 | +34.8%−204.2 | +53.2%−118.0 | +22.4%−16.5 | +13.4%+13.3 | +18.1% | +65.2% | −19.0% | |
| +26.1%−50.6 | +24.3%−9.5 | −3.9%+23.0 | +23.7%−24.5 | +1.8%−28.3 | +1.8%−6.7 | +6.1%−22.5 | +11.1% | +25.2% | −21.6% | |
| +19.5%+4.3 | +31.4%+4.5 | −0.8%+18.7 | +11.3%−13.0 | +5.2%−18.1 | +7.0%−9.4 | +8.9%−3.6 | +11.6% | +13.4% | −18.4% | |
| +24.4%−20.7 | +18.6%−8.2 | −5.8%+27.2 | +16.1%−37.7 | +4.0%−20.8 | +7.0%−13.2 | +4.6%−8.0 | +9.6% | +18.5% | −11.2% | |
| +19.2%+0.8 | +41.7%+28.5 | −1.6%+20.0 | +4.4%−10.7 | +4.5%−5.6 | +0.7%−10.7 | +10.9%−4.4 | +10.9% | +8.2% | −25.2% | |
| +7.9%−109.8 | +7.2%−118.0 | −7.0%+43.3 | +36.4%−202.6 | +59.5%−111.7 | +28.3%−10.6 | +13.3%+13.3 | +19.6% | +65.2% | −18.4% | |
| +26.1%−50.6 | +21.0%−12.8 | −3.5%+23.3 | +23.6%−24.6 | +1.9%−28.1 | +2.2%−6.3 | +4.7%−23.8 | +10.5% | +25.2% | −19.0% |
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. Ratio write
- K0No shares: buy 100
When:
shares < 100andleg.call.open == 0Do: buy sharesqty 100 - K1Sell two calls: one covered, one naked
When:
shares >= 100andleg.call.open == 0Do: sell call (as call)qty 2delta call_delta (0.2)dte dte (35)dte_min dte_min (25)dte_max dte_max (50)strike_min spot + 0.001avoid_earnings 1 - K2Half the credit kept: buy them back
When:
leg.call.pnl_pct >= take_pctDo: close call - K3At the strike: roll both up and out for a credit
When:
spot >= leg.call.strike * (1 - near_band)Do: roll calldte dte (35)dte_min leg.call.dte + 1dte_max roll_max_days - leg.call.chain_agestrike_min leg.call.strikescan strike_descavoid_earnings 1require new.mark > leg.call.mark - K4Ran past the strike with no credit roll: buy the calls back
When:
spot >= leg.call.strike * (1 + stop_pct)Do: close call
2. Crash put
A cheap far put under whatever is held; hedge_delta 0 turns it off
- CP1Something is held and no crash put: buy one
When:
hedge_delta > 0andleg.hedge.open == 0andshares >= 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 + 7strike_max spot - 0.001strict 1 - CP2Nothing left to protect: sell it
When:
leg.hedge.open == 1andshares < 100andbook.open <= 1Do: close hedge - CP3Down to its last month, or worth hedge_take_x its cost: sell it and buy a fresh one
When:
leg.hedge.open == 1andleg.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 + 7strike_max spot - 0.001strict 1
Parameters and defaults
Every named number in the rules can be changed in the Rule Builder. These are the defaults the backtest used.
| Parameter | Default |
|---|---|
call_delta | 0.2 |
dte | 35 |
dte_min | 25 |
dte_max | 50 |
take_pct | 50 |
near_band | 0.01 |
stop_pct | 0.05 |
roll_max_days | 75 |
hedge_delta | 0 |
hedge_dte | 90 |
hedge_replace_dte | 30 |
hedge_take_x | 3 |
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…
Hold 100 shares and sell two 0.20 Δ calls about a month out: one covered, one not. Take half; near the strike roll both up and out for a credit, and if the stock runs stop_pct past the strike with no credit roll, buy the calls back.
What it is
Hold 100 shares and sell two 0.20 delta calls about a month out: one covered by the shares, one not. Take half the credit; when the price reaches the strike, roll both calls up and out for a credit, and if the stock runs 5% past the strike without a credit roll, buy the calls back.
When to use it
Use it on a stock you own when you expect it to drift sideways or slowly higher and want more income than a single covered call.
Maximum risk
Below, the risk is the stock's, less the premium. Above the strike the second call is naked, so a sharp rally loses on it with no limit until it is rolled or closed.
Questions
Why two calls?
Twice the premium for the same shares. The cost is that one call is uncovered if the stock rallies hard.
How does it handle a rally?
It rolls both calls up and out for a credit when the price reaches the strike, and buys them back if the stock runs 5% past it with no credit available.
What does the hedged version add?
A cheap far put under the shares, swapped monthly.