Iron Condor Strategy
Sell a 0.16 Δ put spread and call spread, wings wing_pct apart, at IV Rank 30+. Take half, stop at 2× the credit, out at 21 days; roll a tested side out once for a credit.
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 |
|---|---|---|---|---|---|---|---|---|---|---|
| +11.7%−3.5 | +29.1%+2.1 | +14.4%+33.9 | +14.7%−9.6 | +14.3%−9.0 | −10.0%−26.4 | +3.9%−8.6 | +10.8% | +13.4% | −31.8% | |
| +14.5%−30.6 | +33.6%+6.7 | +6.1%+39.2 | +23.7%−30.1 | −2.2%−27.1 | −0.5%−20.7 | +9.0%−3.6 | +11.7% | +18.5% | −24.8% | |
| +22.7%+4.3 | +49.0%+35.7 | +28.1%+49.8 | +25.7%+10.6 | +20.0%+9.9 | −9.9%−21.3 | +9.3%−6.1 | +20.0% | +8.2% | −31.2% | |
| −1.4%−119.1 | +1.8%−123.4 | −2.5%+47.8 | +9.6%−229.4 | +1.7%−169.4 | +20.9%−18.0 | +7.4%+7.3 | +5.2% | +65.2% | −14.9% | |
| −9.8%−86.5 | +13.1%−20.7 | +0.4%+27.2 | +34.8%−13.4 | +25.9%−4.2 | −9.0%−17.6 | −18.9%−47.5 | +3.7% | +25.2% | −30.5% |
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. Iron condor
Four legs managed as one
- INSell the condor
When:
book.open == 0andiv_rank >= ivr_minDo: sell put (as sput)delta short_delta (0.16)dte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1strict 1; buy put (as lput)strike leg.sput.strike - spot * wing_pctstrike_max leg.sput.strike - 0.001expiry leg.sput.expirystrict 1; sell call (as scall)delta short_delta (0.16)strike_min spotexpiry leg.sput.expirystrict 1; buy call (as lcall)strike leg.scall.strike + spot * wing_pctstrike_min leg.scall.strike + 0.001expiry leg.sput.expirystrict 1 - TPHalf the credit kept: close it all
When:
book.pnl_pct >= take_pctDo: close sput; close lput; close scall; close lcall - SLLost stop_pct of the credit: close it all
When:
book.pnl_pct <= -stop_pctDo: close sput; close lput; close scall; close lcall - EXexit_dte left: close it all
When:
min(leg.sput.dte, leg.scall.dte) <= exit_dteDo: close sput; close lput; close scall; close lcall - RPPut side tested: roll the put spread out for a credit (once)
When:
spot <= leg.sput.strike * (1 + test_pct)Do: roll sputstrike leg.sput.strikedte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1require new.mark - mid_put(leg.lput.strike, new.expiry) > leg.sput.mark - leg.lput.mark; roll lputstrike leg.lput.strikeexpiry leg.sput.expiry - RCCall side tested: roll the call spread out for a credit (once)
When:
spot >= leg.scall.strike * (1 - test_pct)Do: roll scallstrike leg.scall.strikedte dte (45)dte_min dte_min (30)dte_max dte_max (60)avoid_earnings 1require new.mark - mid_call(leg.lcall.strike, new.expiry) > leg.scall.mark - leg.lcall.mark; roll lcallstrike leg.lcall.strikeexpiry leg.scall.expiry - Closed or expired
When:
book.open == 0Do: nothing (hold) - TPHalf the credit kept: close it all
When:
book.pnl_pct >= take_pctDo: close sput; close lput; close scall; close lcall - SLLost stop_pct of the credit: close it all
When:
book.pnl_pct <= -stop_pctDo: close sput; close lput; close scall; close lcall - EPPut side at exit_dte: close it
When:
leg.sput.open == 1andleg.sput.dte <= exit_dteDo: close sput; close lput - ECCall side at exit_dte: close it
When:
leg.scall.open == 1andleg.scall.dte <= exit_dteDo: close scall; close lcall - All closed
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 |
|---|---|
short_delta | 0.16 |
wing_pct | 0.05 |
dte | 45 |
dte_min | 30 |
dte_max | 60 |
ivr_min | 30 |
take_pct | 50 |
stop_pct | 200 |
exit_dte | 21 |
test_pct | 0.01 |
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…
Sell a 0.16 Δ put spread and call spread, wings wing_pct apart, at IV Rank 30+. Take half, stop at 2× the credit, out at 21 days; roll a tested side out once for a credit.
What it is
Sell a 0.16 delta put spread and a 0.16 delta call spread about 45 days out, wings 5% apart, when IV Rank is 30 or more. Take half the credit, stop at twice the credit, close at 21 days left, and roll a tested side out once for a credit.
When to use it
Use it when you expect a range-bound market and want the income of a short strangle with defined risk on both sides.
Maximum risk
The most you can lose is the width of one spread minus the credit received, because only one side can finish in the money.
Questions
How is an iron condor different from a strangle?
It adds long wings beyond each short strike, so the worst case is capped at the wing width minus the credit, at the cost of a smaller credit.
How much capital does it tie up?
Only the width of one side minus the credit. The backtest counts collateral that way, not as a cash-secured put.
Why roll a tested side only once?
One roll for a credit can buy time; repeated rolls in a trending market usually add risk rather than reduce it.