long-call-butterfly

Analyzes long call butterfly spreads with 3 strikes and 4 legs for neutral outlook. Requires numpy>=1.24.0, pandas>=2.0.0, matplotlib>=3.7.0, scipy>=1.10.0. Use when expecting minimal price movement, want low-cost defined-risk strategy, analyzing pinning opportunities, or evaluating tight-range neutral positions on stocks near technical levels.

$ 설치

git clone https://github.com/keith-mvs/ordinis /tmp/ordinis && cp -r /tmp/ordinis/docs/knowledge-base/domains/options/strategy-implementations/long-call-butterfly ~/.claude/skills/ordinis

// tip: Run this command in your terminal to install the skill


name: long-call-butterfly description: Analyzes long call butterfly spreads with 3 strikes and 4 legs for neutral outlook. Requires numpy>=1.24.0, pandas>=2.0.0, matplotlib>=3.7.0, scipy>=1.10.0. Use when expecting minimal price movement, want low-cost defined-risk strategy, analyzing pinning opportunities, or evaluating tight-range neutral positions on stocks near technical levels.

Long Call Butterfly Strategy

Version: 1.0 Last Updated: 2025-12-12

Overview

A long call butterfly is a sophisticated neutral strategy that profits from minimal price movement. Using three strike prices with four option contracts (1 ITM call + 2 ATM calls + 1 OTM call), the strategy offers limited risk and limited reward with maximum profit achieved when the stock closes exactly at the middle strike at expiration.

Quick Summary: Buy lower call + Sell 2 middle calls + Buy upper call = Profit from no movement

Strategy Characteristics

Position Structure:

  • Buy 1 call at lower strike (ITM or ATM)
  • Sell 2 calls at middle strike (ATM)
  • Buy 1 call at upper strike (OTM)
  • All same expiration, equal spacing between strikes

Risk Profile:

  • Maximum Loss: Net debit paid (limited)
  • Maximum Profit: Middle strike - Lower strike - Net debit
  • Breakeven Points:
    • Lower: Lower strike + Net debit
    • Upper: Upper strike - Net debit
  • Best Use: Expect stock to pin near middle strike with low volatility

Cost Components:

  • Lower call premium: Paid (debit, expensive)
  • Middle calls premium: Received (credit × 2, offset cost)
  • Upper call premium: Paid (debit, cheap)
  • Net debit = Lower + Upper - (2 × Middle)
  • Transaction costs: ~$0.65 per contract × 4 legs = $2.60

Quick Start

Calculate butterfly metrics:

from scripts.butterfly_calculator import LongCallButterfly

# Example: SPY at $450, expect minimal movement
position = LongCallButterfly(
    underlying_price=450.00,
    lower_strike=445.00,    # $5 ITM
    middle_strike=450.00,   # ATM (body)
    upper_strike=455.00,    # $5 OTM
    lower_premium=8.50,
    middle_premium=5.00,    # Sold 2×
    upper_premium=2.50,
    contracts=1
)

# Key metrics
print(f"Net Debit: ${position.net_debit:.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: {position.profit_zone_width:.2f} points")

Core Workflow

1. Identify Low-Volatility Opportunity

Look for stocks likely to trade in tight range:

Ideal Scenarios:

  • Post-Earnings Calm: Stock settles after volatile earnings
  • Consolidation: Trading in well-defined range
  • Technical Levels: Near strong support/resistance
  • Pre-Event Lull: Quiet period before catalyst
  • Low IV Environment: IV rank <40, low expected move

Stock Characteristics:

  • Low beta (< 1.0)
  • Tight historical trading ranges
  • Low implied volatility
  • Recent volatility compression
  • Clear technical pivot level

See references/opportunity-identification.md.

2. Strike Selection Framework

Standard Butterfly (Equal Wing Spacing):

  • Lower: $5 below current price
  • Middle: At current price (ATM)
  • Upper: $5 above current price
  • Wing width: $5 both sides
  • Example: Stock $100 → $95/$100/$105

Narrow Butterfly ($2.50-$5 wings):

  • Tighter profit zone
  • Higher probability of profit
  • Lower max profit potential
  • Example: Stock $450 → $447.50/$450/$452.50

Wide Butterfly ($10-$20 wings):

  • Wider profit zone
  • Lower probability of max profit
  • Higher max profit potential
  • Example: Stock $100 → $90/$100/$110

Selection Rules:

  • Middle strike = Expected pin point (often ATM)
  • Equal spacing: Upper-Middle = Middle-Lower
  • Match wing width to expected range

See references/strike-selection-guide.md.

3. Wing Width Optimization

Compare different wing widths:

from scripts.wing_optimizer import analyze_wing_widths

results = analyze_wing_widths(
    underlying_price=450.00,
    wing_widths=[2.5, 5.0, 10.0],
    volatility=0.18,
    days_to_expiration=30
)

