Open methodology
Every formula, every assumption, every data source. No black boxes. If you find an error, open an issue.
Data sources
- Options chains, bid/ask/volume/OI/IV: Yahoo Finance v7 unofficial API (query2.finance.yahoo.com). Delayed ~15 minutes during market hours, sometimes longer outside. No API key required, scraped via curl_cffi with Chrome impersonation.
- Spot price: Pulled from the same Yahoo response (regularMarketPrice or post/pre market fallback).
- Greeks (delta, gamma, theta, vega): Yahoo does NOT provide greeks. We compute them locally via Black-Scholes from spot, strike, IV, days-to-expiry, risk-free rate.
- Risk-free rate: Currently a constant 4.5% (close to 3-month T-bill). A future improvement is pulling live from FRED API.
Black-Scholes greeks
Standard textbook formulas. For a European option on a non-dividend stock:
d1 = [ ln(S/K) + (r + σ²/2) × T ] / (σ × √T) d2 = d1 - σ × √T Δ_call = N(d1) Δ_put = N(d1) - 1 Γ = N'(d1) / (S × σ × √T) (same for call and put) ν = S × N'(d1) × √T / 100 (vega per 1% IV change) θ_call = -[S × N'(d1) × σ / (2√T)] - r × K × e^(-rT) × N(d2) (per year; we divide by 365 for per-day) θ_put = -[S × N'(d1) × σ / (2√T)] + r × K × e^(-rT) × N(-d2)
Caveats. We assume no dividends (introduces small error on dividend stocks), European-style exercise (American differs slightly for deep ITM puts near expiry), and that Yahoo's IV is correct (sometimes it's stale or NaN, especially for illiquid strikes).
Gamma Exposure (GEX)
We use the SqueezeMetrics convention: dealers are assumed SHORT calls and LONG puts (because retail/institutional clients tend to BUY calls and SELL puts net). So:
GEX_per_contract = Γ × 100 × OI × S² × 0.01 (Γ × 100: per-contract gamma; OI: open interest; S²×0.01: $ per 1% S move) Signed_GEX = +GEX_per_contract for CALLS (dealers short positive feedback to volatility damping) Signed_GEX = -GEX_per_contract for PUTS (dealers long magnifies moves) Total_GEX = sum over all contracts
Interpretation. Positive total GEX = volatility-dampening environment (dealers hedge against trend). Negative total GEX = volatility-amplifying (dealers hedge with trend, accelerating moves). Crossing zero is often a regime shift.
Zero-GEX (flip strike)
We aggregate per-strike net GEX across all loaded expirations, then walk strikes from low to high computing cumulative net GEX. The flip strike is where cumulative GEX crosses zero (interpolated linearly between adjacent strikes).
Limitation. This is a global aggregate - it doesn't distinguish near-term from far-dated expiries. For pure 0DTE analysis, filter to today's expiration only on /ticker.html.
Max pain
The strike that minimizes total option payout at expiration, weighted by current OI. Computed for ALL loaded expirations combined (front-month dominant). Some traders use it as a magnet level approaching opex; the academic evidence is mixed.
Expected move (1-day, 1 sigma)
From the ATM call IV at the front-most expiration:
EM_1d = Spot × IV × √(1/365)
Unusual flow detection
We flag contracts as "unusual" if all of:
- Volume ≥ 100 contracts (signal floor - filters dust)
- Volume / Open Interest ≥ 1.0 (today's volume exceeds standing position)
- Estimated premium = last × volume × 100 ≥ $50,000
Direction heuristic (caveat: NOT confirmed flow):
- CALL with strike ≥ spot AND vol > OI bullish
- PUT with strike ≤ spot AND vol > OI bearish
- Everything else neutral
Real flow services (Unusual Whales, etc.) use tick-level tape to determine if the trade hit at the BID (sold) or ASK (bought). We don't have tape access on Yahoo, so this is a directional GUESS. Useful for screening, not for conviction.
Snapshot cadence
The ingest worker runs every 15 minutes during US market hours (13:30-20:00 UTC, Mon-Fri). Between snapshots, no new data. The freshness indicator on every chart shows the actual snapshot timestamp.
What we don't have (yet)
- Real-time tape (would need paid Polygon/Tradier feed)
- Bid/ask side detection ("hit ask" vs "hit bid")
- Dark pool prints
- Insider/13F data (separate roadmap)
- Historical backtest of GEX-based strategies (requires longer history; we're accumulating)
Want to verify?
Pick any ticker on /dashboard, then cross-check our spot/IV/OI numbers against Yahoo Finance directly (same source). If numbers differ by more than freshness lag, it's a bug - report at the support email.