options-payoff
himself65/finance-skills
Interactive options payoff charts with Black-Scholes pricing and real-time sliders for strikes, premium, IV, and DTE.
What is options-payoff?
Render live P&L curves for any options strategy—spreads, butterflies, condors, straddles, and more—showing both expiry payoff and theoretical value. Use this whenever a user shares an options position or screenshot and wants to visualize how it profits or loses across spot prices.
- Generates interactive HTML widget with expiry payoff (dashed) and Black-Scholes theoretical value (solid) curves
- Dynamic sliders for all strikes, premium, quantity, IV, DTE, and spot price
- Real-time stats: max profit, max loss, breakevens, and current P&L at spot
- Supports vertical spreads, butterflies, condors, iron condors, straddles, strangles, covered calls, naked puts, calendar spreads, and custom multi-leg strategies
- Extracts strategy details from broker screenshots (IBKR, TastyTrade, Robinhood) and text descriptions with sensible defaults
- Color-coded chart with green/red fill zones, strike markers, and current spot indicator
How to install options-payoff
npx skills add https://github.com/himself65/finance-skills --skill options-payoffHow to use options-payoff
- 1.Provide the user's options position (text, screenshot, or strikes/premiums/expiry)
- 2.Extract strategy type, strikes, premiums, quantity, and expiry from the input
- 3.Identify the strategy (butterfly, vertical, calendar, iron condor, straddle, etc.) or use custom mode
- 4.Compute Black-Scholes theoretical values and expiry payoffs using the provided formulas
- 5.Render the interactive widget with sliders for strikes, premium, IV, DTE, spot, and risk-free rate
- 6.Display live stats (max profit, max loss, breakevens, current P&L) and explain the strategy in one sentence
Use cases
- Analyze a vertical call spread screenshot to see max profit, max loss, and breakeven prices
- Visualize an iron condor position across a range of spot prices to understand risk zones
- Compare how a calendar spread's value changes as DTE decreases while spot moves
- Explore how IV changes affect a long straddle's P&L before expiration
- Evaluate a butterfly spread's payoff curve to confirm strike selection and max profit location
- Options traders evaluating multi-leg strategies before entry
- Risk managers reviewing position P&L across market scenarios
- Educators teaching options payoff mechanics and Greeks
- Retail investors learning how spreads and exotic strategies behave
options-payoff FAQ
Use a live quote (yfinance for most tickers, or the SPX probe for ^GSPC). Fall back to the middle strike only if no quote is available, and tell the user you did.
Use sensible defaults: 30 DTE, 20% IV, 4.3% risk-free rate, 100 multiplier, and nearest round-number strikes if not provided.
Yes—decompose any strategy into individual call and put legs, compute each leg's payoff using Black-Scholes, and sum them to get total P&L.
The expiry payoff curve shows intrinsic value at expiration (what the position is worth if held to expiry). The solid colored line shows theoretical value at the current DTE and IV.
Breakevens are spot prices where total P&L crosses zero. For single-sided strategies, there is one; for two-sided strategies (straddles, condors), there are typically two.
Full instructions (SKILL.md)
Source of truth, from himself65/finance-skills.
name: options-payoff description: > Render an interactive options payoff chart — expiry P&L plus Black-Scholes theoretical value — with sliders for strikes, premium, IV, DTE, and spot. Use this skill whenever the user describes or shares an options position or strategy and wants to see how it makes or loses money: vertical, calendar, diagonal, or ratio spreads, butterflies, condors and iron condors, straddles, strangles, covered calls, protective or naked puts, or any multi-leg structure. This includes pasted strikes, premiums, and expiries, requests like "show me the payoff" or "draw the P&L curve", and broker screenshots (IBKR, TastyTrade, Robinhood). Use it even when details are partial — defaults fill the gaps.
Options Payoff Curve Skill
Generates a fully interactive HTML widget (via visualize:show_widget) showing:
- Expiry payoff curve (dashed gray line) — intrinsic value at expiration
- Theoretical value curve (solid colored line) — Black-Scholes price at current DTE/IV
- Dynamic sliders for all key parameters
- Real-time stats: max profit, max loss, breakevens, current P&L at spot
Step 1: Extract Strategy From User Input
When the user provides a screenshot or text, extract:
| Field | Where to find it | Default if missing |
|---|---|---|
| Strategy type | Title bar / leg description | "custom" |
| Underlying | Ticker symbol | SPX |
| Strike(s) | K1, K2, K3... in title or leg table | nearest round number |
| Premium paid/received | Filled price or avg price | 5.00 |
| Quantity | Position size | 1 |
| Multiplier | 100 for equity options, 100 for SPX | 100 |
| Expiry | Date in title | 30 DTE |
| Spot price | Current underlying price shown in the screenshot or text | live quote (see below); middle strike only if no quote is available |
| IV | Shown in greeks panel, or estimate from vega | 20% |
| Risk-free rate | — | 4.3% |
Spot for screenshots: spot is the underlying's current price, and broker screenshots often omit it or show it far from the strikes — don't read it off the strike labels. Use the price shown, else a live quote (the SPX probe below, or yfinance for other underlyings). Fall back to the middle strike only when no quote is available, and tell the user you did.
Current SPX reference price:
!`python3 -c "exec('try:\n import yfinance as yf\n p=yf.Ticker(\'^GSPC\').fast_info[\'lastPrice\']\n print(f\'SPX ≈ {p:.0f}\')\nexcept Exception:\n print(\'SPX price unavailable — check market data\')')"`
Step 2: Identify Strategy Type
Match to one of the supported strategies below, then read the corresponding section in references/strategies.md.
| Strategy | Legs | Key Identifiers |
|---|---|---|
| butterfly | Buy K1, Sell 2×K2, Buy K3 | 3 strikes, "Butterfly" in title |
| vertical_spread | Buy K1, Sell K2 (same expiry) | 2 strikes, debit or credit |
| calendar_spread | Buy far-expiry K, Sell near-expiry K | Same strike, 2 expiries |
| iron_condor | Sell K2/K3, Buy K1/K4 wings | 4 strikes, 2 spreads |
| straddle | Buy Call K + Buy Put K | Same strike, both types |
| strangle | Buy OTM Call + Buy OTM Put | 2 strikes, both OTM |
| covered_call | Long 100 shares + Sell Call K | Stock + short call |
| naked_put | Sell Put K | Single leg |
| ratio_spread | Buy 1×K1, Sell N×K2 | Unequal quantities |
For strategies not listed, use custom mode: decompose into individual legs and sum their P&Ls.
Step 3: Compute Payoffs
Black-Scholes Put Price
d1 = (ln(S/K) + (r + σ²/2)·T) / (σ·√T)
d2 = d1 - σ·√T
put = K·e^(-rT)·N(-d2) - S·N(-d1)
Black-Scholes Call Price (via put-call parity)
call = put + S - K·e^(-rT)
Butterfly Put Payoff (expiry)
if S >= K3: 0
if S >= K2: K3 - S
if S >= K1: S - K1
else: 0
Net P&L per share = payoff − premium_paid
Vertical Spread (call debit) Payoff (expiry)
long_call = max(S - K1, 0)
short_call = max(S - K2, 0)
payoff = long_call - short_call - net_debit
Calendar Spread Theoretical Value
Calendar cannot be expressed as a simple expiry function — always use BS pricing for both legs:
value = BS(S, K, T_far, r, IV_far) - BS(S, K, T_near, r, IV_near)
For expiry curve of calendar: near leg expires worthless, far leg = BS with remaining T.
Iron Condor Payoff (expiry)
put_spread = max(K2-S, 0) - max(K1-S, 0) // short put spread
call_spread = max(S-K3, 0) - max(S-K4, 0) // short call spread
payoff = credit_received - put_spread - call_spread
Step 4: Render the Widget
Use visualize:read_me with modules ["chart", "interactive"] before building.
Required Controls (sliders)
Structure section:
- All strike prices (K1, K2, K3... as needed by strategy)
- Premium paid/received
- Quantity
- Multiplier (100 default, show for clarity)
Pricing variables section:
- IV % (5–80%, step 0.5)
- DTE — days to expiry (0–90)
- Risk-free rate % (0–8%)
Spot price:
- Full-width slider, range = [min_strike - 20%, max_strike + 20%], defaulting to ACTUAL current spot
Required Stats Cards (live-updating)
- Max profit (expiry)
- Max loss (expiry)
- Breakeven(s) — show both for two-sided strategies
- Current theoretical P&L at spot
Chart Specs
- X-axis: SPX/underlying price
- Y-axis: Total USD P&L (not per-share)
- Blue solid line = theoretical value at current DTE/IV
- Gray dashed line = expiry payoff
- Green dashed vertical = strike prices (K2 center strike brighter)
- Amber dashed vertical = current spot price
- Fill above zero = green 10% opacity; below zero = red 10% opacity
- Tooltip: show both curves on hover
Code template
Use this JS structure inside the widget, adapting pnlExpiry() and bfTheory() per strategy:
// Black-Scholes helpers (always include)
function normCDF(x) { /* Horner approximation */ }
function bsCall(S,K,T,r,sig) { /* standard BS call */ }
function bsPut(S,K,T,r,sig) { /* standard BS put */ }
// Strategy-specific expiry payoff (returns per-share value BEFORE premium)
function expiryValue(S, ...strikes) { ... }
// Strategy-specific theoretical value using BS
function theoreticalValue(S, ...strikes, T, r, iv) { ... }
// Main update() reads all sliders, computes arrays, destroys+recreates Chart.js instance
function update() { ... }
// Attach listeners
['k1','k2',...,'iv','dte','rate','spot'].forEach(id => {
document.getElementById(id).addEventListener('input', update);
});
update();
Step 5: Respond to User
After rendering the widget, briefly explain:
- What strategy was detected and how legs were mapped
- Max profit / max loss at current settings
- One key insight (e.g., "spot is currently 950 pts below the profit zone, expiring tomorrow")
Keep it concise — the chart speaks for itself.
Reference Files
references/strategies.md— Detailed payoff formulas and edge cases for each strategy typereferences/bs_code.md— Copy-paste ready Black-Scholes JS implementation with normCDF
Read the relevant reference file if you're unsure about payoff formula edge cases for a given strategy.
Related skills
More from himself65/finance-skills and the wider catalog.

saas-valuation-compression
Analyze SaaS valuation multiple compression across funding rounds and attribute it to macro rates, growth, narrative, and competition.

sepa-strategy
Analyze growth stocks using Mark Minervini's SEPA framework for stage, trend, fundamentals, and precise entry points.

skill-creator
Create, improve, and evaluate agent skills with structured planning and quality assurance.

startup-analysis
Analyze startups from investor, job applicant, and founder perspectives to make informed decisions.

stock-correlation
Analyze how stocks move together using Yahoo Finance data—find correlated peers, measure beta, and detect co-movement patterns.

stock-liquidity
Analyze stock liquidity: spreads, volume, market impact, and trading costs using Yahoo Finance data.