TRACE is a strike × time heatmap of dealer gamma notional — instead of one bar per
strike (like GEX), it sweeps a range of hypothetical
"days-to-expiry" values and colors the whole grid by how much gamma exposure would be sitting at each
strike/day combination. It's a positioning map, not a single-moment snapshot.
Experimental — OA-tier mechanics live-tested. The OA tier's subscription mechanics (contract
resolution, per-expiry strike-window sizing, budget/exclusion diagnostics) have been run live against real IB
data (SPX, 2026-09-14) through several rounds of fixes. See Limitations.
Expert tool. Until the Expert edition is finalised, it is available on the Free Trial, Premium,
WhiteLabel and Expert editions (and in Developer mode); Freeware and Regular do not have it. When Expert ships,
Premium may lose it. The CDN tier below is served by SOAP2's data service and needs Premium or a running free trial.
See the Licensing & Editions guide.
GEX and VEX answer "how much gamma/vanna is sitting at each strike, right now, at today's actual time to
expiry." TRACE asks a different question: "if time passed — 1 day from now,
2 days, 7 days, whatever — and nothing else changed, how much gamma would this same open interest imply, at each strike, given its own
real strike, IV, and open interest (with each contract dropping out when it expires)?" Sweeping that across a range of days from now and stacking the
results strike-by-strike produces a 2-D surface (strike on one axis, days from now on the other) colored by
gamma notional, rather than a single bar chart.
The reason this is useful: gamma at a strike isn't constant — it grows sharply as an option approaches
expiry and sits near the money (that's why 0DTE gamma effects are so much larger than the same open interest a
month out). A single GEX bar chart only shows you today's snapshot of that. TRACE's heatmap shows you how the
same positioning would express itself as expiry approaches, which is the same idea market practitioners mean
when they talk about gamma "building" into an expiration — you can see the shape of that build-up across the
strike axis before it happens, assuming positioning doesn't change between now and then.
Each cell in the heatmap isn't just one contract's isolated gamma — it's smoothed across nearby strikes (a
small Gaussian spread around each real contract's own strike), so the surface reads as a continuous
positioning field rather than a scatter of spikes at whatever strikes happen to have open interest. This
mirrors how the underlying concept is usually described qualitatively (a "wall" of gamma spanning a strike
neighbourhood, not one exact strike) and is a deliberate modeling choice, not just cosmetic smoothing.
Same caveats as GEX/VEX apply at the conceptual level: this assumes dealers are positioned the way open
interest and the standard convention suggest (see
GEX/VEX's Attractor vs. repellor section for
the underlying logic) — TRACE is a different lens on the same kind of inferred, not observed, positioning.
Reading the three panels
TRACE draws three heatmaps side by side:
Calls and Puts — unsigned gamma magnitude for that side only, sharing
one color scale so the two can be compared directly against each other.
Combined (Net) — calls minus puts, using the same sign convention as GEX
(positive/call-heavy vs. negative/put-heavy), on its own zero-centered, diverging color scale. This is the
panel that answers "where does the net positioning flip sign" and is the one saved when you export a chart
image.
Reading the Net panel over time
Red is call-side gamma (dealer hedging tends to damp or pin moves), blue is put-side gamma (hedging tends to amplify them), pale is near zero.
Start with the colour at and around the black spot line, then follow it to the right, day by day:
Blue rises toward or over spot while red thins or retreats: the zone where moves can accelerate is getting closer to price and the damping support is fading; a modest move into it is more likely to feed itself. The flip level (where red meets blue) is moving toward spot.
Red advances toward spot while blue retreats: pinning strengthens and moves tend to be absorbed.
A column goes blank or a block disappears: an expiry has passed. The picture changes because that open interest is gone, not because the market moved.
These are facts about the positioning map, not forecasts: later columns assume today's open interest, spot and implied vol stay where they are.
In every panel: the Y-axis is strike, the X-axis is time: in both versions it is days from now (0 = now, then +1d, +2d, ...
with each contract dropping out when it expires), and a black marker line shows the current underlying price. Color intensity is gamma heat in TRACE's
own units (gamma × spot² × 100 × open interest, smoothed across neighbouring strikes, ÷ 109).
They are not dollars and not comparable with GEX numbers (no 1% move factor, and each contract also counts at
the strikes around it), so read cells relative to each other. The scale is shared so the brightest cells across all
three panels are comparable.
Opening TRACE
Inside an OA window on an eligible symbol (see Availability), click the
TRACE toolstrip button (next to the Hedging Flow button). No expiry tab needs to be
selected, or even loaded — unlike GEX/VEX, TRACE is not tied to the currently-displayed grid tab at all.
TRACE has its own strike-window and expiry-count controls (see Controls below)
— it no longer shares GEX/VEX's strike-range setting. Only the strike spacing (interval) is still
read from GEX/VEX Filters.
Two tiers: OA vs. CDN snapshot
TRACE exists in two forms: a live multi-expiry sweep inside the OA, and a downloaded CBOE snapshot covering
every expiry in the chain at once, but only for the current moment.
OA tier — inside an open OA, using SOAP2's live IB feed. Genuinely multi-expiry: it
enumerates every expiry within Max DTE (up to Max expiries) and subscribes its own off-grid strikes for
each of them, independent of which grid tab (if any) happens to be open. Each expiry gets its own strike
window, sized off that expiry's own expected price move (see Controls) — this is
no longer the same strike set GEX/VEX subscribes.
CDN tier — a standalone window ("TRACE (Gamma Heatmap)" on the Data Chart menu,
Premium edition and the free trial) for SPX, NDX or RUT. SOAP2 downloads one delayed snapshot of CBOE's full options chain on your
PC and sweeps every real expiry in it at once, using a flat Min/Max DTE/Slices/Range% set of controls (unaffected by the OA tier's own
controls below) — closer to how the original standalone script this was ported from was normally used. The heavy calculation is done
by the SOAP2 data service, not on your PC: SOAP2 sends it the chain you downloaded, gets the three heatmaps back and draws them
(see How the CDN tier gets its numbers).
Controls
The two tiers have separate, independent controls — a change on one has no effect on the other.
OA tier — Trace Filters (ddTrace dropdown, next to the TRACE button)
Max DTE — maximum trading days to expiry (weekends/holidays excluded), in
whole days (1/2/3/5 presets). Expiries beyond this are excluded from the heatmap entirely, not just the
sweep axis — this is what selects which of the symbol's expiries are included at all.
Max expiries — a direct cap on how many included expiries (nearest first) TRACE ever
subscribes, independent of Max DTE. Use this to cut off-grid market-data line usage further without
narrowing the time window.
Strike range (±σ) — each included expiry gets its own strike window, ± this many
standard deviations of that expiry's own expected price move (ATM IV × spot × √T) — capped at 2σ.
This naturally narrows for near-dated expiries and widens for longer-dated ones, unlike a flat % of spot,
and directly shrinks how many off-grid lines get requested. The IV driving this sizing is TRACE's own
observed near-ATM IV (derived from whatever it has already subscribed near spot), not anything read off a
loaded grid tab — it self-corrects to real data within a couple of 5-second ticks after TRACE is opened.
Saved per symbol, so it's remembered next time you open TRACE on the same symbol.
Smoothing / Heat scale — the Gaussian kernel width (strike points) and the color-scale
divisor; both default to Auto, which derives a sensible value from spot/strike spacing and the 85th
percentile of the surface respectively.
Stop Data / Start Data — releases every off-grid market-data subscription (keeping the
last-drawn heatmap on screen) or resumes them. Independent of leaving/re-entering TRACE mode, which always
tears everything down and restarts fresh.
The X-axis ("days from now") is not user-adjustable: it starts at 0 (now) and steps forward one calendar
day at a time, up to the furthest included expiry. It is a forward projection: at each column every contract
has its own days to expiry minus the days elapsed left, and a contract drops out of the surface once its expiry
has passed. Spot and implied volatility are held at today's values, and open interest is assumed not to change.
The dividend yield is not used by TRACE: over a few days it changes the gamma by less than the noise in
open interest and implied volatility, and leaving it out keeps the surface the same whichever data source feeds it.
CDN tier — its own toolstrip (single-snapshot form)
Symbol — SPX, NDX or RUT. Changing it clears the charts; click Recompute (Fetch) to load that
symbol's CBOE snapshot.
Recompute (Fetch) — downloads a fresh CBOE snapshot and recomputes. Changing any other control recomputes from the
snapshot already downloaded (kept for a few minutes); after that, the next change downloads a new one.
Range ±% — a flat % of spot, the same window for every expiry in the snapshot.
Max DTE / Slices — how many days from now are swept (columns 0, 1, 2... up to Max DTE, at most Slices of them). A contract's column goes blank once its expiry has passed.
Smoothing / Heat scale — the Gaussian kernel width and the colour-scale divisor (in TRACE's own units, not GEX dollars per 1% move); both default to Auto (a width
scaled to the spot and the strike spacing, and the 85th percentile of the surface).
Div % — dividend yield, defaults to 0%; the OA tier already has each strike's own live
dividend yield from the chain, so it has no equivalent control.
The status line shows the spot used, the number of contracts in range and when the CBOE snapshot was generated ("as of … UTC"). Outside
market hours CBOE regenerates the file overnight, so the line also says when the trades inside it are from (for example "trades to 10-13 20:00").
The spot is your watchlist's live price for the symbol when it has one, otherwise CBOE's own delayed quote.
How the CDN tier gets its numbers
SOAP2 downloads the CBOE chain itself, from your own connection, and sends it (compressed) to the SOAP2 data service together with your
settings. The service computes the three heatmaps and returns them; it does not download anything from CBOE, and it keeps neither the chain
nor your results. Drawing and saving happen on your PC.
It needs an internet connection and a Premium licence or a running free trial. If the licence, the trial or the connection is the
problem, the status line says so instead of drawing.
Each successful run is saved on your PC as the CDN tier's "last known state" (kept apart from the OA tier's, because the two are
different data and must not be compared with each other).
Save (both tiers) — exports the Combined panel as an image, same as the other chart tabs.
Availability
The OA tier shares GEX/VEX's own eligibility (currently SPX/RUT) — both read the same kind of
dealer-positioning data, even though TRACE's strike subscriptions are now independent of GEX/VEX's own.
The CDN tier works for SPX, NDX and RUT (Premium edition and the free trial). The smoothing and default DTE/range were tuned on SPX,
so check an NDX or RUT chart before relying on its default look.
Limitations
CDN tier remains untested live. The OA tier's subscription mechanics have been
live-tested against real IB data (SPX, 2026-09-14) and fixed through several rounds of debugging; the
CDN tier has not been exercised the same way, and its move to the SOAP2 data service (the calculation is checked against SOAP2's own
reference code in automated tests) has not been tried against real traffic yet.
The CDN tier counts far-dated open interest in every near column — a contract contributes to every swept day up to its
own expiry. The OA tier instead leaves out expiries beyond Max DTE entirely. Another reason the two heatmaps are not the same picture.
Smoothing width is an approximation, not a fitted parameter. How far each contract's
gamma is spread across neighbouring strikes is derived from the strike spacing and a fixed percentage of the
underlying price — a reasonable default carried over (and generalized) from the original script, not a value
calibrated against real dealer behavior.
The two tiers use slightly different day-count conventions (OA: calendar/360, matching
the rest of SOAP2's own Greeks; CDN: calendar/365, matching the CBOE-snapshot GEX/VEX form) — close enough
(~1.4% apart) that gamma differs by well under 1% between them, but the two are not bit-for-bit identical if
you compare the same expiry across both tiers.
The OA tier's expected-move IV is a single blended estimate, not per-strike. Every
expiry's strike window is sized off one observed near-ATM IV value (or the Auto fallback before any data has
streamed in), not that expiry's own individual term-structure point — a reasonable approximation for sizing
a window, but not a precise per-expiry IV read.
CDN tier inherits the CBOE delayed-quotes feed's field staleness — Open Interest on that
feed is confirmed static for the whole trading day, so a CDN-tier heatmap reflects that day's opening
positioning, not intraday changes to it. The OA tier reads Open Interest live from IB and isn't affected by
this.
A more advanced "ridge path" overlay (tracing the peak of the gamma surface as a line across the day
axis) exists in the original script this was ported from but was deliberately left out of this first version
— it was the least-tested, most complex part of the source, and may be added later.
As with GEX/VEX, this is a model estimate inferred from open interest and standard positioning
assumptions, not an observation of actual dealer books.