Greeks / OI / Volume Dashboard

0DTE and weekly options β€” per-strike, cumulative, and net views across GEX, DEX, Vanna, Charm, Vega, Theta, Volume and Open Interest.

Spot β€” β€” ⚑ Stream offline
Symbol
Expiry
Basis
View
Ask Claude β€”
Ask about the currently-viewed symbol's live Greeks/GEX/candle data. A server-side proxy keeps the API key off this page entirely (see chat_server.py) β€” not trading advice.

No messages yet β€” ask about the current GEX flip, walls, today's regime, or anything else on screen.

Dealer hedge $ vs. spot β€”
Gamma Ξ”D$ Vanna Ξ”D$ Charm Ξ”D$ Total Ξ”D$ (sticky-strike) Total Ξ”D$ (SABR-backbone) Gamma/Vanna/Charm dealer $-delta re-evaluated across a range of hypothetical spot prices β€” shows how hedging pressure would shift if price moved, not just where it sits today. Faint dashed line = Total projected forward in time (spot unchanged), previewing charm decay. Second Total line reprices every strike's IV off the fitted SABR smile instead of holding it at today's quote (sticky-strike) -- the shaded band between the two is how much that modeling choice alone moves the answer. Analysis above translates the curve into plain English, including how this chart's zero-cross compares to the GEX Flip and which strikes are driving the current number.
IV smile β€” SABR fit β€”
Market IV (dots) / SABR fit (line) Lognormal SABR (Ξ²=1) calibrated to OI-weighted per-strike IV via least squares.
Volatility risk premium β€”
SABR-fit ATM implied vol vs. 20-session close-to-close realized vol, both annualized. High VRP in a low-realized-vol, range-bound market can be a false "sell vol" signal β€” check the price trend before treating it as a panic/mean-reversion setup. Needs py fetch_candles.py --symbols SYM --daily to have been run at least once.
Expected move & key levels β€”
1Οƒ expected move from SABR ATM IV (spot Γ— IV Γ— √T). Floor/Ceiling are the existing Put Wall/Call Wall from Market Read; Reversal is the existing GEX flip. The 0DTE/Swing notes below describe what this positioning typically implies β€” not a trade signal.
Similar days β€”
Today's gap/range/net-move/trendiness so far, matched against every completed day in <SYMBOL>_daily.json by closeness on those same four numbers (z-scored, Euclidean distance) β€” a historical base rate of "what a day shaped like this tends to do next," not a signal or a prediction. Today's own numbers are still forming until the close, so they'll drift as the session continues.
Dealer-flow shape β€”
Similar Days' layer 2: instead of day-level OHLC stats, this compares how Net GEX (0DTE) actually evolved through today's session so far against every archived historical day's 5-minute snapshots (Pearson correlation -- shape, not magnitude). Needs poll_intraday.py to have been running on both today and the historical day being compared; archive builds up automatically day over day.
AI-assisted market maker positioning β€”
0DTE strike migration and regime, polled every 60s (poll_intraday.py) and displayed ~5 minutes apart. Direction fires a fresh BUY/SELL (with entry price) the first reading a price streak reaches 3 consecutive same-direction prints WHILE Regime is EXACERBATED (dealers actively reinforcing that direction) -- not on DAMPED (dealers dampening a move is weak evidence it continues); LONG/SHORT marks every reading after that still riding the same call. Read turns the same signals into one sentence -- gamma concentration/support/resistance migration, hedging flow, and the streak itself ("Nth consecutive up-tick/down print"), with an Exhaustion caution when a streak running against the standing position has stretched past 4 prints and is decelerating. Peak Gamma Strike = biggest total call+put gamma concentration. Flip Strike = cumulative-GEX zero crossing -- unlike Pinning, moves continuously through the session; both this and Peak Gamma Strike migration are informational badges only now, not what drives Direction (a single-reading Peak-Gamma+Flip alignment used to drive it, retired after whipsawing on Peak Gamma Strike noise in real trading -- see git history/changelog if curious). Pinning Strike = biggest total open interest (where dealers are most hedged/reluctant to let price drift; barely moves intraday for 0DTE). Downside Support/Upside Resistance = the existing Put Wall/Call Wall. Regime compares net GEX to today's own peak: DAMPED (solidly positive, dealers dampen moves) / EXACERBATED (solidly negative, dealers amplify moves) / NEUTRAL (near the flip). Next-move read projects net GEX under the next 1% spot move (Speed), next 1 vol-point of IV (Zomma), and today's remaining time decay (Color) -- an anticipatory read, not a description of the current state. GAMMA MIGRATING FAST/APPROACHING FLIP fire on a build-up across the last several *polls* (not display rows), so they can flag something forming before it's fully arrived; PIN DISPLACED fires when spot breaks away from a pinning strike it was just near. This is this dashboard's own from-scratch reading of these concepts (not a reproduction of any specific external tool's formulas) -- read it the same way as MM Hedge Zones/Dealer Signals below: a confluence read, not a signal, not trading advice. Needs poll_intraday.py running to build the snapshot history.
Gamma acceleration β€” GEX by days to expiration β€”
Net call-heavy Net put-heavy Net GEX (calls βˆ’ puts) summed across every strike in each expiration, ordered by days to expiration β€” shows where dealer gamma-hedging pressure concentrates as expiries approach. Basis toggle (top of page) applies here too.
Skew β€” put IV minus call IV β€”
Positive = puts rich (fear / downside demand) Negative = calls rich (upside chase / supply) ATM put IV minus ATM call IV (the strike closest to spot in each expiration), ordered by days to expiration β€” the same term-structure read a 25-delta risk-reversal is going for, just at-the-money since that's the strike this dashboard already prices everywhere else rather than hunting a specific delta. Real per-contract IV from the option chain, not modeled -- expirations Schwab quotes without a usable IV on either side are skipped rather than shown as a false zero.
Calls / net positive Puts / net negative

Per strike

Call vs. put exposure at each strike

Cumulative

Running sum of net exposure, ascending by strike

Net

Call minus put, per strike

Live via Schwab: fetch_data.py (chains), fetch_candles.py (candles), poll_intraday.py (dealer flow), stream_server.py (live spot/candles). generateExpiry is only a placeholder for symbols you haven't fetched yet.