Vertical Spreads by IV Rank
IV Rank sets the kind, the 50-day trend the side: at IV Rank ivr_high+ sell a credit spread (bull put above the average, bear call below); at ivr_low or less buy a debit spread (bull call or bear put). Take take_pct, stop credit spreads at 2× the credit and debit spreads at half the debit, out at 21 days.
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.Defined risk by design: the long options in the structure cap the loss, so there is no separate hedged version.
| Stock | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 YTD | CAGR | B&H CAGR | Max drawdown |
|---|---|---|---|---|---|---|---|---|---|---|
| +5.9%−9.3 | +18.1%−8.8 | −32.2%−12.7 | +4.2%−20.1 | −11.6%−34.9 | +32.3%+16.0 | +0.8%−11.6 | +0.6% | +13.4% | −55.0% | |
| +56.1%+11.0 | −15.1%−41.9 | +1.6%+34.7 | +25.0%−28.8 | +1.8%−23.1 | +32.9%+12.7 | +13.6%+1.0 | +14.8% | +18.5% | −45.7% | |
| +8.8%−9.7 | −14.9%−28.1 | −0.5%+21.1 | −6.4%−21.5 | −38.4%−48.5 | −17.6%−29.0 | +16.4%+1.0 | −9.4% | +8.2% | −62.8% | |
| −0.2%−117.9 | −1.6%−126.8 | −3.3%+47.0 | +2.8%−236.2 | −5.8%−177.0 | −15.8%−54.7 | −30.1%−30.2 | −8.6% | +65.2% | −47.9% | |
| +6.9%−69.9 | −0.3%−34.1 | −20.7%+6.1 | +26.2%−22.0 | +38.6%+8.5 | −5.7%−14.3 | −36.6%−65.1 | −1.8% | +25.2% | −53.9% |
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 1 track side by side. Each day, the first rule whose conditions hold in each track acts.
1. Vertical
- BPHigh IV, uptrend: sell a bull put spread
When:
book.open == 0andiv_rank >= ivr_highandspot > sma(trend_days)Do: sell put (as short)delta short_delta (0.3)dte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1strict 1; buy put (as long)strike leg.short.strike - spot * width_pctstrike_max leg.short.strike - 0.001expiry leg.short.expirystrict 1 - BCHigh IV, downtrend: sell a bear call spread
When:
book.open == 0andiv_rank >= ivr_highandspot <= sma(trend_days)Do: sell call (as short)delta short_delta (0.3)dte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1strict 1; buy call (as long)strike leg.short.strike + spot * width_pctstrike_min leg.short.strike + 0.001expiry leg.short.expirystrict 1 - DCLow IV, uptrend: buy a bull call spread
When:
book.open == 0andiv_rank <= ivr_lowandspot > sma(trend_days)Do: buy call (as long)delta long_delta (0.5)dte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1strict 1; sell call (as short)strike leg.long.strike + spot * width_pctstrike_min leg.long.strike + 0.001expiry leg.long.expirystrict 1 - DPLow IV, downtrend: buy a bear put spread
When:
book.open == 0andiv_rank <= ivr_lowandspot <= sma(trend_days)Do: buy put (as long)delta long_delta (0.5)dte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1strict 1; sell put (as short)strike leg.long.strike - spot * width_pctstrike_max leg.long.strike - 0.001expiry leg.long.expirystrict 1 - TPtake_pct made: close
When:
book.pnl_pct >= take_pctDo: close short; close long - SCCredit spread lost stop_credit of the credit: close
When:
book.credit > 0andbook.pnl_pct <= -stop_creditDo: close short; close long - SDDebit spread lost stop_debit of the debit: close
When:
book.credit < 0andbook.pnl_pct <= -stop_debitDo: close short; close long - EXexit_dte left: close
When:
leg.short.dte <= exit_dteDo: close short; close long - Closed or expired
When:
book.open == 0Do: nothing (hold)
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 |
|---|---|
trend_days | 50 |
ivr_high | 50 |
ivr_low | 30 |
short_delta | 0.3 |
long_delta | 0.5 |
width_pct | 0.03 |
dte | 45 |
dte_min | 30 |
dte_max | 60 |
take_pct | 50 |
stop_credit | 200 |
stop_debit | 50 |
exit_dte | 21 |
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…
IV Rank sets the kind, the 50-day trend the side: at IV Rank ivr_high+ sell a credit spread (bull put above the average, bear call below); at ivr_low or less buy a debit spread (bull call or bear put). Take take_pct, stop credit spreads at 2× the credit and debit spreads at half the debit, out at 21 days.
What it is
One strategy that picks its spread from implied volatility and the trend. When IV Rank is 50 or more it sells a credit spread about 45 days out (a bull put spread above the 50-day average, a bear call spread below it). When IV Rank is 30 or less it buys a debit spread instead (a bull call or bear put spread). It takes half the credit or half the debit as profit, stops credit spreads at twice the credit and debit spreads at half the debit, and closes at 21 days left.
When to use it
Use it when you want a directional spread but let the price of options decide whether to sell them (rich IV) or buy them (cheap IV). Between the two IV levels it stays out.
Maximum risk
Every trade is a vertical spread, so the most it can lose is the spread's width less the credit (credit spreads) or the debit paid (debit spreads).
Questions
Why sell when IV is high and buy when it is low?
Options are priced off implied volatility. When IV Rank is high, the premium you collect is rich compared with its own history; when it is low, buying is cheap. The strategy only trades in those two zones.
How does it pick the direction?
The 50-day moving average: above it, bullish spreads (bull put or bull call); below it, bearish ones (bear call or bear put).
Why do the stops differ?
A credit spread risks more than it collects, so it stops at twice the credit. A debit spread's whole risk is the debit, so it stops at half of it.