← All backtests

Iron Butterfly Strategy

NeutralIncomeThetaRules built-in

Sell the at-the-money put and call and buy wings wing_pct away, at IV Rank 30+. Take 25%, stop at the credit, out at 21 days; once the price is past a breakeven (the strike ± the credit), close and re-centre at the new price.
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.

Stock2020202120222023202420252026 YTDCAGRB&H CAGRMax drawdown
−14.0%−29.2+7.1%−19.8−12.6%+6.9+2.0%−22.3−9.8%−33.1−14.0%−30.4+6.1%−6.3 −5.6%+13.4%−41.2%
−14.4%−59.6+1.5%−25.3−20.7%+12.3+6.5%−47.3−6.4%−31.2−17.7%−37.9−8.2%−20.8 −9.2%+18.5%−54.7%
−25.0%−43.5−12.0%−25.3−22.5%−0.9+3.3%−11.8−17.0%−27.1+17.9%+6.5+25.0%+9.6 −6.2%+8.2%−58.5%
−5.1%−122.8−8.4%−133.5−6.2%+44.1−6.6%−245.6−15.4%−186.6−13.9%−52.7−25.6%−25.7 −12.1%+65.2%−58.8%
−23.7%−100.4−5.4%−39.3−23.3%+3.5−0.1%−48.3−10.5%−40.6−6.5%−15.1−12.3%−40.9 −12.4%+25.2%−60.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 1 track side by side. Each day, the first rule whose conditions hold in each track acts.

1. Iron fly

  1. INOpen the iron fly at the money 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; buy put (as lput) strike leg.sput.strike - spot * wing_pct strike_max leg.sput.strike - 0.001 expiry leg.sput.expiry strict 1; buy call (as lcall) strike leg.scall.strike + spot * wing_pct strike_min leg.scall.strike + 0.001 expiry leg.sput.expiry strict 1
  2. TPtake_pct of the credit kept: close When: book.pnl_pct >= take_pctDo: close sput; close scall; close lput; close lcall
  3. SLLost the credit: close When: book.pnl_pct <= -stop_pctDo: close sput; close scall; close lput; close lcall
  4. EXexit_dte left: close When: leg.sput.dte <= exit_dteDo: close sput; close scall; close lput; close lcall
  5. RCPast a breakeven: close and re-centre When: abs(spot - leg.sput.strike) >= book.creditDo: close sput; close scall; close lput; close lcall
  6. 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.

ParameterDefault
ivr_min30
wing_pct0.05
dte45
dte_min30
dte_max60
take_pct25
stop_pct100
exit_dte21

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 put and call and buy wings wing_pct away, at IV Rank 30+. Take 25%, stop at the credit, out at 21 days; once the price is past a breakeven (the strike ± the credit), close and re-centre at the new price.

What it is

Sell the at-the-money put and call about 45 days out and buy wings 5% away, when IV Rank is 30 or more. Take 25% of the credit, stop at the full credit, close at 21 days left, and once the price is past a breakeven close and re-centre at the new price.

When to use it

Use it for a neutral view with a larger credit than an iron condor's and a defined worst case.

Maximum risk

The most you can lose is the wing width less the credit received.

Questions

Why take only 25%?

An iron fly only pays its full credit if the stock pins the strike at expiry. Taking a quarter early is a common way to book the likely part of it.

What does re-centring do?

When the price leaves the profit zone, the trade is closed and a new fly is opened at the new price, rather than waiting for it to come back.

Why does it often lose in backtests?

An at-the-money fly needs the stock to stay very close to one price, and every exit pays the spread on four legs. In trending years that adds up.

Related strategies