Skip to content
Back to skills

Iron Butterfly

ASecurity

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.

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 9, 2026
developmentpythonbashapi

Works with

  • claude code
  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill iron-butterfly --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Iron Butterfly?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Iron Butterfly
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-iron-butterfly/badge)](https://www.skillsdirectory.com/skills/majiayu000-iron-butterfly)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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:

```python
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](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](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](references/strike-selection-guide.md).

### 4. Credit Optimization

Compare different configurations to maximize credit:

```python
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](references/credit-optimization.md).

### 5. IV Rank Analysis

Assess premium environment:

```python
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](references/iv-analysis.md).

### 6. Probability Analysis

Calculate probability of profit:

```python
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](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](references/expiration-timing.md).

### 8. Greeks Monitoring

Track iron butterfly Greeks:

```python
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](references/greeks-guide.md).

### 9. Position Sizing

Calculate risk-appropriate contracts:

```python
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](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](references/adjustment-strategies.md).

## Scripts

### Calculator

```bash
# 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

```bash
# 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

```bash
# 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](references/quickstart-guide.md) - 5-minute overview
- [installation-guide.md](references/installation-guide.md) - Setup instructions
- [developer-guide.md](references/developer-guide.md) - Code standards

### Strategy-Specific
- [pinning-identification.md](references/pinning-identification.md) - Finding pin opportunities
- [wing-width-analysis.md](references/wing-width-analysis.md) - Optimize wing spacing
- [strike-selection-guide.md](references/strike-selection-guide.md) - ATM and protection strikes
- [credit-optimization.md](references/credit-optimization.md) - Maximize premium collected
- [iv-analysis.md](references/iv-analysis.md) - IV rank, crush opportunities
- [probability-analysis.md](references/probability-analysis.md) - Calculate profit probabilities
- [expiration-timing.md](references/expiration-timing.md) - 7/14/21 day comparison
- [greeks-guide.md](references/greeks-guide.md) - High gamma and vega exposure
- [position-sizing.md](references/position-sizing.md) - Risk management
- [adjustment-strategies.md](references/adjustment-strategies.md) - Converting to condor
- [examples.md](references/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**:
```bash
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)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.