TRACE draws a heatmap of estimated dealer hedging pressure across strikes and time. This guide shows how to turn that picture into a view: where positioning is likely to build, which levels may act as pins or as accelerators as expiry approaches, and what changed since the previous run. It needs no mathematics and no knowledge of the Greeks. It is the companion of Reading the Hedging Picture (GEX / VEX): read that one first if you have not, because TRACE reuses its ideas.
Like the GEX guide, it has a section for an AI assistant answering through the SOAP2 bridge
(§8), using the real field names of the get_trace call.
Read this first. TRACE rests on the same assumption as GEX: that dealers are positioned the way open interest and the standard convention suggest, and hedge accordingly. SOAP2 cannot see their books. TRACE adds a second assumption of its own: it answers "what would the picture look like closer to expiry if positions stayed as they are". Positions do change. Treat what you read as zones where a hedging effect is plausible, not barriers and not predictions. Nothing here is a trade signal.
GEX answers: "how strongly would dealers lean with or against a move, right now, strike by strike?" TRACE answers: "how would that same positioning express itself as the days run down to expiry?"
The reason this matters: the hedging effect of an option grows sharply as expiry approaches, and it is strongest at strikes near the market. A strike that looks modest today can dominate on expiry day. TRACE shows that build-up before it happens, as one picture:
Two features of the picture to remember:
Names in code are those the AI bridge returns (get_trace, block trace,
field digest).
| Output | Plain meaning | Trader's question it answers |
|---|---|---|
Sign at spot (sign_at_spot) | Whether call-side (positive) or put-side (negative) pressure dominates at the strike nearest the current price, for that day. | Which way does the local regime lean? |
Net near spot (net_near_spot_bn) | Total net pressure within 1% of the price on either side. Sign and size. | How strong is the local lean? |
Share near spot (share_of_abs_heat_near_spot) | What share of all the pressure (ignoring sign) lies within 1% of the price. A high share means the action is close; a low share means it is spread out or far away. | Is the pressure concentrated around me, or elsewhere? |
Zero-cross below / above (zero_cross_below_spot, zero_cross_above_spot) | The nearest strikes on each side of the price where the net sign changes. | How wide is the corridor of this regime around me? |
Flip level (flip_level, flip_from_spot, flip_from_spot_em1d) | The single sign change nearest the price, on either side (ties go below), with its distance in points and in one-day expected moves. One number per day to track. | Where is the regime boundary, and is it moving toward or away from me as the days pass? |
Expected move (atm_iv, expected_move_1d, and the _em1d distances) | One day of typical movement in points (price × ATM implied vol ÷ 16, the same convention as the expected move elsewhere in SOAP2). Every node and the flip level also carry their distance in these units (from_spot_em1d): 0.5 is close, 1 is about a day away, 3 or more is far. Present only when the run knew its ATM IV. A yardstick, not a probability. | Is that node near or far, in terms of how far the market usually moves? |
Positive / negative nodes (positive_nodes, negative_nodes) | Up to three local peaks of each sign, each at least a quarter of the day's largest. Each has a strike, a size (bn) and the distance from price in points and percent. | Where are the pin candidates (positive) and acceleration zones (negative)? |
Peak positive / peak negative (peak_positive, peak_negative) | The single strongest node of each sign that day. | What is the dominant pin or accelerator? |
Snapshots (snapshots, day) | The digest describes the first day ("now"), the last, and up to two in between. | How does the picture evolve? |
Migration (migration) | How the peaks move from the first to the last snapshot: strike shift and size change, and the change in net pressure near the price. | Does the pin strengthen or weaken, and does it move toward or away from price? |
Change since previous (change, first_day) | For the first day: peak strike shifts, size changes, net-near-spot change, sign before and after, shift of the zero-crossings, plus changes_in_evidence. | What moved since the last run, and is the comparison fair? |
Index points, not futures points. Levels are for the cash index. If you trade futures, add the current futures-to-cash difference.
There are two different datasets, and they must never be mixed or compared with each other:
| Live IB TRACE (in an OA window) | CDN TRACE (Data Chart menu) | |
|---|---|---|
| Data | Your IB feed, live open interest | CBOE's delayed whole-chain snapshot, previous-session open interest, static for the day |
| Window per expiry | ± a number of standard deviations of that expiry's own expected move | A flat percentage of price for every expiry |
| Which expiries | Only those within Max DTE (and Max expiries) | Every expiry in the chain; a contract counts in every swept day up to its own expiry |
| Symbols | SPX, RUT | SPX, RUT, NDX |
Judge CDN freshness by data_as_of (the newest trade inside the file), not by the file stamp. For the
live version, the result is as current as the streaming that built it at computed_at.
sign_at_spot for the first day and net_near_spot_bn.List the positive and negative nodes on the first day with their distance from price. As in the GEX guide, the role of each depends on the regime: a positive node is a pin or magnet candidate in a brake regime; a negative node is a zone where moves can speed up. A single dominant node matters more than a flat cluster.
This is what only TRACE shows. Compare the first and last snapshots (migration):
| You see | Possible reading |
|---|---|
| Peak positive node grows from the first to the last day, staying at about the same strike | A pin that intensifies into expiry: the level matters more the closer you get. |
Peak node grows and its strike moves toward price (peak_positive_strike_shift toward spot) | The pin is converging on the market. Expect more pull. |
| Peak node moves away from price over the days | The pressure ends up somewhere else: today's nearby node is a today-only phenomenon. |
Net pressure near price (net_near_spot_bn_change) grows more positive | The brake builds around the market. Expect a calmer approach to expiry, if positions hold. |
| Net pressure near price turns negative toward the last day | An accelerator builds near the market as expiry nears. Expect a more fragile approach. |
| Share near spot rises across the days | The action gathers around the price. |
| Little change across the days | No big build-up: today's picture is roughly the picture to expiry. |
Remember that later columns are hypothetical: they assume the same open interest, the same volatilities and the same price. Positions will change, so the further right you look, the more it is a sketch.
Each dataset keeps a Latest and a Previous run. Previous is only kept when it is a distinct earlier run, 30 or more minutes before the latest. The comparison is always between runs of the same dataset; the response never diffs live IB against CDN.
As with GEX, open interest updates once per session. So:
changes_in_evidence says so, and the
difference is only the price or the settings.| You see | Possible reading | Check |
|---|---|---|
peak_positive_strike_shift non-zero | The dominant pin moved. If it is the same expiry set, a roll of the strongest strike, or the price changed enough to re-weight it. | Same session? Same settings? |
peak_positive_bn_change up | The pin got stronger (in TRACE units). | Closer to expiry raises it mechanically; look at elapsed_s. |
peak_negative_* changes | The same for the accelerator zone. | Same. |
net_near_spot_bn_change positive | More brake near the price. | Did the price move toward a positive node? |
sign_at_spot_before differs from sign_at_spot_now | The local regime flipped. This is also added to changes_in_evidence. | Did the price just cross a zero-crossing? Then it is the corridor edge being crossed. |
zero_cross_below_shift / zero_cross_above_shift | The corridor edges moved. A shift of the lower edge upward, with the price flat, means the cushion below is shrinking. | Compare with spot_change. |
Rule of thumb: decompose any change into price moved (spot_change),
time and volatility (same session) and positions changed (new session).
GEX is the sharp picture of today; TRACE is the soft picture of how it develops. Use GEX for the regime and the Flip, TRACE for the build-up and for which levels will matter later.
| GEX says | TRACE says | Reading |
|---|---|---|
| Brake regime, comfortable cushion | Positive node near price grows over the days | Strong case for a pinned approach to expiry; fade excursions toward the node, with the usual caveats. |
| Brake regime, comfortable cushion | Negative node builds close below price toward expiry | The cushion is real today but the picture deteriorates into expiry. Be careful with long-dated assumptions of calm. |
| Price near the Flip | Corridor tight (zero-crossings close on both sides) | The regime is fragile at every horizon. Wait for a decisive move, or trade the edge with explicit invalidation. |
| Accelerator regime | Positive node a short distance beyond price, growing | A possible stopping point for a move, getting stronger with time. A target to test, not to assume. |
| GEX and TRACE disagree (different sign at price) | Check the datasets: GEX from IB versus TRACE from CBOE, or different expiries? A disagreement is a reason to look at the inputs before choosing a view. |
The question is which level will matter by Friday. Compare the first column with the last: a node that grows and stays near price is your pin candidate; one that fades is today-only. Revisit each day, because open interest rolls overnight.
Almost all the pressure sits in the first columns and close to price. Read share_of_abs_heat_near_spot
and the first-day nodes. TRACE adds little beyond GEX here; use it to check whether nearby later-dated pressure
backs up or fights the same-day levels.
If the two zero-crossings bracket price closely and the net near price is small, you are in a narrow band between regimes. Expect behaviour to change quickly on a break of either edge, and treat the edges as triggers.
A large part of the exposure disappears at once. The next session's TRACE can look very different
(same_session false), and a node that mattered yesterday may be gone. Do not read that as a change of
mind by the market; it is expiry removing the contracts.
Made-up numbers to show the method. Not a forecast, not a real session.
CDN TRACE, SPX, price 5,000, run at 15:30 UTC; Previous run 60 minutes earlier, same CBOE snapshot.
| Day 0 (now) | Last day (+4) | |
|---|---|---|
| Sign at spot | positive | positive |
| Net near spot | +6.0 | +11.5 |
| Peak positive node | 5,050, +9.0 (+50 pts, +1.0%) | 5,040, +14.0 |
| Peak negative node | 4,900, −5.0 | 4,900, −3.5 |
| Zero-cross below / above | 4,960 / none | 4,950 / none |
data_as_of. The two runs share a CBOE snapshot, so any difference is price or settings, not new positioning.The call is get_trace with symbol (SPX | RUT | NDX, default SPX),
source (auto | ib | cdn, default auto) and
refresh (default true; for the CDN dataset it downloads a fresh CBOE snapshot and recomputes).
Premium (or trial) and the AI bridge are required; a denied call answers NOT_LICENSED.
TRACE_SOURCE notice and source. In
auto, the live IB result is chosen only if one is stored from this session, is under two hours old and
IB is connected; otherwise CDN. The reason is in the notice.data_as_of and its age, cboe_timestamp,
spot_source. IB: computed_at and age. Report fetch problems (TRACE_FETCH_FAILED,
TRACE_REFRESH_BUSY) and say that the stored state is not fresh.digest.snapshots:
sign_at_spot, net_near_spot_bn, share_of_abs_heat_near_spot, the two
zero-crossings.flip_level and its distance (flip_from_spot, flip_from_spot_em1d) on each snapshot, and whether it moves toward or away from the price over the days.positive_nodes and negative_nodes with from_spot and, when present, from_spot_em1d (distance in one-day expected moves: say "about 1.8 days of typical movement away", not just points).
Give each node's role in the current regime, not a fixed support/resistance label.digest.migration and the later snapshots. State the horizon
(from_day to to_day) and that later days are hypothetical.elapsed_s, same_session and every
changes_in_evidence item. Decompose into price, time/volatility and (new session only) positioning.bn is in TRACE's own units (not GEX dollars per 1% move). Never quote it
as dollars and never compare it with get_cboe_gex or GEX numbers. Use it relatively: node against
node, day against day within a run.change block is
already within one dataset; do not set up another across datasets.TRACE_NO_PREVIOUS and say so; do not refresh repeatedly to get one.Data: CDN TRACE, SPX, data as of 15:44 UTC (age 2 min), spot 5,000 (watchlist price). Chosen automatically: no live IB TRACE stored.
Local regime: positive at the price; net near price +6.0 (TRACE units); lower sign change at 4,960, none above.
Nodes: positive node around 5,050 (+50 pts); negative node around 4,900 (−100 pts).
Build to the last swept day (+4): the positive node strengthens (+9.0 to +14.0) and moves a little toward price (5,040); net near price rises to +11.5. Assuming positions are unchanged.
Change vs previous (60 min, same session, same CBOE snapshot): no new market data; differences are price only.
Reading (derived): pin strengthening into expiry around 5,040–5,050; trigger 4,960; downside zone 4,900; invalidation: acceptance below 4,960 or the node weakening at the next roll.
Caveats: positions assumed, held fixed over the swept days, delayed data, units not dollars, no recommendation.
data_as_of or computed_at?Go back to the main help page: SOAP2 Help Guide