GEX data status, freshness and polling
The provenance row at the top of the GEX workspace carries three separate chips: which option-chain source is in use and how far behind it publishes, whether the US options session is open, and how old the chain actually on screen is. Freshness is measured from the backend's chain timestamp, never from the moment the request came back.
Senzoukria · Documentation · Updated September 2026
Where to find it
- Where
- GEX workspace → provenance row, shown above every GEX page
- Stale threshold
- 20 minutes of chain age (STALE_AFTER_MIN)
- Age refresh
- Chip ages are re-read every 10 seconds
- Refresh cadence
- Free tier: full chain every 15 min, spot tick every 5 s. OPRA: backend loop every 90 s. Databento: full refresh every 120 s, no spot tick.
- Requirement
- GEX needs an options data source of your own; market data is billed by the provider, not by Senzoukria.
What it does
Gamma exposure is computed, not published, and it is only as good as the option chain it was computed from. The provenance row separates four things that an earlier build blurred into a single "LIVE" badge: the source and its publication delay, the state of the US options session, the age of the chain in memory, and the state of the last request.
The word LIVE is only shown when the chain carries a usable timestamp, its age is inside the stale threshold, and the selected source is a real-time one. A source with a known publication delay reports DELAYED instead, with the delay written out, even when everything else is healthy.
Source labels and known delay
| Source | Chip label | Assumed delay |
|---|---|---|
| Alpaca, OPRA entitlement on | ALPACA OPRA · REAL-TIME | None declared |
| Alpaca, free tier | ALPACA · 15 MIN DELAY | 15 minutes |
| Databento | DATABENTO OPRA · ≈15 MIN | 15 minutes |
| Tradier | TRADIER · REAL-TIME | None declared |
| Market Data | MARKET DATA · CACHED · DELAY UNKNOWN | Unknown — the connector requests cached data |
The data chip, state by state
The third chip is the only one that measures what is on screen. It is derived from the chain timestamp published by the backend, so a request served from the Rust cache does not reset the clock.
| Chip | When it appears | What it tells you |
|---|---|---|
| LOADING… | No chain received yet, a request is in flight | Nothing on the page is populated yet |
| NO DATA | No chain received, last request failed or never ran | The error text, when there is one, is in the tooltip |
| PROVIDER ERROR | A chain is displayed but the last request failed | What you are reading came from before the failure |
| STALE · n min | Chain age above 20 minutes | Nothing on the page has been refreshed since |
| AGE UNKNOWN | The source publishes no chain timestamp | Freshness cannot be measured, so it is not claimed |
| LIVE · chain n min | Timestamped, inside the threshold, real-time source | The only state that says live |
| DELAYED ≈n MIN · chain n min | Timestamped and fresh, but the source publishes late | Both numbers are shown because they mean different things |
How to use it
Read the row left to right before reading any level. A DELAYED source with a young chain is usable for structure and useless for the last two minutes of a move. A STALE chip means the walls on screen belong to an earlier state of the book, and the refresh action in the assumptions panel is the fix.
The 20-minute threshold is chosen against the refresh cadence: at 15 minutes for the free tier and 90 to 120 seconds for the paid feeds, it tolerates one missed cycle and refuses to tolerate two.
Limits and pitfalls
The stale flag carried by the snapshot payload itself is never raised by any code path, so it is deliberately ignored; freshness is measured here instead. The five-second spot tick on the free tier refreshes the underlying price only — it does not reload the option chain, which is why the chain clock and the spot clock are kept apart.
Open interest is published once a day after the close. Intraday, every GEX figure moves with spot and with the passage of time, not with positions taken today, and a perfectly fresh chip does not change that.
Related pages
- GEX overview: regime and quick stats
- GEX key levels
- What is GEX (gamma exposure)
- Option chain
- GEX workspace
This page in other languages
Frequently asked questions
- Why does my chip say DELAYED when auto-refresh is on?
- Auto-refresh describes what the application does; the delay describes what the provider publishes. A free-tier Alpaca chain is roughly 15 minutes behind the market however often it is polled, so the chip reports both the publication delay and the measured chain age.
- What does AGE UNKNOWN mean — is it broken?
- No. It means the source returned a chain without a usable timestamp, so the age cannot be computed. Rather than invent a freshness number, the workspace states that it does not know one, and the figures may be older than they look.
- How often is the option chain actually reloaded?
- Every 15 minutes on the free tier, every 90 seconds when the backend OPRA loop is running, and every 120 seconds on Databento, where the Rust cache means roughly one call in two reaches the provider and the credits are spared.