Open methodology

Every formula, every assumption, every data source. No black boxes. If you find an error, open an issue.

Data sources

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:

Direction heuristic (caveat: NOT confirmed flow):

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)

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.