Files

470 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Options Strategy Advisor
Educational options trading tool providing theoretical pricing, strategy analysis, and risk management guidance using Black-Scholes model.
## Overview
Options Strategy Advisor helps traders understand and analyze options strategies without requiring expensive real-time options data. It uses theoretical pricing models (Black-Scholes) combined with free stock market data (FMP API) to simulate strategies and calculate Greeks.
**Key Features:**
- ✅ Black-Scholes pricing engine
- ✅ All Greeks calculation (Delta, Gamma, Theta, Vega, Rho)
- ✅ 17+ options strategies supported
- ✅ P/L simulation and visualization
- ✅ Earnings strategy integration
- ✅ Historical volatility calculation
- ✅ Risk management guidance
## Why This Approach?
**No expensive data subscriptions needed:**
- Real-time options data: $99-$500/month (Polygon.io, Intrinio)
- FMP API Free tier: $0/month (250 requests/day)
**Educational focus:**
- Learn how strategies work
- Understand Greeks and risk metrics
- Compare strategies side-by-side
**Practical application:**
- Theoretical prices ≈ market mid-prices
- User can input actual IV from broker
- Good for strategy planning and education
## Supported Strategies
### Income Strategies
1. **Covered Call** - Generate income from stock holdings
2. **Cash-Secured Put** - Get paid to buy stock
3. **Poor Man's Covered Call** - Capital-efficient covered call
### Protection Strategies
4. **Protective Put** - Insurance for stock positions
5. **Collar** - Limited risk/reward protection
### Directional Strategies
6. **Bull Call Spread** - Limited risk bullish play
7. **Bull Put Spread** - Credit spread for bullish view
8. **Bear Call Spread** - Credit spread for bearish view
9. **Bear Put Spread** - Limited risk bearish play
### Volatility Strategies
10. **Long Straddle** - Profit from big moves
11. **Long Strangle** - Cheaper straddle, bigger move needed
12. **Short Straddle** - Profit from no movement (high risk)
13. **Short Strangle** - Wider range straddle
### Range-Bound Strategies
14. **Iron Condor** - Profit from range-bound trading
15. **Iron Butterfly** - Tight range profit
### Advanced Strategies
16. **Calendar Spread** - Time decay play
17. **Diagonal Spread** - Directional + time decay
## Installation
### Prerequisites
- Python 3.8+
- FMP API key (free tier sufficient)
### Install Dependencies
```bash
pip install numpy scipy requests pandas
```
### Get FMP API Key
1. Visit https://financialmodelingprep.com/developer/docs
2. Sign up for free account
3. Copy API key
4. Set environment variable:
```bash
export FMP_API_KEY="your_key_here"
```
## Quick Start
### Test Black-Scholes Pricer
```bash
python scripts/black_scholes.py
```
**Example Output:**
```
BLACK-SCHOLES OPTIONS PRICER - EXAMPLE
======================================================================
Input Parameters:
Stock Price: $180.00
Strike Price: $185.00
Days to Expiration: 30
Volatility: 25.0%
Risk-Free Rate: 5.30%
Dividend Yield: 1.0%
======================================================================
CALL OPTION
======================================================================
Price: $2.45
Intrinsic Value: $0.00
Time Value: $2.45
Greeks:
Delta: 0.3654 ($36.54 per $1 move)
Gamma: 0.0234 (delta changes by 0.0234)
Theta: -$0.18/day (loses $0.18 per day)
Vega: $0.25 per 1% IV (gains $0.25 if IV +1%)
Rho: $0.12 per 1% rate (gains $0.12 if rate +1%)
```
### Use in Your Code
```python
from scripts.black_scholes import OptionPricer
# Initialize pricer
pricer = OptionPricer(
S=180, # Stock price
K=185, # Strike price
T=30/365, # Time to expiration (years)
r=0.053, # Risk-free rate (5.3%)
sigma=0.25, # Volatility (25%)
q=0.01 # Dividend yield (1%)
)
# Get call option price
call_price = pricer.call_price()
print(f"Call Price: ${call_price:.2f}")
# Get all Greeks for call
call_greeks = pricer.get_all_greeks('call')
print(f"Delta: {call_greeks['delta']:.4f}")
print(f"Gamma: {call_greeks['gamma']:.4f}")
print(f"Theta: ${call_greeks['theta']:.2f}/day")
print(f"Vega: ${call_greeks['vega']:.2f} per 1%")
```
### Calculate Historical Volatility
```python
from scripts.black_scholes import (
calculate_historical_volatility,
fetch_historical_prices_for_hv
)
# Fetch prices from FMP
api_key = "your_key"
prices = fetch_historical_prices_for_hv("AAPL", api_key, days=90)
# Calculate 30-day HV
hv = calculate_historical_volatility(prices, window=30)
print(f"30-Day HV: {hv*100:.2f}%")
```
## Understanding the Metrics
### Option Price Components
**Intrinsic Value:**
- Call: max(0, Stock Price - Strike Price)
- Put: max(0, Strike Price - Stock Price)
**Time Value:**
- Option Price - Intrinsic Value
- Decays to $0 at expiration
### The Greeks
**Delta (Δ)** - Directional Exposure
```
Range: 0 to 1 (calls), -1 to 0 (puts)
Meaning: Change in option price per $1 stock move
Example: Δ = 0.50
→ If stock +$1, option +$0.50
→ If stock -$1, option -$0.50
```
**Gamma (Γ)** - Delta Acceleration
```
Meaning: Change in delta per $1 stock move
Peak: ATM options
Low: Deep ITM or OTM
Example: Γ = 0.05, Δ currently = 0.50
→ If stock +$1, delta becomes 0.55
```
**Theta (Θ)** - Time Decay
```
Meaning: Change in option price per day
Sign: Usually negative (options lose value over time)
Peak: Last 30 days before expiration
Example: Θ = -$0.15/day
→ Tomorrow, option loses $0.15 if nothing else changes
```
**Vega (ν)** - Volatility Sensitivity
```
Meaning: Change in option price per 1% IV change
Sign: Always positive (options gain value when vol increases)
Example: ν = $0.25 per 1%
→ If IV increases from 25% to 26%, option +$0.25
```
**Rho (ρ)** - Interest Rate Sensitivity
```
Meaning: Change in option price per 1% rate change
Sign: Positive for calls, negative for puts
Impact: Usually small unless long-dated options
Example: ρ = $0.10 per 1%
→ If interest rate increases 1%, option +$0.10
```
### Volatility: HV vs IV
**Historical Volatility (HV):**
- Calculated from past price movements
- Objective, based on actual data
- Available free (from price data)
**Implied Volatility (IV):**
- Derived from option market prices
- Subjective, based on supply/demand
- Requires real-time options data (or user input)
**Comparison:**
```
IV > HV: Options expensive → Consider selling premium
IV < HV: Options cheap → Consider buying options
IV = HV: Fairly priced → Any strategy works
```
## Common Workflows
### 1. Analyze a Strategy
```python
from scripts.black_scholes import OptionPricer
# Stock: AAPL @ $180
# Strategy: Bull Call Spread $180/$185 (30 DTE)
# Price long call ($180 strike)
long_call = OptionPricer(S=180, K=180, T=30/365, r=0.053, sigma=0.25)
long_price = long_call.call_price()
long_delta = long_call.call_delta()
# Price short call ($185 strike)
short_call = OptionPricer(S=180, K=185, T=30/365, r=0.053, sigma=0.25)
short_price = short_call.call_price()
short_delta = short_call.call_delta()
# Strategy metrics
net_debit = long_price - short_price
max_profit = (185 - 180) - net_debit
max_loss = -net_debit
position_delta = long_delta - short_delta
print(f"Bull Call Spread $180/$185")
print(f"Net Debit: ${net_debit:.2f}")
print(f"Max Profit: ${max_profit:.2f} (at $185+)")
print(f"Max Loss: ${max_loss:.2f} (at $180-)")
print(f"Position Delta: {position_delta:.4f}")
```
### 2. Compare IV to HV
```python
# Get HV
prices = fetch_historical_prices_for_hv("AAPL", api_key, days=90)
hv = calculate_historical_volatility(prices, window=30)
# User provides IV (from broker platform)
iv = 0.28 # 28% from ThinkorSwim
print(f"Historical Volatility: {hv*100:.2f}%")
print(f"Implied Volatility: {iv*100:.1f}%")
if iv > hv * 1.1:
print("→ Options expensive (IV > HV) - Consider selling premium")
elif iv < hv * 0.9:
print("→ Options cheap (IV < HV) - Consider buying options")
else:
print("→ Fairly priced")
```
### 3. Earnings Strategy
Check if earnings coming up (use Earnings Calendar skill):
```python
# If earnings in 7 days:
# - IV typically elevated (30-50% higher)
# - Consider straddle/strangle (profit from big move)
# - Or sell iron condor (profit from IV crush)
# Example: Long Straddle
straddle_cost = call_price + put_price
breakeven_up = stock_price + straddle_cost
breakeven_down = stock_price - straddle_cost
print(f"Straddle Cost: ${straddle_cost:.2f}")
print(f"Breakevens: ${breakeven_down:.2f} / ${breakeven_up:.2f}")
print(f"Need {abs(breakeven_up - stock_price)/stock_price*100:.1f}% move to profit")
```
## Limitations & Best Practices
### Theoretical vs Market Prices
**Black-Scholes Assumptions:**
- European options (can't exercise early)
- Constant volatility (changes in reality)
- No transaction costs
- Continuous trading
**Real World Differences:**
- American options (most stocks) can exercise early
- Bid-ask spread: Actual cost higher than theoretical mid
- Commissions and slippage
- Liquidity: Wide markets on illiquid options
### Best Practices
**1. Use for Education & Planning:**
- Learn how strategies work
- Compare different approaches
- Understand risk/reward before trading
**2. Verify Before Trading:**
- Get real quotes from your broker
- Check bid-ask spread
- Confirm option liquidity (open interest, volume)
**3. Input Actual IV:**
- Theoretical price assumes constant volatility
- Use current market IV for accuracy
- Check IV percentile (high/low relative to history)
**4. Account for Dividends:**
- Ex-dividend dates affect option prices
- Calls lose value, puts gain value on ex-div date
- Script supports dividend yield input
**5. Monitor Greeks:**
- Delta: Overall directional exposure
- Theta: Daily time decay (seller advantage)
- Vega: Volatility risk (watch during earnings)
- Gamma: Risk of delta changing (avoid near expiration)
## Integration with Other Skills
**Earnings Calendar:**
- Fetch earnings dates
- Identify IV crush opportunities
- Time earnings strategies
**Technical Analyst:**
- Use support/resistance for strike selection
- Trend analysis for directional strategies
- Breakout potential for straddle timing
**US Stock Analysis:**
- Fundamental analysis for LEAPS
- Dividend yield for covered call/put
- Earnings quality for earnings plays
**Bubble Detector:**
- High risk → protective puts
- Low risk → bullish strategies
- Critical risk → avoid long premium
**Portfolio Manager:**
- Track options with stock positions
- Aggregate Greeks across portfolio
- Options as hedging tool
## API Usage & Costs
**Free Tier Sufficient:**
- Stock prices: 1 request per symbol
- Historical prices (HV): 1 request per symbol
- Dividend data: 1 request per symbol
**Example Analysis Cost:**
```
Covered Call on AAPL:
- Current price: 1 request
- HV calculation: 1 request (90 days data)
- Dividend yield: 1 request
Total: 3 requests
Daily budget: 250 requests / day
→ Can analyze ~80 strategies per day
```
## Troubleshooting
### Negative Option Price
**Cause:** Invalid inputs (strike vs stock price)
**Solution:** Check that inputs make sense
### Greeks Seem Wrong
**Cause:** Using wrong units (annual vs daily)
**Solution:** Verify T is in years, theta is per day
### HV Very Different from IV
**Normal:** IV reflects future expectations, HV is past
**Action:** Use IV from broker for more accuracy
### Option Price Too High/Low
**Cause:** Volatility input incorrect
**Solution:** Verify sigma is annual (e.g., 0.25 for 25%)
## Resources
### Documentation
- `SKILL.md` - Complete workflow and strategies
- `references/strategies_guide.md` - All strategies explained (TBD)
- `references/greeks_explained.md` - Greeks deep dive (TBD)
### External Resources
- Options Playbook: https://www.optionsplaybook.com/
- CBOE Education: https://www.cboe.com/education/
- Black-Scholes Calculator: https://www.option-price.com/
### Get Real IV
- ThinkorSwim (TD Ameritrade): Free
- TastyTrade: Free
- Barchart: https://www.barchart.com/options
- CBOE: http://www.cboe.com/delayedquote/
## Future Enhancements
**Planned:**
- Strategy simulation script (complete P/L analysis)
- P/L diagram generator (ASCII art)
- Earnings strategy advisor (integrated with Earnings Calendar)
- Complete strategy reference guides
**Contributions Welcome:**
- Additional strategies
- Improved volatility models
- Better visualization tools
## License
Educational use. Trade at your own risk. Options involve significant risk and are not suitable for all investors.
---
**Version:** 1.0
**Last Updated:** 2025-11-08
**Dependencies:** Python 3.8+, numpy, scipy, requests
**API:** FMP API (Free tier sufficient)
**Model:** Black-Scholes (European options pricing)