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 hedging pressure by strike β
Intraday dealer flow
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-heavyNet put-heavyNet 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 positivePuts / 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
Price action β
1.0x
1.0x
CallsPutsDashed lines = Call Wall / Put Wall / Gamma Flip / expected-move band for the metric selected above (All falls back to GEX for the side profile's bars). Faint background dashes = MM Hedge Wall strikes (hover for detail). Basis toggle (top of page) controls whether Greeks are OI- or volume-scaled. β²/βΌ = candle-range-spike BUY/SELL markers. B/A, VolΞ, FVG and Premium buttons above toggle the Bid/Ask spread-pressure marker, per-candle volume delta bubbles, Fair Value Gap bands, and options premium flow bubbles (all off by default) (see Dealer Desk below). Premium bubbles plot one dot per strike per snapshot at that strike's own price level over time (not one per candle), and need py poll_intraday.py running to build the snapshot history they're computed from. Always shows all three expiries (0DTE/Weekly/Monthly) regardless of the Expiry tab above, colored by which one -- orange 0DTE, cyan Weekly, magenta Monthly (hover for the exact expiry, strike, and call/put split) -- rather than by calls/puts. Priced off the contract's own recent traded price when that strike's candle data happens to be cached (its own Option contract price action chart has been viewed), bid/ask mid otherwise. A green/red ring = buy-/sell-leaning (traded price sitting toward the ask vs. the bid, only shown where there's an actual traded price to classify against the mid). The All/$50K+/$100K+/$500K+/$1M+ buttons next to Premium filter out smaller flow so only unusually large premium shows (size compared within its own expiry, not against the other two). PDH/PDL = yesterday's high/low (last completed session), always on. MA = 9/20/50-period simple moving averages (colored lines). BB = 20-period Bollinger Bands (dashed middle line, shaded band between +/-2 standard deviations). Both off by default; either needs at least that many candles loaded to draw anything. Candles/Heikin-Ashi/Line/Area (top row) switch the chart type -- Line/Area color by the session's overall direction rather than per-bar. Draw toolbar: Cursor (default pan/zoom/crosshair) / Trend (click two points) / H-Line (click once) -- double-click a drawn line to remove it, π Clear Lines wipes all of them for this symbol; saved per-symbol in this browser. Compare dropdown overlays a second watchlist symbol's price as a dashed line, its own min/max rescaled into this same plot -- a shape comparison, not a shared price axis. β Split opens a second, fully independent chart beside this one for another watchlist symbol -- or the same symbol at a different timeframe, using its own timeframe dropdown (its own candles, GEX profile, and walls). Shares this chart's Expiry/Basis/candle-style settings rather than its own full control row, and refreshes on the normal refresh cycle rather than tick-by-tick.Liquidity button = NASDAQ order-book heatmap (green = resting bid size/support, red = resting ask size/resistance; brighter = larger). Single-exchange depth, not the full consolidated book. Off by default. Shows the whole session immediately (needs stream_server.py running to persist the trail), plus live updates on top for anything since your last page load. The trailing edge (right side, full-resolution rows instead of blurred bands) is the live DOM right now, not just history. β markers = a possible iceberg -- a level that's refilled to near its prior size several times in a row (heuristic, not certain; see the alert log below for detail).Zones button = possible buy (green) / sell (red) zones, off by default -- a strike only shades in when 2+ of these agree: dealer hedge flow, GEX wall, 1Ο expected-move edge, prior-day high/low, and live order-book liquidity (needs Liquidity's data to count that last one). Darker = more factors agree. Hover a band for exactly which ones fired. Confluence read, not a signal -- same heuristic caveat as the Dealer Desk below.Ξ10m button = a small marker on each strike's call/put bar in the side profile showing where that same bar's tip was ~10 minutes ago, so a strike actively building exposure reads differently from one that's simply large and static. Off by default. Needs py poll_intraday.py running (same intraday history as the background shading); no-ops until at least two snapshots exist today.
Split β
Dealer desk β
Ported from an earlier internal dashboard's dealer-positioning tools β a heuristic, not trading advice.
Dealer Analysis
MM Hedge Zones
Dealer Signals
Bid/Ask Spreads
Greeks Consistency
Put-call parity check (Gamma/Vega should match call vs. put at the same strike; delta_put = delta_call β e^-qT) plus self-computed vs. Schwab's own theta. Flags data quality, not a market condition -- a violation means a stale/thin quote at that strike, not a trading signal.
Day Read
Trend-vs-range read for today, plus a preview for tomorrow using the Weekly chain (weekly OI carries into the next session, unlike 0DTE) β a heuristic, not trading advice.
Live Trade Flow β
Every option print at the strikes below, classified buy (green, traded at/near the ask) vs. sell (red, at/near the bid) the instant it happens β not inferred from open interest like the rest of this dashboard. Only counts trades from the moment you opened this view forward; there's no earlier history to replay. Needs the market open and greeks-stream.service running.
WINDOW
STRIKES
VIX β
Price-only companion view of the cash index ($VIX) β /VX futures have no quote/price-history access on this account. VIX options chains work fine though: add VIX as its own symbol tab above for full GEX/DEX/Vanna/Charm/OI. Same timeframe and candle-style controls as the chart above.
Option contract price action β
CallsPutsLeft axis: option premium (candles). Right: Vanna and Charm for this specific strike (call right, put left of the zero line) β not a by-strike profile, since you're already watching one contract. Each side picks its own strike. β markers = alerts on this specific contract's own price: new session high/low, a Β±25% move from today's opening premium, a volume spike vs. this contract's own session median bar, or delta crossing 0.5 (OTM β ATM/ITM). Tracked separately per strike -- switching strikes starts a fresh baseline. Same alert log/toast as the rest of the page.
Call
Put
Option chain β
Strike badges (hover for the value):CWCall WallPWPut WallFGamma FlipZZero DEXPPin (largest total GEX)C1–C3top 3 |Charm|V1–V3top 3 |Vanna|
scalpnet's Options Flow frontend, fed by this dashboard's own data (no separate Schwab connection) -- has its own ticker switcher, DTE filter, regime gauge, and flow charts inside. Not tied to the Symbol selector above. Live-bar updates refresh every ~30s rather than sub-second (its WebSocket live stream isn't wired up here).
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.