Iron Butterfly

Neutral

Sell an ATM straddle and buy OTM wings — maximum profit at the strike, defined risk.

Risk Profile

Max Profit
Net credit (underlying at ATM strike)
Max Loss
Wing width − Credit
Breakeven
ATM ± Credit
Outlook
Very neutral (pinned to strike)

Parameters

ParameterDefaultDescription
put_wing_pct0.90Long put wing (10% OTM)
call_wing_pct1.10Long call wing (10% OTM)
dte45Days to expiration

Methodology

An iron butterfly sells an ATM call and ATM put (short straddle) and buys OTM wings (90% put, 110% call) to cap the risk. It is a tighter version of the iron condor with a higher credit but narrower profit zone. Maximum profit is achieved when the underlying closes exactly at the ATM strike at expiration. The strategy profits in very low-volatility, range-bound markets. Backtested with 45 DTE cycles.

Implementation

# Iron Butterfly: sell ATM straddle + buy OTM wings
for entry in monthly_entries:
    S = spot_at_entry
    K_atm = round(S / 5) * 5        # ATM (sell both)
    K_pb  = round(S * 0.90 / 5) * 5 # buy put wing
    K_cb  = round(S * 1.10 / 5) * 5 # buy call wing
    T = 45 / 365.25

    credit = (
        black_scholes_call(S, K_atm, T, r, sigma)
      + black_scholes_put(S, K_atm, T, r, sigma)
      - black_scholes_put(S, K_pb, T, r, sigma)
      - black_scholes_call(S, K_cb, T, r, sigma)
    )

    S_exp = spot_at_expiry
    put_loss  = max(0, K_atm - S_exp) - max(0, K_pb - S_exp)
    call_loss = max(0, S_exp - K_atm) - max(0, S_exp - K_cb)
    pnl = credit - put_loss - call_loss
    max_risk = K_atm - K_pb  # wing width
    pnl_pct = pnl / max_risk * 100

Backtest Performance

SymbolReturn %SharpeMax DD %Win %Avg/trade %Trades
SPY-317.6%-0.60+316.6%+31.6%-16.7%19
QQQ-375.7%-0.66+438.5%+31.6%-19.8%19
IWM-646.9%-1.07+631.0%+21.1%-34.0%19
DIA-197.2%-0.35+212.8%+42.1%-10.4%19
Avg-384.3%-0.67+399.8%+31.6%19

← back to options strategies