← All backtests

Short Straddle to Iron Fly Strategy

NeutralIncomeThetaRules built-in

Sell the at-the-money straddle at IV Rank 30+. Once wing_at % of the credit is made, buy a put and a call wing_x × the credit away: it becomes an iron fly. Take half, stop at 2× the credit, 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.

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

Stock2020202120222023202420252026 YTDCAGRB&H CAGRMax drawdown
+1.7%−13.5+7.3%−19.6+7.8%+27.3+3.1%−21.1+4.7%−18.6+3.5%−12.9+1.0%−11.5 +4.2%+13.4%−10.0%
+1.6%−43.6+8.0%−18.8−0.3%+32.8+7.1%−46.6+4.7%−20.1+2.5%−17.7−2.1%−14.7 +3.1%+18.5%−10.4%
+4.0%−14.4+34.8%+21.6+14.6%+36.2+10.6%−4.5+13.5%+3.4−2.0%−13.4+2.8%−12.5 +10.9%+8.2%−14.3%
+2.2%−115.5+7.8%−117.4+8.2%+58.5+16.0%−223.0+9.6%−161.5+16.4%−22.4+6.5%+6.4 +9.7%+65.2%−6.1%
−1.9%−78.6+7.7%−26.1+7.2%+34.0+12.8%−35.4+7.1%−23.0−5.6%−14.1+1.7%−26.8 +4.1%+25.2%−13.1%
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 2 tracks side by side. Each day, the first rule whose conditions hold in each track acts.

1. Straddle

  1. INSell the at-the-money straddle When: book.open == 0 and iv_rank >= ivr_minDo: sell put (as sput) strike spot dte dte (45) dte_min dte_min (30) dte_max dte_max (60) avoid_earnings 1 strict 1; sell call (as scall) strike leg.sput.strike expiry leg.sput.expiry strict 1
  2. TPHalf the credit kept: close When: book.pnl_pct >= take_pctDo: close sput; close scall
  3. SLLost 2× the credit: close When: book.pnl_pct <= -stop_pctDo: close sput; close scall
  4. EXexit_dte left: close When: leg.sput.dte <= exit_dteDo: close sput; close scall
  5. WGIn profit: buy the wings, it is now an iron fly When: book.pnl_pct >= wing_atDo: buy put (as lput) strike leg.sput.strike - book.credit * wing_x strike_max leg.sput.strike - 0.001 expiry leg.sput.expiry; buy call (as lcall) strike leg.scall.strike + book.credit * wing_x strike_min leg.scall.strike + 0.001 expiry leg.sput.expiry
  6. Closed or expired When: book.open == 0Do: nothing (hold)
  7. TPHalf the credit kept: close it all When: book.pnl_pct >= take_pctDo: close sput; close scall; close lput; close lcall
  8. EXexit_dte left: close it all When: leg.sput.dte <= exit_dteDo: close sput; close scall; close lput; close lcall
  9. Closed or expired When: book.open == 0Do: nothing (hold)

2. 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
ivr_min30
dte45
dte_min30
dte_max60
wing_at30
wing_x0.75
take_pct50
stop_pct200
exit_dte21
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…

neutralincome

Sell the at-the-money straddle at IV Rank 30+. Once wing_at % of the credit is made, buy a put and a call wing_x × the credit away: it becomes an iron fly. Take half, stop at 2× the credit, out at 21 days.

What it is

Sell the at-the-money put and call about 45 days out when IV Rank is 30 or more. Once 30% of the credit is made, buy a put below and a call above, each 0.75 times the credit away: the straddle becomes an iron fly with a capped loss. Take half the credit, stop at twice the credit, and close at 21 days left.

When to use it

Use it when you expect the stock to stay near today's price and want the large straddle credit, but not the unlimited risk for the whole trade.

Maximum risk

Before the wings are bought the loss has no limit in either direction. After, it is capped at the wing width less the net credit, and it is close to zero when the wings are no wider than the credit left after paying for them.

Questions

Why not buy the wings on day one?

They are most expensive then and would take a big slice of the credit. Waiting until the trade is in profit lets the gain pay for the protection.

What does the hedged version add?

A cheap far put (0.05 delta, about 90 days out) held under the position, replaced each month or when it pays off three times its cost.

How is this different from an iron butterfly?

An iron butterfly buys its wings at the start. This one starts naked and adds them later, so it collects more but carries more risk early on.

Related strategies