| name | iron-butterfly |
| description | Analyzes iron butterfly credit spreads with ATM short straddle and OTM long strangle protection. Requires numpy>=1.24.0, pandas>=2.0.0, matplotlib>=3.7.0, scipy>=1.10.0. Use when expecting stock to pin at specific strike, want maximum credit collection in high IV, analyzing tight-range opportunities, or implementing high-premium neutral strategies on stocks with strong technical pivot levels. |
Iron Butterfly Strategy
Version: 1.0 Last Updated: 2025-12-12
Overview
An iron butterfly is a high-credit neutral strategy that profits when a stock pins near a specific strike price. By selling an ATM straddle (short call + short put at same strike) and buying an OTM strangle for protection (long put + long call at different strikes), the trader collects maximum premium while maintaining defined risk, benefiting from minimal price movement and volatility contraction.
Quick Summary: Sell ATM straddle + Buy OTM strangle = High credit, tight profit zone
Strategy Characteristics
Position Structure:
- Sell 1 call at-the-money (ATM)
- Sell 1 put at-the-money (ATM)
- Buy 1 OTM put (lower strike, protection)
- Buy 1 OTM call (higher strike, protection)
- All same expiration, equal wing widths from body
Risk Profile:
- Maximum Profit: Net credit received (at ATM strike)
- Maximum Loss: Wing width - Net credit
- Breakeven Points:
- Lower: ATM strike - Net credit
- Upper: ATM strike + Net credit
- Best Use: Expect stock to pin at ATM strike, high IV crush opportunity
Cost Components:
- ATM straddle credit: Received (large)
- OTM strangle cost: Paid (small)
- Net credit = Straddle credit - Strangle cost
- Max risk = Wing width - Net credit
- Transaction costs: ~$0.65 per contract × 4 legs = $2.60
Quick Start
Calculate iron butterfly metrics:
from scripts.iron_butterfly_calculator import IronButterfly
# Example: SPY at $450, expect to pin at $450
position = IronButterfly(
underlying_price=450.00,
atm_strike=450.00, # Body (sell straddle)
long_put=440.00, # $10 OTM protection
long_call=460.00, # $10 OTM protection
atm_call_premium=5.50, # Sell ATM call
atm_put_premium=5.25, # Sell ATM put
long_call_premium=1.00, # Buy OTM call
long_put_premium=0.90, # Buy OTM put
contracts=1
)
# Key metrics
print(f"Net Credit: ${position.net_credit:.2f}")
print(f"Max Profit: ${position.max_profit:.2f}")
print(f"Max Loss: ${position.max_loss:.2f}")
print(f"Breakevens: ${position.lower_breakeven:.2f} - ${position.upper_breakeven:.2f}")
print(f"Profit Zone Width: {position.profit_zone_width:.2f} points")
Core Workflow
1. Identify Pinning Opportunity
Look for stocks likely to settle at specific strike:
Ideal Scenarios:
- Post-Earnings Pin: Stock historically pins at round numbers after earnings
- Options Expiration: Max pain theory (MMs want max OI to expire worthless)
- Strong Technical Level: Key support/resistance at strike price
- Low Beta Stock: Minimal movement tendency
- High Open Interest: Large OI at specific strike (pinning force)
Market Conditions:
- Very high IV rank (>70) - premium rich
- Stock at or near ATM strike
- Upcoming IV crush catalyst
- Historical tendency to pin at strikes
- Low expected movement
See references/pinning-identification.md.
2. Wing Width Selection
Narrow Wings ($5-$10):
- Higher credit (straddle expensive vs. strangle)
- Tighter profit zone (harder to win)
- Better R:R ratio (often 2:1 or better)
- Lower capital requirement
- Example: Sell $450 straddle / Buy $440/$460 strangle
Standard Wings ($10-$15):
- Balanced credit and profit zone
- Most common configuration
- Moderate risk management
- Example: Sell $450 straddle / Buy $435/$465 strangle
Wide Wings ($15-$25):
- Lower credit (larger strangle cost)
- Wider profit zone (easier to win)
- Lower R:R ratio
- Higher capital requirement
- Example: Sell $450 straddle / Buy $425/$475 strangle
Selection Criteria:
- Match wing width to expected range
- Narrower wings = more credit but tighter range
- Target R:R ratio: 2:1 or better
See references/wing-width-analysis.md.
3. Strike Selection Framework
ATM Strike (Body):
- Select strike closest to current stock price
- Or select strike with highest open interest
- Or select technical pivot level (support/resistance)
- Maximum credit collected here
Protection Strikes (Wings):
- Symmetric: Equal distance from ATM (standard)
- Example: ATM $450 → Long $440 put / Long $460 call
- Asymmetric: Different distances (directional bias)
- Bullish: Wider downside wing, tighter upside
- Bearish: Tighter downside wing, wider upside
Delta-Based Approach:
- ATM strike: ~0.50 delta call, ~-0.50 delta put
- Long strikes: ~0.10-0.15 delta (OTM protection)
See references/strike-selection-guide.md.
4. Credit Optimization
Compare different configurations to maximize credit:
from scripts/credit_optimizer import optimize_iron_butterfly
configs = optimize_iron_butterfly(
underlying_price=450.00,
atm_strike=450.00,
wing_widths=[5, 10, 15, 20],
volatility=0.28,
days_to_expiration=30
)
for config in configs:
print(f"Wing Width ${config['wing_width']}:")
print(f" Net Credit: ${config['net_credit']:.2f}")
print(f" Max Profit: ${config['max_profit']:.2f}")
print(f" Max Loss: ${config['max_loss']:.2f}")
print(f" Profit Zone: ±${config['profit_zone']:.2f} ({config['profit_zone_pct']:.1f}%)")
print(f" R:R Ratio: {config['rr_ratio']:.2f}:1")
See references/credit-optimization.md.
5. IV Rank Analysis
Assess premium environment:
from scripts/iv_analyzer import analyze_iv_for_butterfly
analysis = analyze_iv_for_butterfly(
symbol='SPY',
current_iv=0.28,
atm_strike=450.00,
lookback_period=252
)
print(f"IV Rank: {analysis['iv_rank']:.0f}")
print(f"IV Percentile: {analysis['iv_percentile']:.0f}")
print(f"Straddle Premium Rich: {analysis['straddle_rich']}")
print(f"IV Crush Expected: {analysis['iv_crush_expected']}")
print(f"Optimal for Iron Butterfly: {analysis['butterfly_optimal']}")
print(f"Expected Credit: ${analysis['expected_credit']:.2f}")
Ideal IV Environment:
- IV Rank: 70-95 (extremely high)
- IV Percentile: 80-95
- Pre-event (earnings) with imminent crush
- Historical IV > Current IV (mean reversion)
⚠️ Critical: Iron butterflies REQUIRE high IV to justify tight profit zone
See references/iv-analysis.md.
6. Probability Analysis
Calculate probability of profit:
from scripts/probability_calculator import calculate_butterfly_probabilities
prob = calculate_butterfly_probabilities(
atm_strike=450.00,
wing_width=10.00,
net_credit=8.85,
underlying_price=450.00,
volatility=0.28,
days_to_expiration=30
)
print(f"Prob at ATM: {prob['at_atm']:.1f}%")
print(f"Prob in Profit Zone: {prob['in_zone']:.1f}%")
print(f"Prob of Max Profit: {prob['max_profit']:.1f}%")
print(f"Prob of Max Loss: {prob['max_loss']:.1f}%")
print(f"Expected Value: ${prob['expected_value']:.2f}")
Decision Criteria:
- Prob in profit zone: >50% (minimum)
- Expected value: >0 (positive expectancy)
- R:R ratio: >2:1 (credit:risk)
See references/probability-analysis.md.
7. Expiration Timing
Short-Term (7-14 days): Maximum theta, ideal for post-earnings. Less time for stock to move.
Standard (21-30 days): Balanced theta and adjustability. Common for monthly expiration.
Avoid Long-Term (>45 days): Lower credit, too much time for stock to wander, theta too slow.
See references/expiration-timing.md.
8. Greeks Monitoring
Track iron butterfly Greeks:
from scripts/greeks_calculator import calculate_iron_butterfly_greeks
greeks = calculate_iron_butterfly_greeks(
atm_strike=450.00,
long_put=440.00,
long_call=460.00,
underlying_price=450.00,
volatility=0.28,
time_to_expiration=30/365
)
print(f"Delta: {greeks['delta']:.3f}") # ~0 at ATM
print(f"Gamma: {greeks['gamma']:.3f}") # Very high (rapid changes)
print(f"Theta: {greeks['theta']:.3f}") # Positive (strong decay benefit)
print(f"Vega: {greeks['vega']:.3f}") # Negative (benefits from IV drop)
Key Insights:
- Delta: Near zero at ATM strike
- Gamma: Very high (extremely sensitive to moves)
- Theta: High positive (strong time decay benefit)
- Vega: High negative (major benefit from IV crush)
See references/greeks-guide.md.
9. Position Sizing
Calculate risk-appropriate contracts:
from scripts/position_sizer import calculate_iron_butterfly_size
contracts = calculate_iron_butterfly_size(
portfolio_value=100000,
risk_per_trade=0.025, # 2.5% max risk
max_loss_per_butterfly=115 # $10 wing - $8.85 credit
)
# Returns: 2 contracts (max risk $230 = 0.23%)
Sizing Guidelines:
- Risk 1-3% of portfolio per butterfly
- Account for max loss (wing - credit)
- Consider iron butterflies higher risk than condors
- Leave capital for adjustments or rolling
See references/position-sizing.md.
10. Management and Adjustments
Profit Taking:
- 50-70% max profit: Excellent target
- Day after event: If IV crush occurred, exit
- 75% max profit: Near optimal
Defensive Adjustments (Stock moving away from ATM):
Convert to Iron Condor:
- Stock moving away from ATM
- Close short option on tested side
- Opens up profit zone
- Reduces credit but improves probability
Roll Entire Butterfly:
- Stock moved to new level
- Close current butterfly
- Re-establish at new ATM strike
- Collect new credit
Close and Accept Loss:
- Stock breached wing
- Little recovery probability
- Cut loss, move on
- Don't chase or hope
See references/adjustment-strategies.md.
Scripts
Calculator
# Calculate iron butterfly metrics
python scripts/iron_butterfly_calculator.py \
--underlying SPY \
--price 450 \
--atm-strike 450 \
--long-put 440 \
--long-call 460 \
--atm-call-premium 5.50 \
--atm-put-premium 5.25 \
--long-call-premium 1.00 \
--long-put-premium 0.90
Credit Optimizer
# Optimize wing width for max credit
python scripts/credit_optimizer.py \
--underlying SPY \
--price 450 \
--atm 450 \
--widths 5 10 15 20 \
--dte 30 \
--volatility 0.28
Probability Calculator
# Calculate probability of profit
python scripts/probability_calculator.py \
--atm 450 \
--wing-width 10 \
--credit 8.85 \
--price 450 \
--dte 30 \
--vol 0.28
References
Core Guides
- quickstart-guide.md - 5-minute overview
- installation-guide.md - Setup instructions
- developer-guide.md - Code standards
Strategy-Specific
- pinning-identification.md - Finding pin opportunities
- wing-width-analysis.md - Optimize wing spacing
- strike-selection-guide.md - ATM and protection strikes
- credit-optimization.md - Maximize premium collected
- iv-analysis.md - IV rank, crush opportunities
- probability-analysis.md - Calculate profit probabilities
- expiration-timing.md - 7/14/21 day comparison
- greeks-guide.md - High gamma and vega exposure
- position-sizing.md - Risk management
- adjustment-strategies.md - Converting to condor
- examples.md - Real pinning setups
Dependencies
Required Packages:
numpy>=1.24.0
pandas>=2.0.0
matplotlib>=3.7.0
scipy>=1.10.0
Installation:
pip install -r requirements.txt
Python Version: 3.11+
Risk Warnings
⚠️ Key Risks:
- Extremely Tight Profit Zone: Very narrow range for profit
- High Gamma Risk: Position changes rapidly outside ATM
- Limited Probability: Lower chance of profit vs. iron condor
- Assignment Risk: ATM short options high assignment risk
- Pin Risk: Complex assignment scenarios at ATM
- IV Crush Dependency: Requires significant IV contraction
- Gap Risk: Overnight gaps can breach wings quickly
Risk Mitigation:
- Only use in very high IV (IV rank >70)
- Exit day after event (capture IV crush)
- Set tight stop loss (2-3× credit)
- Monitor ATM strikes closely for assignment
- Don't hold through expiration if ATM
- Size very conservatively (1-2% portfolio risk)
- Have adjustment plan before entry
When to Use Iron Butterfly
✅ Ideal Scenarios:
- Very high IV environment (IV rank >70)
- Expect stock to pin at ATM strike
- Pre-earnings with imminent IV crush
- Stock at strong technical level
- High open interest at ATM strike
- Short time to expiration (7-21 days)
- Want maximum credit collection
- Experienced with gamma risk
❌ Avoid When:
- Low-moderate IV (IV rank <60)
- Uncertain where stock will settle
- No clear pinning catalyst
- Trending market
- Wide bid/ask spreads
- Inexperienced with complex strategies
- Can't actively monitor
- Long time to expiration (>30 days)
Comparison to Other Strategies
vs. Iron Condor: Higher credit but tighter profit zone and higher gamma risk. Better for IV crush plays.
vs. Long Butterfly: Collect credit vs. pay debit. Benefits from IV decrease with higher theta benefit.
vs. Short Straddle: Defined risk with wings protection. Lower credit but no naked exposure and easier approval.
Example Trade
Scenario: SPY at $450 day before FOMC, IV rank 85, expect minimal move
Setup:
- Sell 1 SPY $450 call @ $5.50
- Sell 1 SPY $450 put @ $5.25 (Straddle credit: $10.75)
- Buy 1 SPY $440 put @ $0.90
- Buy 1 SPY $460 call @ $1.00 (Strangle cost: $1.90)
- Net credit: $8.85 × 100 = $885 per butterfly
- Contracts: 2 butterflies
- Expiration: 14 days (week after FOMC)
Risk Profile:
- Max Profit: $885 × 2 = $1,770 (if SPY exactly $450 at expiration)
- Max Loss: ($10 wing - $8.85 credit) × 100 × 2 = $230
- Lower Breakeven: $450 - $8.85 = $441.15
- Upper Breakeven: $450 + $8.85 = $458.85
- Profit Zone: $441.15 - $458.85 (17.7-point range, ±3.9%)
- Risk/Reward: 7.7:1 (excellent R:R)
- Probability of Profit: ~55%
Outcomes: SPY at $450 = max profit $1,770; at $445 = profit ~$1,020; at $441 = breakeven; outside wings = max loss $230
Management: Target 60% max profit ($1,062) day after FOMC; stop if SPY approaches $442 or $458
Version History
v1.0 (2025-12-12)
- Initial release using SKILL_PACKAGE_TEMPLATE v3.0
- Anthropic + Claude Code compliant (<500 lines)
- Progressive disclosure with references/
- Complete credit optimizer and probability calculator
- Pinning identification framework
- IV crush analysis and adjustment strategies
Compliance: Anthropic Best Practices ✅ | Claude Code Compatible ✅ Template: SKILL_PACKAGE_TEMPLATE v3.0 Lines: ~485 (under 500-line limit)