for width, metrics in results.items():
    print(f"${width} wings:")
    print(f"  Max Profit: ${metrics['max_profit']:.2f}")
    print(f"  Max Loss: ${metrics['max_loss']:.2f}")
    print(f"  Profit Zone: ${metrics['profit_zone_width']:.2f}")
    print(f"  Prob of Profit: {metrics['prob_profit']:.1f}%")

Trade-off:

  • Narrow wings: Higher prob, lower profit
  • Wide wings: Lower prob, higher profit

See references/wing-width-analysis.md.

4. Probability Analysis

Calculate probability of profit:

from scripts.probability_calculator import calculate_butterfly_probabilities

prob = calculate_butterfly_probabilities(
    underlying_price=450.00,
    lower_strike=445.00,
    middle_strike=450.00,
    upper_strike=455.00,
    volatility=0.18,
    days_to_expiration=30
)

print(f"Prob at Middle Strike: {prob['at_middle']:.1f}%")
print(f"Prob in Profit Zone: {prob['in_profit_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 >60%: Good setup
  • Expected value >0: Positive expectancy
  • Max profit/Max loss ratio >3:1: Favorable R:R

See references/probability-analysis.md.

5. Expiration Cycle Selection

Short-Term Butterflies (7-21 days):

  • Lower cost (less time premium)
  • Faster theta decay benefit
  • Less time for stock to move outside range
  • Higher gamma risk (rapid changes)
  • Best for: Near-term pinning opportunities

Medium-Term Butterflies (30-45 days):

  • Balanced cost and time
  • Standard approach
  • Moderate theta benefit
  • Reasonable gamma exposure
  • Best for: Standard neutral plays

Long-Term Butterflies (60-90 days):

  • Higher cost (more time premium)
  • Slow theta decay
  • More time for adjustment
  • Lower gamma risk
  • Best for: Patient, adjustment-friendly approach

See references/expiration-timing.md.

6. Greeks Analysis

Monitor butterfly Greeks:

from scripts.greeks_calculator import calculate_butterfly_greeks

greeks = calculate_butterfly_greeks(
    lower_strike=445.00,
    middle_strike=450.00,
    upper_strike=455.00,
    underlying_price=450.00,
    volatility=0.18,
    time_to_expiration=30/365
)

print(f"Delta: {greeks['delta']:.3f}")    # ~0 at middle
print(f"Gamma: {greeks['gamma']:.3f}")    # Changes rapidly
print(f"Theta: {greeks['theta']:.3f}")    # Positive (earns decay)
print(f"Vega: {greeks['vega']:.3f}")      # Negative (hurts from IV rise)

Key Insights:

  • Delta: Near zero at middle strike, changes outside wings
  • Gamma: Positive in profit zone, negative outside
  • Theta: Positive (benefits from time decay)
  • Vega: Negative (benefits from IV decrease)

See references/greeks-guide.md.

7. Position Sizing

Calculate appropriate contracts:

from scripts/position_sizer import calculate_butterfly_size

contracts = calculate_butterfly_size(
    portfolio_value=100000,
    risk_per_trade=0.01,      # 1% max risk
    max_loss_per_butterfly=150 # Net debit
)
# Returns: 6 contracts (max risk $900 = 0.9%)

Sizing Guidelines:

  • Risk 0.5-2% per butterfly (low risk strategy)
  • Max loss = Net debit (clearly defined)
  • Consider multiple butterflies at different strikes
  • Scale in/out rather than all-in

See references/position-sizing.md.

8. Entry Execution

Order Types:

  • Butterfly Order: Single order for all 4 legs (best execution)
  • Limit Order: Set max net debit willing to pay
  • Spread Order: Enter as vertical spreads (2 separate orders)

Best Practices:

  • Always enter as butterfly order (1 ticket, 4 legs)
  • Set limit at mid-point of butterfly bid/ask
  • Adjust by $0.05 if not filled within 60 seconds
  • Avoid wide markets (>15% spread)
  • Verify equal wing spacing before sending

Entry Timing:

  • Enter when stock at middle strike (optimal)
  • Avoid entering after large move
  • Best during low volatility periods
  • Consider multiple strikes if uncertain of pin point

9. Adjustment Strategies

Stock Moves Outside Profit Zone:

Upside Adjustment (Stock above upper strike):

  • Close entire butterfly, accept loss
  • Roll to higher strikes (all 3 strikes up)
  • Add short call spread above (convert to condor)

Downside Adjustment (Stock below lower strike):

  • Close entire butterfly, accept loss
  • Roll to lower strikes (all 3 strikes down)
  • Add short put spread below (convert to condor)

Widening Profit Zone:

  • Close current butterfly
  • Open wider wing butterfly (increase spacing)
  • Accept lower max profit for wider range

See references/adjustment-techniques.md.

10. Exit Management

Profit Targets:

  • 50-70% max profit: Excellent target, reduces risk
  • 80% max profit: Near optimal, theta slowing
  • Expiration: Hold for max profit if confident

Stop Loss:

  • 100% of debit: Full max loss, exit immediately
  • Stock outside wings: Low recovery probability
  • Volatility spike: Exit if IV increases significantly

Early Exit Scenarios:

  • Stock moves >75% toward wing
  • IV increases >50% (vega loss)
  • Theta benefit exhausted (little time value left)
  • Better opportunity elsewhere

See references/exit-strategies.md.

Scripts

Calculator

# Calculate butterfly metrics
python scripts/butterfly_calculator.py \
  --underlying SPY \
  --price 450 \
  --lower-strike 445 \
  --middle-strike 450 \
  --upper-strike 455 \
  --lower-premium 8.50 \
  --middle-premium 5.00 \
  --upper-premium 2.50

Wing Optimizer

# Compare different wing widths
python scripts/wing_optimizer.py \
  --underlying SPY \
  --price 450 \
  --widths 2.5 5.0 10.0 \
  --dte 30 \
  --volatility 0.18

Probability Calculator

# Calculate probability of profit
python scripts/probability_calculator.py \
  --price 450 \
  --lower 445 \
  --middle 450 \
  --upper 455 \
  --dte 30 \
  --vol 0.18

References

Core Guides

Strategy-Specific

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:

  • Limited Profit: Capped at wing width - net debit
  • Narrow Profit Zone: Small range for profitability
  • Gamma Risk: Rapid position changes outside wings
  • Assignment Risk: Short middle calls can be assigned early
  • Pin Risk: Stock settling exactly at strike (complex assignment scenarios)
  • Complexity: 4 legs = higher commissions, wider spreads
  • Adjustment Cost: Expensive to roll or adjust position

Risk Mitigation:

  • Only use in low volatility environments
  • Set stop loss at max loss (net debit)
  • Exit early if stock approaches wings (don't wait)
  • Monitor middle strike for early assignment risk
  • Use stocks with liquid options (tight spreads)
  • Verify equal wing spacing to avoid undefined risk

When to Use Long Call Butterfly

Ideal Scenarios:

  • Expect minimal price movement (neutral outlook)
  • Stock consolidating in tight range
  • Post-earnings quiet period
  • Low IV environment (IV rank <40)
  • Near strong technical support/resistance
  • Want defined risk with low capital requirement
  • Comfortable with limited profit potential

Avoid When:

  • Expecting large moves (use straddle/strangle)
  • High volatility environment (IV crush hurts)
  • Unclear where stock will settle
  • Wide bid/ask spreads (execution cost too high)
  • Trending market (directional bias)
  • Upcoming catalyst (volatility spike risk)

Comparison to Other Strategies

vs. Iron Butterfly:

  • ✅ All long options (no naked short risk)
  • ❌ Pay debit vs. collect credit
  • ✅ Easier approval (no margin requirement)

vs. Straddle/Strangle:

  • ✅ Lower cost (credit from short middle calls)
  • ❌ Limited profit (capped vs. unlimited)
  • ✅ Profits from no movement (vs. needing big move)

vs. Condor:

  • ❌ Narrower profit zone
  • ✅ Higher max profit potential
  • ✅ Lower cost (fewer legs)

Example Trade

Scenario: SPY consolidating at $450, expect to stay $445-$455 over 30 days

Setup:

  • Buy 1 SPY $445 call @ $8.50
  • Sell 2 SPY $450 calls @ $5.00 (receive $10.00)
  • Buy 1 SPY $455 call @ $2.50
  • Net debit: $8.50 + $2.50 - $10.00 = $1.00 × 100 = $100
  • Contracts: 10 butterflies
  • Expiration: 30 days

Risk Profile:

  • Max Loss: $100 × 10 = $1,000 (if SPY ≤$445 or ≥$455)
  • Max Profit: ($5.00 - $1.00) × 100 × 10 = $4,000 (if SPY exactly $450)
  • Lower Breakeven: $445 + $1 = $446
  • Upper Breakeven: $455 - $1 = $454
  • Profit Zone: $446-$454 (8-point range, ±1.8%)
  • Risk/Reward: 1:4 (excellent)

Outcomes at Expiration:

  • SPY at $450: Max profit $4,000
  • SPY at $452: Profit ~$2,000 (in profit zone)
  • SPY at $446: Near breakeven
  • SPY at $443: Max loss $1,000
  • SPY at $457: Max loss $1,000

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 wing width optimizer and probability calculator
  • Adjustment techniques and exit strategies
  • Equal spacing framework for strike selection

Compliance: Anthropic Best Practices ✅ | Claude Code Compatible ✅ Template: SKILL_PACKAGE_TEMPLATE v3.0 Lines: ~480 (under 500-line limit)

Repository

keith-mvs
keith-mvs
Author
keith-mvs/ordinis/docs/knowledge-base/domains/options/strategy-implementations/long-call-butterfly
1
Stars
0
Forks
Updated2h ago
Added5d ago