470 lines
12 KiB
Markdown
470 lines
12 KiB
Markdown
# 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)
|