Data dictionary
Every field in the archive files (177) and every LAB column (120), grouped by the dealer-gamma book it reads; magnitudes are never comparable across books.
VOLUME default
cp x cumulative session volume (cp = +1 call, -1 put). Spotted by: suffix _volcp or _vol in the payload, _vol in LAB.
Payload fields 19
| field | meaning | unit | since |
|---|---|---|---|
ngv_volMinute series | Net cp x volume gamma at spot, 0DTE only. The minute twin of sec.ngv_volcp. | $M per index point | all sessions (backfilled 2026-10-03 from sec.ngv_volcp at each minute's :59 second) |
gpct_volMinute series | The same percentile computed on ngv_vol against the same minute of the prior 20 sessions that carry it. | percentile | all sessions; all null on the first 10 sessions (2019-06-19, 2022-04-14 to 2022-05-02: pool under 10) |
flip_volMinute series | Volume-book zero-gamma flip, 0DTE, raw directional root (+/-2%, then +/-6%): sec.flip_volcp at the end of the minute. The default flip. null when the book is one-sided. | index points | all sessions (backfilled 2026-10-03 from sec.flip_volcp at each minute's :59 second) |
call_wall_vol put_wall_volMinute series | Peak positive / negative volume-book gamma strike within +/-2.5% of spot, 0DTE: sec.cr0_volcp / ps0_volcp at the end of the minute. The default walls. | strike | all sessions (backfilled 2026-10-03 the same way) |
hhiMinute series | Removed from the payload 2026-10-08 (sessions published before carry it; later ones do not). Herfindahl concentration of abs(volume-book gamma) across strikes within +/-2.5% of the median strike, narrow scope, x100. High = a few strikes hold the book. Not the hold band (that is frames[].hhi). | percent (0 to 100) | sessions to 2026-10-08 |
flowvelMinute series | Flow velocity: sum over strikes of the absolute 15-minute change in volume-book gamma, narrow scope. | $M per index point | all sessions |
now.gpct_volnow | Last finite gpct_vol (backfilled files) or the last minute's (new builds). | percentile | all sessions; null on the first 10 |
levels.flip_vol levels.call_wall_vol levels.put_wall_vollevels | flip_vol / call_wall_vol / put_wall_vol at the last frame's minute, the instant levels.flip is read at. | index points; strike | all sessions (backfilled 2026-10-03) |
frames[].gv frames[].gv0frames[] | cp x volume gamma per strike. gv0 is the object ngv_vol, flip_volcp and the volume walls are built from; gv adds the later expiries. | $M per index point | all sessions |
frames[].vv frames[].vv0frames[] | cp x volume vanna per strike. | $M of delta per vol point | all sessions |
frames[].cv frames[].cv0frames[] | cp x volume charm per strike. | $Bn of delta per day | all sessions |
frames[].vc frames[].vp frames[].vc0 frames[].vp0frames[] · volume (contracts) | Cumulative session volume per strike, calls (vc) and puts (vp) apart, no greek and no sign. The page's VOL COUNT ladder. On a session published before these keys the page reads the 0DTE count from the vol block (cb+cs+cu, pb+ps+pu) and says so. Not the per-second sec.vc / sec.vp, which are the whole chain's totals per second. | contracts | SPX sessions built from 2026-10-08 (live and rebuilt). SPX only: feedd's ticker frames (src/gateway/feedd/src/book.rs) do not carry them (payload_schema.json frame_spx_only) |
sec.flip_volcpsec | Volume-book zero-gamma flip, 0DTE, raw directional root (+/-2%, then +/-6%). The default flip. | index points | all sessions |
sec.cr0_volcp sec.ps0_volcpsec | Peak positive / negative volume-book gamma strike within +/-2.5% of spot, 0DTE. The default walls. | strike | all sessions |
sec.ngv_volcpsec | Net volume-book gamma at spot, 0DTE. | $M per index point | all sessions |
sec.vc sec.vp sec.vcn sec.vpnsec | The split of the printed contracts by right and expiry: vc the call contracts of today's expiry printed in that second, vp its puts; vcn / vpn the same for the near expiries the engine streams (the three nearest SPXW expiries). Their difference per bar is the VOLUME DELTA the terminal draws in the scope of the chart's expiry switch (0DTE: vc − vp; NEXT: vcn − vpn; ALL EXP: the sum), the volume book's own sign (a call bought is a call), never a guess at the aggressor. Live recordings since 2026-10-07; for every other day the {day}.vol.json.gz sidecar rebuilt from the raw tapes carries the same series (contracts/vol-sec.json); a sidecar without a near tape carries today's pair alone. | contracts | live recordings since 2026-10-07; sidecars rebuilt from the tape |
sec.dc sec.dp sec.dcn sec.dpnsec | The same split as vc / vp / vcn / vpn, each print weighted by its option's delta at the print: dc = sum of size x |delta| over today's calls printed in that second, dp the same over its puts, dcn / dpn the near expiries'. Absolute deltas per side, so dc - dp is the prints netted into index delta (a put's delta is negative; the minus restores it), the DELTA unit of the volume delta band (0DTE: dc − dp; NEXT: dcn − dpn; ALL EXP: the sum). Delta is Black-Scholes at the contract's carried IV and the parity spot (common.print_delta), the zero-vol limit (e^{-qT} in the money, 0 out of it) where the contract has no IV yet. Live: spot and IV of the second; sidecar: of the minute (the surface's parity spot and the IV of the print's own NBBO, carried per contract). Not multiplied by 100: one contract at delta 1 is 1. Live recordings since 2026-10-08; sidecars rebuilt since then. | delta-contracts (size x |delta|) | live recordings since 2026-10-08; sidecars rebuilt from the tape |
orders[].fliporder ledger | Distance of the order's top-gamma strike from the volume flip at that minute, the flip the chart draws (the measured flip until 2026-10-03; every archived ledger was re-pointed that day). null when the session carries no volume flip at that minute. | index points (absolute) | |
orders[].sideorder ledger | over / under the volume flip. | string |
LAB columns 18
| column | meaning | unit | built from |
|---|---|---|---|
flip_vol_distlevels · volume | spot - the VOLUME-book zero-gamma flip, points (+ = above it, the positive-gamma side): THE flip, the one the chart draws | points, signed | spot sec.flip_volcpspot - the last sec.flip_volcp inside the minute |
gamma_pos_vollevels · volume | 1 when spot is at or above the VOLUME-book flip (long gamma), 0 below | flag | spot sec.flip_volcp1 when flip_vol_dist >= 0, 0 below, NaN when either is missing |
call_wall_vol_distlevels · volume | spot - the VOLUME-book call wall (the 0DTE strike with the most positive gamma), points (+ = above it) | points, signed | spot sec.cr0_volcpspot - the last sec.cr0_volcp inside the minute |
put_wall_vol_distlevels · volume | spot - the VOLUME-book put wall (the 0DTE strike with the most negative gamma), points (+ = above it) | points, signed | spot sec.ps0_volcpspot - the last sec.ps0_volcp inside the minute |
call_wall_strength_vollevels · volume | share of the near-money 0DTE VOLUME book standing on the volume call wall's own strike, 0..1 -- a thin wall is drawn like any other but may behave like none | share | frames[].gv0 frames[].strikes sec.cr0_volcp|gv0| on the strike nearest the minute's cr0_volcp (within 3 pt) / sum |gv0| over the frame; each 5-minute frame carried forward |
put_wall_strength_vollevels · volume | same for the VOLUME-book put wall, 0..1 | share | frames[].gv0 frames[].strikes sec.ps0_volcp|gv0| on the strike nearest the minute's ps0_volcp (within 3 pt) / sum |gv0| over the frame; carried forward |
call_wall_agreelevels · all three | how many of the three books (volume, open interest, measured) name the SAME call wall, 1..3. Two or more agree in 45.5% of minutes, all three in 7.1% (store through 2026-09-23) | count | sec.cr0_volcp sec.cr0_oi sec.cr0of the three books' call walls at the minute, how many name the most-named strike |
put_wall_agreelevels · all three | same for the put wall: two or more books agree in 29.9% of minutes, all three in 1.8% | count | sec.ps0_volcp sec.ps0_oi sec.ps0of the three books' put walls at the minute, how many name the most-named strike |
call_wall_agree_distlevels · all three | spot - the call wall the most books name, points (+ = above it) | points, signed | spot sec.cr0_volcp sec.cr0_oi sec.cr0spot - the most-named call wall |
put_wall_agree_distlevels · all three | spot - the put wall the most books name, points (+ = above it) | points, signed | spot sec.ps0_volcp sec.ps0_oi sec.ps0spot - the most-named put wall |
net_gamma_volbook · volume | net gamma at spot, VOLUME book, $M -- 'how much gamma' unqualified | $M | sec.ngv_volcpthe last value inside the minute (the same object as the minute series ngv_vol) |
net_gamma_vol_flowbook · volume | 1-minute change of net_gamma_vol, $M per minute -- 'gamma flow' unqualified | $M per minute | sec.ngv_volcp1-minute difference of net_gamma_vol |
gamma_pctl_volbook · volume | net_gamma_vol ranked against the SAME minute of the prior 20 sessions, 0..100 (the chart's GAMMA PCTL). Read it as a decile: 20 sessions give ~11 points of error at the median | percentile | sec.ngv_volcprecomputed over the store from net_gamma_vol: the share of the same clock minute in the prior 20 sessions strictly below, x 100; NaN under 10 comparands. Not copied from gpct_vol |
total_change_15_volbook · volume | sum over strikes of |gamma change| of the 0DTE VOLUME book against 15 minutes earlier, $M -- 'book being rebuilt / flow velocity' unqualified | $M | frames[].gv0 frames[].strikessum over strikes of |gv0 now - gv0 in the latest frame at least 15 minutes older|, strikes matched by value; carried forward |
concentration_volbook · volume | Herfindahl of |gamma| across the near-money strikes of the 0DTE VOLUME book, 0..1: high = a few strikes hold it and pin hard -- 'concentrated book / pin risk' unqualified | Herfindahl | frames[].gv0sum of (|gv0| / sum |gv0|)^2 over the frame's strikes; carried forward. Not the minute series hhi (narrow scope, x 100) |
gamma_0dte_volexpiry · volume | VOLUME-book gamma, today's expiry only ($M) | $M | frames[].gv0sum of gv0 over the frame; carried forward |
gamma_next_volexpiry · volume | VOLUME-book gamma past today ($M) | $M | frames[].gv frames[].gv0sum of (gv - gv0); carried forward |
gamma_next_share_volexpiry · volume | share of the VOLUME book that outlives today (0..1) | share | frames[].gv frames[].gv0sum |gv - gv0| / sum |gv| |
MEASURED
the dealer's net position, signed print by print off the trade tape. Spotted by: neutral payload names (flip, cr0, ps0, gpct, ngv_meas, hold_lo/hi, dex), _meas in LAB.
Payload fields 41
| field | meaning | unit | since |
|---|---|---|---|
flipMinute series | Measured zero-gamma flip: the root of net measured gamma over a grid of hypothetical spot (+/-2%, widened once to +/-6%), on a curve smoothed with a 3-minute half-life EMA and tracked to the previous root. Lags the raw book by about 4 minutes. null when the book is one-sided over +/-6%. | index points | all sessions |
flip_seMinute series | Crossing standard error of flip (Mueller 1985): trailing curve noise over the slope at the root. null until 5 innovations exist or above 99. | index points | since 2026-08-24 (29 sessions) |
ngv_measMinute series | Net measured dealer gamma at spot, narrow scope. | $M per index point | all sessions |
gpctMinute series | Percentile (0 to 100) of ngv_meas against the SAME minute of the prior 20 sessions; null under 10 comparands. A decile, not a rank: the sampling error is about +-11 points at the median. No measured forward edge once the time of day is held fixed. | percentile | all sessions (sessions before 2026-08-24 recomputed to this definition on 2026-10-03, see Known caveats) |
hold_lo hold_hiMinute series · measured only | Removed from the payload 2026-10-08 (sessions published before carry it; later ones do not). The hold band: the contiguous interval of hypothetical spot around current spot where measured dealer gamma stays positive, searched over +/-6%. null when spot itself sits in negative measured gamma. An edge that reached the end of the grid reads as spot +/-6%. No volume-book band exists. | index points | sessions to 2026-10-08 |
charmMinute series | Measured charm pressure: the change in dealer dollar delta per day from time decay, narrow scope. | $Bn of delta per day | all sessions |
dexMinute series | Measured dealer delta inventory, narrow scope. Millions of index units ("shares"), not dollars: multiply by spot for $M. | millions of index units | all sessions |
vexMinute series | Measured dealer vega, narrow scope. | $M per vol point | all sessions |
exp_rangeMinute series · measured (adjustment) | FirmTape's forecast of the range left to the close: rv30-based sigma x spot x sqrt(minutes left), scaled by exp(-0.147 z), z = ngv_meas z-scored against the prior 20 sessions' pooled minutes. Measured to add nothing over the straddle; kept for comparison. | index points | all sessions |
now.gpctnow | Last minute's gpct. | percentile | all sessions |
now.exp_rangenow · measured (adjustment) | exp_range at the second-to-last minute; near zero at the close by construction. | index points | all sessions |
levels.fliplevels | frames[-1].flip. | index points | all sessions |
levels.cr0levels | Strike with the largest positive measured gamma within +/-2.5% of spot (the measured "call wall"), narrow scope. | strike | all sessions |
levels.ps0levels | Strike with the most negative measured gamma within +/-2.5% of spot (the measured "put wall"). | strike | all sessions |
levels.hold_lo levels.hold_hilevels | Removed from the payload 2026-10-08 (sessions published before carry it; later ones do not). The hold band at the last frame. | index points | sessions to 2026-10-08 |
ladder.g_flowladder | frames[-1].g. | $M per index point | all sessions |
ladder.v_flowladder | frames[-1].v. | $M of delta per vol point | all sessions |
ladder.c_flowladder | frames[-1].c. | $Bn of delta per day | all sessions |
frames[].g frames[].g0frames[] | Dealer gamma per strike. | $M per index point | all sessions |
frames[].v frames[].v0frames[] | Dealer vanna per strike. | $M of delta per vol point | all sessions |
frames[].c frames[].c0frames[] | Dealer charm per strike. | $Bn of delta per day | all sessions |
frames[].d frames[].d0frames[] | Dealer delta per strike, in dollars (delta x 100 x spot), unlike the aggregate dex. | $M of index exposure | all sessions |
frames[].e frames[].e0frames[] | Dealer vega per strike. | $M per vol point | all sessions |
frames[].cr0frames[] | Peak positive measured gamma strike in this frame (argmax g). | strike | all sessions |
frames[].ps0frames[] | Peak negative measured gamma strike (argmin g). | strike | all sessions |
frames[].flipframes[] | flip at this minute. | index points | all sessions |
frames[].hlo frames[].hhiframes[] | Removed from the payload 2026-10-08 (sessions published before carry it; later ones do not). hold_lo / hold_hi at this minute. hhi here is the hold band's upper edge, not the top-level hhi concentration series. | index points | sessions to 2026-10-08 |
vol.cb vol.pbvol · measured (signing) | Customer BUY contracts, calls / puts, per strike, cumulative. | contracts | all sessions |
vol.cs vol.psvol · measured (signing) | Customer SELL contracts, calls / puts. | contracts | all sessions |
sec.flipsec | Measured flip (smoothed, tracked, minute cadence). | index points | all sessions |
sec.flip_sesec | Its crossing standard error. | index points | since 2026-08-24 |
sec.cr0 sec.ps0sec | Peak positive / negative measured gamma strike within +/-2.5%, narrow scope. | strike | all sessions |
sec.ngv_meassec | Net measured gamma at spot. | $M per index point | all sessions |
sec.hold_lo sec.hold_hisec · measured only | Removed from the payload 2026-10-08 (sessions published before carry it; later ones do not). The hold band per second. | index points | sessions to 2026-10-08 |
sec.charmsec | Charm pressure. | $Bn of delta per day | all sessions |
sec.vannasec | Vanna pressure (the only aggregate vanna series). | $M of delta per vol point | all sessions |
sec.mc.<w>.strike sec.mc.<w>.valuesec | Max-change gamma, w in 1 5 10 15 30 minutes: the strike whose measured gamma moved most over the trailing w minutes, and the signed change. null for the first w minutes. | strike; $M per index point | all sessions |
orders[].gorder ledger | Dealer gamma the order added (measured sign); null if it could not be priced. | $M per index point | |
stats.no_side stats.no_gammaorder ledger | Orders the tape could not side / could not price. | count | |
stats.gamma_up stats.gamma_dnorder ledger | Orders that added positive / negative dealer gamma. | count | |
stats.<event name>calendar file · measured (the book statistics) | What usually followed that kind of event: window, ratio (range in the window over the trailing-move expectation, event days over other days), n, study, recent [[date, value]], book {flip_crossed, at_wall, short_gamma, short_vs_long}. The book statistics use the measured flip and the measured hold band; at_wall means "ended within a few points of a hold-band edge", not of cr0 / ps0. |
LAB columns 33
| column | meaning | unit | built from |
|---|---|---|---|
flip_measlevels · measured | the MEASURED-book zero-gamma flip as a price (use flip_meas_dist in rules) | index points | flipcopied |
flip_meas_distlevels · measured | spot - the MEASURED-book flip, points (+ = above it) | points, signed | spot flipspot - flip |
gamma_pos_measlevels · measured | 1 when spot is at or above the MEASURED-book flip, 0 below | flag | spot flip1 when spot >= flip, 0 below, NaN when either is missing |
call_wall_meas_distlevels · measured | spot - the MEASURED-book call wall, points (+ = above it) | points, signed | spot sec.cr0spot - the last sec.cr0 inside the minute |
put_wall_meas_distlevels · measured | spot - the MEASURED-book put wall, points (+ = above it) | points, signed | spot sec.ps0spot - the last sec.ps0 inside the minute |
call_wall_strength_measlevels · measured | share of the near-money MEASURED book on the measured call wall's strike, 0..1 | share | frames[].g frames[].strikes frames[].cr0|g| on the frame's cr0 / sum |g| over the frame; carried forward |
put_wall_strength_measlevels · measured | same for the MEASURED-book put wall, 0..1 | share | frames[].g frames[].strikes frames[].ps0|g| on the frame's ps0 / sum |g| over the frame; carried forward |
net_gamma_measbook · measured | net gamma at spot, MEASURED (tape-signed) book, $M | $M | ngv_meascopied |
net_gamma_meas_minus_oibook · measured − open interest | net_gamma_meas - net_gamma_oi, $M: the tape-signed book against the open-interest book. For measured vs VOLUME compare net_gamma_meas with net_gamma_vol | $M | ngv_meas ngv_convngv_meas - ngv_conv |
net_gamma_meas_flowbook · measured | 1-minute change of net_gamma_meas, $M per minute | $M per minute | ngv_meas1-minute difference of ngv_meas |
gamma_pctl_measbook · measured | net_gamma_meas ranked against the same minute of the prior 20 sessions, 0..100 | percentile | ngv_measrecomputed over the store from net_gamma_meas, the same way as gamma_pctl_vol. Not copied from gpct, so one definition on every session |
dealer_delta_measbook · measured | dealer delta exposure, MEASURED book, millions of SPX units of delta; + = dealers long delta. No volume-book twin | M SPX units of delta | dexcopied |
dealer_vega_measbook · measured | dealer vega exposure, MEASURED book, $M per vol point. No volume-book twin | $M per vol point | vexcopied |
charm_measbook · measured | charm pressure, MEASURED book: the dollar delta the book sheds per day from time decay alone, $Bn per day | $Bn of delta per day | charmcopied |
vanna_measbook · measured | vanna pressure, MEASURED book: the dollar delta the book gains per 1 vol point of IV, $M per vol point | $M of delta per vol point | sec.vannathe last value inside the minute |
dealer_delta_meas_flowbook · measured | 1-minute change of dealer_delta_meas, millions of SPX units | M SPX units per minute | dex1-minute difference, within the session |
dealer_vega_meas_flowbook · measured | 1-minute change of dealer_vega_meas, $M per vol point | $M per vol point, per minute | vex1-minute difference, within the session |
charm_meas_flowbook · measured | 1-minute change of charm_meas, $Bn per day | $Bn per day, per minute | charm1-minute difference, within the session |
max_change_5_measbook · measured | the largest single-strike gamma change of the MEASURED ladder over the last 5 min, $M, signed -- how hard the busiest strike just moved | $M, signed | sec.mc.5.valuethe last value inside the minute |
max_change_15_measbook · measured | the same over 15 min, $M | $M, signed | sec.mc.15.valuethe last value inside the minute |
max_change_30_measbook · measured | the same over 30 min, $M | $M, signed | sec.mc.30.valuethe last value inside the minute |
concentration_measbook · measured | the same Herfindahl on the MEASURED book, 0..1 | Herfindahl | frames[].gsum of (|g| / sum |g|)^2 over the frame's strikes; carried forward |
abs_gamma_meas_over_gross_oigross · measured ÷ unsigned OI | sum |measured gamma| / sum unsigned OI gamma: how much of the convexity the tape-signed book accounts for. Low = the sides cancel. Changes scope with book_width | ratio | frames[].g frames[].gasum |g| / sum ga over the frame |
abs_gamma_below_measgross · measured | sum |measured gamma| on strikes within 30 pt BELOW spot, $M/pt | $M/pt | frames[].g frames[].strikes spotsum |g| on strikes in [spot - 30, spot); carried forward |
abs_gamma_above_measgross · measured | the same within 30 pt ABOVE spot, $M/pt | $M/pt | frames[].g frames[].strikes spotsum |g| on strikes in (spot, spot + 30]; carried forward |
abs_gamma_below_meas_chg15gross · measured | change of abs_gamma_below_meas against the frame 15 min earlier (negative = the book below thinned) | $M/pt, signed | frames[].g frames[].strikes spotabs_gamma_below_meas minus its value in the latest frame at least 15 minutes older |
abs_gamma_above_meas_chg15gross · measured | change of abs_gamma_above_meas over 15 min (positive = the book above thickened) | $M/pt, signed | frames[].g frames[].strikes spotabs_gamma_above_meas minus its value in the latest frame at least 15 minutes older |
abs_gamma_below_meas_chg30gross · measured | change of abs_gamma_below_meas over 30 min | $M/pt, signed | frames[].g frames[].strikes spotthe same against the frame at least 30 minutes older |
abs_gamma_above_meas_chg30gross · measured | change of abs_gamma_above_meas over 30 min | $M/pt, signed | frames[].g frames[].strikes spotthe same against the frame at least 30 minutes older |
gamma_0dte_measexpiry · measured | MEASURED gamma, today's expiry only ($M) | $M | frames[].g0sum of g0 over the frame; carried forward |
gamma_next_measexpiry · measured | MEASURED gamma past today -- the book that survives the close ($M) | $M | frames[].g frames[].g0sum of (g - g0); carried forward |
gamma_next_share_measexpiry · measured | share of the MEASURED book that outlives today (0..1) | share | frames[].g frames[].g0sum |g - g0| / sum |g| |
range_left_fcstvol · measured (adjustment) | FirmTape's FORECAST of the range left to the close, index points: realised vol over the last 30 min scaled to the minutes left, adjusted by how high net_gamma_meas stands against the prior 20 sessions. A model, not an implied number | index points | exp_rangecopied |
OPEN INTEREST
cp x morning open interest. Spotted by: struct, conv or _oi in the payload (flip_struct, ngv_conv, cr0_oi), _oi in LAB.
Payload fields 12
| field | meaning | unit | since |
|---|---|---|---|
ga_backfillTop level | Provenance stamp of the 2026-09-02 backfill that added the unsigned book ga/ga0 to older sessions: {at, oi, expiries, contracts, applied}. | object | sessions to 2026-08-21 |
ngv_convMinute series | Net cp x OI gamma at spot, narrow scope (0DTE plus three expiries, not 0DTE only). | $M per index point | all sessions |
frames[].go frames[].go0frames[] | cp x OI gamma per strike. | $M per index point | all sessions |
frames[].vo frames[].vo0frames[] | cp x OI vanna per strike. | $M of delta per vol point | all sessions |
frames[].co frames[].co0frames[] | cp x OI charm per strike. | $Bn of delta per day | all sessions |
frames[].ga frames[].ga0frames[] · open interest (unsigned) | Gross book: abs(gamma) x OI, calls and puts added. No sign, so no flip and no walls. | $M per index point | all sessions (backfilled 2026-09-02 on sessions to 2026-08-21) |
frames[].oc frames[].op frames[].oc0 frames[].op0frames[] · open interest (contracts) | Open interest per strike, calls (oc) and puts (op) apart, no greek and no sign: the plain count of the chain. The page's OI COUNT ladder (net, calls beside puts, or the sum). Whole numbers. | contracts | SPX sessions built from 2026-10-08 (live and rebuilt). SPX only: feedd's ticker frames (src/gateway/feedd/src/book.rs) do not carry them (payload_schema.json frame_spx_only) |
sec.flip_structsec | OI-book flip, narrow scope, raw root. | index points | all sessions |
sec.ngv_convsec | Net OI gamma at spot, narrow scope. | $M per index point | all sessions |
sec.cr0_oi sec.ps0_oisec | Peak positive / negative OI gamma strike within +/-2.5%, 0DTE only. | strike | all sessions |
sec.cr0_oi_book sec.ps0_oi_booksec | The same peaks over the narrow-scope OI book (they can pick a 3-5 DTE wall). | strike | all sessions |
orders[].oiorder ledger | Each leg's open interest that morning, aligned with lg (four at most); a leg the OI file does not carry is null, and the field is null when no leg is known. The ORDERS panel marks an order larger than one of them. | contracts | ledgers rebuilt from 2026-10-11 |
LAB columns 15
| column | meaning | unit | built from |
|---|---|---|---|
flip_oi_distlevels · open interest | spot - the OPEN-INTEREST-book flip, points (+ = above it) | points, signed | spot sec.flip_structspot - the last sec.flip_struct inside the minute |
call_wall_oi_distlevels · open interest | spot - the OPEN-INTEREST-book call wall at 0DTE, points (+ = above it) | points, signed | spot sec.cr0_oispot - the last sec.cr0_oi inside the minute |
put_wall_oi_distlevels · open interest | spot - the OPEN-INTEREST-book put wall at 0DTE, points (+ = above it) | points, signed | spot sec.ps0_oispot - the last sec.ps0_oi inside the minute |
net_gamma_oibook · open interest | net gamma at spot, call-minus-put OPEN-INTEREST book over four expiries, $M (not comparable with the 0DTE books' level) | $M | ngv_convcopied |
gross_oi_totalgross · unsigned OI | sum of |gamma| x open interest over the near-money window, $M per index point. Its scope follows book_width (3 expiries, 21 on widened sessions) | $M/pt | frames[].gasum of ga over the frame; carried forward |
gross_oi_at_spotgross · unsigned OI | the unsigned OI book on the strike nearest spot, $M/pt | $M/pt | frames[].ga frames[].strikes spotga on the strike nearest spot, NaN when it is more than 3 pt away; carried forward |
gross_oi_abovegross · unsigned OI | the heaviest unsigned OI strike ABOVE spot, $M/pt | $M/pt | frames[].ga frames[].strikes spotthe largest ga on a strike above spot; carried forward |
gross_oi_belowgross · unsigned OI | the heaviest unsigned OI strike BELOW spot, $M/pt | $M/pt | frames[].ga frames[].strikes spotthe largest ga on a strike below spot; carried forward |
gross_oi_above_distgross · unsigned OI | points from spot up to that heaviest strike above, always positive | points, always positive | frames[].ga frames[].strikes spotthat strike - spot |
gross_oi_below_distgross · unsigned OI | points from spot down to the heaviest strike below, always positive | points, always positive | frames[].ga frames[].strikes spotspot - that strike |
gross_oi_near_sharegross · unsigned OI | share of the unsigned OI book within +-10 pt of spot, 0..1 -- how much convexity sits on top of price | share | frames[].ga frames[].strikes spotsum of ga within 10 pt of spot / sum of ga |
gross_oi_top3_sharegross · unsigned OI | share of the unsigned OI book on its three heaviest strikes, 0..1 | share | frames[].gathe three largest ga / sum of ga |
gamma_0dte_oiexpiry · open interest | OPEN-INTEREST gamma, today's expiry only ($M) | $M | frames[].go0sum of go0 over the frame; carried forward |
gamma_next_oiexpiry · open interest | OPEN-INTEREST gamma past today ($M) | $M | frames[].go frames[].go0sum of (go - go0); carried forward |
gamma_next_share_oiexpiry · open interest | share of the OI book that outlives today (0..1) -- the OI book is roughly half next-expiry, so this one really moves | share | frames[].go frames[].go0sum |go - go0| / sum |go| |
NO BOOK
market quantities, calendar and bookkeeping: no dealer weight. Spotted by: spot, iv, straddle, volume, events, axes.
Payload fields 52
| field | meaning | unit | since |
|---|---|---|---|
dayTop level | Session date, ET. | YYYY-MM-DD | all sessions |
builtTop level | Build stamp of the code that wrote the file; a -live suffix means the live engine wrote it. | string | all sessions |
minutesTop level | The minute axis every minute series is aligned to. | HH:MM | all sessions |
stepTop level | Minutes between ladder frames. | 5 | all sessions |
exp_nTop level | Post-0DTE expiries the session was archived with (14 to 21; 21 on nearly every session since early 2023). | count | all sessions |
lad_nTop level · volume, OI | Post-0DTE expiries the frames' VOLUME and OI books sum over. Absent means 3. | count | since 2026-08-24 (29 sessions) |
lad5Top level · all (display) | The ladder's display scale floor: median of the 5 heaviest strikes over the closing 30 minutes of the 5 prior sessions, keyed <frame key>|<slice> (keys g v c d e go vo co gv vv cv ga, slices all, z0 = 0DTE, nx = after 0DTE). Cosmetic, changes no measurement. | frame units | since 2022-04-14 (absent on 2019-06-19) |
spotMinute series | SPX, solved from put-call parity on the option chain (median of C - P + K e^(-rT) over the 10 strikes nearest the crossing). | index points | all sessions |
vwapMinute series | Not volume-weighted: the running mean of the minute spot since the open (an index has no volume). | index points | all sessions |
b2u b2lMinute series | vwap plus / minus 2 running standard deviations of spot. | index points | all sessions |
skewMinute series | 25-delta risk reversal on the 0DTE chain: put IV minus call IV. Positive = puts bid over calls. null unless both wings bracket 25 delta. Calendar-time IV. | vol points | all sessions |
skewpctMinute series | The same skew as a ratio: how much richer the 25-delta put is than the call. | percent | all sessions |
straddleMinute series | ATM 0DTE straddle mid (call mid + put mid at the strike nearest spot). Batch days read the 5-minute chain and carry each value forward, so it steps every 5 minutes. | index points | all sessions |
atmivMinute series | ATM implied vol backed out of straddle: straddle / (0.7979 x sqrt(T) x spot), T on the trading-time clock. | vol points (percent) | all sessions |
div30Minute series | Change in atmiv over the last 30 minutes. | vol points | all sessions |
rvi15 rvi30 rvi60Minute series | Realised over implied range: the high-low range of the per-second spot over the trailing 15 / 30 / 60 minutes, divided by the straddle-implied range over the same horizon (2 x straddle x sqrt(H / minutes left)). Above 1 = the market is moving more than it priced. | ratio | all sessions |
now.spotnow | Last minute's spot. | index points | all sessions |
now.rv30now | Realised vol of the last 30 one-minute log returns, annualised on the trading-time clock (sqrt(252 x 390)). The only place rv30 is published. A 30-observation sigma: its 95% interval is x0.80 to x1.34. | percent | all sessions |
now.sessions_in_poolnow | Prior sessions in the gpct pool (up to 20). | count | all sessions |
ladder.strikesladder | Strike axis. | strike | all sessions |
frames[].tframes[] | Frame minute. | HH:MM | all sessions |
frames[].idxframes[] | Index of t in minutes. | integer | all sessions |
frames[].strikesframes[] | Strike axis of this frame. | strike | all sessions |
frames[].ivc frames[].ivpframes[] | Mean 0DTE implied vol of the call / put at each strike (the smile). Calendar-time clock. null where the strike has no 0DTE quote. | vol points (percent) | all sessions |
vol.strikesvol | Strike axis (fixed for the session). | strike | all sessions |
vol.t vol.idxvol | Frame minute and its index in minutes. | HH:MM, integer | all sessions |
vol.cu vol.puvol | Multi-leg volume no package signing could reach (unsigned). | contracts | all sessions |
sec.secssec | Second axis. | HH:MM:SS | all sessions |
sec.stepsec | Seconds between rows (1 on every session). | seconds | all sessions |
sec.spotsec | Parity spot solved per second. | index points | all sessions |
sec.volsec | 0DTE contracts printed in that second, as recorded live. Only on sessions the live engine recorded. | contracts | 38 sessions, since 2026-08-03 |
day sym min_premiumorder ledger | Session, symbol, premium floor. | date, string, $ | |
asoforder ledger | Time of the newest order, ET. | HH:MM:SS | |
builtorder ledger | When the ledger was rebuilt, ET. | HH:MM:SS | |
orders[].oidorder ledger | Order id. | string | |
orders[].torder ledger | When the parent order printed, ET. | HH:MM | |
orders[].kindorder ledger | Structure from package reconstruction (single, vertical, ...). | string | |
orders[].legsorder ledger | Up to three legs as a label, e.g. 7740P/7750P. | string | |
orders[].lgorder ledger | Up to four legs as [strike, "C"|"P", customer side], side +1 bought, -1 sold, 0 unknown. | array | |
orders[].exporder ledger | Expiry carrying most of the order's gamma. | Mon D | |
orders[].sizeorder ledger | Contracts in the parent order. | contracts | |
orders[].netorder ledger | Premium. | $M | |
orders[].emorder ledger | Each leg's strike from spot in expected moves to the close (2 x ATM straddle); null unless every leg expires that day. | EM units | |
orders[].shorder ledger | The order's share of its busiest strike's session volume. | percent | |
orders[].leorder ledger | Each leg's own expiry, aligned with lg (four at most). exp is one expiry for the order; an order on two expiries names each leg's contract with this. Without it the ORDERS panel reads every leg as exp. | YYYY-MM-DD list | ledgers rebuilt from 2026-10-11 |
stats.n stats.netorder ledger | Orders above the floor, their total premium. | count, $M | |
built from to earn_tocalendar file | Build time (UTC), calendar span, last date with historical earnings. | ||
days.<date>[]calendar file | Events on that ET date: t clock (HH:MM, "" for all day), k kind (fomc macro earn opex early closed fed auction ff), n name, i impact (high med low), optional f forecast, p prior, u source link. | ||
stats_built stats_measurecalendar file | When the statistics were built and the measure's definition. | ||
ledgercalendar file | The pre-registered FOMC forward ledger (registered, built, in_sample, rows). | ||
next_earn.<SYM>calendar file | Next earnings date d and hour h per covered stock. | ||
blackoutscalendar file | Fed blackout windows as [start, end]. |
LAB columns 54
| column | meaning | unit | built from |
|---|---|---|---|
mintime | minutes since the 09:30 open (0-389) | minutes since 09:30 | minutesthe row's index on the minute axis |
minutes_to_closetime | minutes left to the session's last minute: 15:59 on a full day, 12:59 on a half day | minutes to the last minute | minutes(rows in the session - 1) - min |
spotprice | SPX spot price | index points | spotcopied |
spot_meanprice | the running mean of spot since the open (an equal-weight mean of minute prices; NOT a VWAP, no volume weights it) | index points | vwapcopied |
spot_mean_distprice | spot - spot_mean, points | points, signed | spot vwapspot - vwap |
spot_sdprice | one running standard deviation of spot since the open, points (the half-width of the band over 2) | points | b2u b2l(b2u - b2l) / 4 |
spot_mean_zprice | spot's distance from its running mean in running SDs (+3 = stretched 3 SD above). The 'sigma stretch' of the chart's band | running SDs, signed | spot vwap b2u b2l(spot - vwap) / spot_sd |
spot_mean_up2price | the band's upper edge, spot_mean + 2 running SDs, price | index points | b2ucopied |
spot_mean_dn2price | the band's lower edge, spot_mean - 2 running SDs, price | index points | b2lcopied |
ret1price | spot now minus spot one minute ago, points (the last 1-minute candle's move) | points, signed | spotspot minus the previous minute's spot, within the session |
ret15price | spot now minus spot 15 minutes ago, index points (the move just made; positive = drifted up) | points, signed | spotspot minus spot 15 minutes earlier, within the session |
ret30price | spot now minus spot 30 minutes ago, index points | points, signed | spotspot minus spot 30 minutes earlier, within the session |
rv_1mprice | intra-minute realised vol from the per-second spot, annualised in % -- comparable to atm_iv; a choppy vs smooth minute | annualised % | sec.spot sec.secsstandard deviation of the per-second log returns inside the minute x sqrt(252 x 6.5 x 3600) x 100; NaN under 5 seconds |
book_widthexpiry · volume and OI scope | how many post-0DTE expiries the session's volume and OI books sum over -- a provenance stamp, not a market state: 3 on sessions archived narrow, 21 on sessions archived wide (the ones from 2026-08-24 on, which carry lad_n); read it per session. Use it ONLY to keep a rule on gamma_next_* / gamma_next_share_* (vol or oi) or gross_oi_* inside one definition; never as a market condition | count | lad_nlad_n, 3 when the payload has none |
atm_ivvol | 0DTE ATM implied vol, % annualised on the trading clock, backed out of the ATM straddle (pair with top_pctl for an 'IV rank'). It climbs ~3x from open to close by construction, so compare at a fixed clock | IV, % (trading clock) | atmivcopied |
atm_iv_chg1vol | 1-minute change of atm_iv, vol points | vol points per minute | atmiv1-minute difference, within the session |
atm_iv_chg30vol | atm_iv now minus atm_iv 30 minutes ago, vol points -- the IV leg that gives back a correct realised-vol call. Mostly the clock: prefer it inside a min window | vol points | div30copied |
straddlevol | the 0DTE ATM straddle price, index points: the market's expected absolute move to the close | index points | straddlecopied |
straddle_pctvol | the ATM straddle as a % of spot -- the expected move, comparable across days | % of spot | straddle spotstraddle / spot x 100 |
em_usedvol | |spot - the session's first spot| / the opening expected move (2 x the first ATM straddle): the EM drawer's 'used so far', the same number. Above 1 = the opening move is spent, the chart's CHOP | ratio | spot straddle|spot - the session's first spot| / (2 x the session's first straddle) |
range_ratio_15vol | realised RANGE over the last 15 min (per-second high minus low) / the range the straddle implies for 15 min; > 1 = moving more than priced | ratio | rvi15copied |
range_ratio_30vol | the same realised/implied RANGE ratio over 30 min -- the strongest single forecast of the next 30 min's range this programme found | ratio | rvi30copied |
range_ratio_60vol | the same realised/implied RANGE ratio over 60 min | ratio | rvi60copied |
rv30_over_atm_ivvol | realised vol over the last 30 one-minute returns / atm_iv, both annualised on the trading clock, plain ratio: 1 = the tape moves as fast as the straddle prices; > 1 = the straddle is cheap -- 'VRP / realised vs implied' as a ratio | ratio | spot atmivstandard deviation of the last 30 one-minute log returns x sqrt(252 x 390) x 100, over atmiv |
skew_25dvol | 25-delta put IV minus 25-delta call IV, vol points (calendar clock) | vol points (calendar clock) | skewcopied |
skew_25d_ratiovol | 25-delta skew as a RATIO: put IV over call IV minus one, in PERCENT (median ~10, 95th pctl ~25) -- NOT a 0-1 percentile; 'rich skew' is skew_25d_ratio >= 15 or top_pctl on it | percent | skewpctcopied |
skew_25d_chg1vol | 1-minute change of skew_25d, vol points | vol points per minute | skew1-minute difference, within the session |
volumetape | contracts traded per minute across the 0DTE chain: from the raw tape where the archive has it; otherwise the snapshot's, which on older sessions is a 5-minute increment spread evenly over its minutes | contracts per minute | raw 0DTE tape sec.vol vol.cb vol.cs vol.cu vol.pb vol.ps vol.pucontracts per minute from the raw tape; without it, volume_snap |
volume_pctltape | traded-VOLUME percentile of this minute vs the same minute of the prior 20 sessions (0-1) -- 'heavy for this time of day'; volume, NOT implied vol | percentile | volumeshare of the same minute in the prior 20 sessions at or below this one, 0..1; NaN under 10 comparands |
volume_snaptape | volume as the snapshot carries it: per-second prints summed on newer sessions, a 5-minute increment spread per minute on older ones | contracts per minute | sec.vol vol.cb vol.cs vol.cu vol.pb vol.ps vol.pusec.vol summed per minute; without it, each 5-minute increment of the cumulative vol block spread evenly over its minutes |
ev_high_impactcalendar | 1 on a day with a high-impact release: FOMC, CPI, payrolls or PCE; else 0 | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_fomccalendar | 1 on an FOMC decision day (statement 14:00, press conference 14:30) | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_cpicalendar | 1 on a CPI day (08:30, before the open) | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_payrollscalendar | 1 on a payrolls day (08:30, before the open) | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_pcecalendar | 1 on a PCE inflation day (08:30, before the open) | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_ismcalendar | 1 on an ISM day, manufacturing or services (10:00, inside the session) | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_earningscalendar | 1 when a mega-cap (NVDA, AAPL, MSFT, ...) reports today, before the open or after the close | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_opexcalendar | 1 on a monthly or quarterly options expiration day | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_pre_opencalendar | 1 if a high/medium release came out before 09:30, so the session already trades AFTER the number | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_minutes_tocalendar | minutes until the next scheduled event inside the session (FOMC 14:00, ISM 10:00, FOMC minutes); NaN when none is ahead, so a condition on it selects event days by itself | minutes | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_minutes_sincecalendar | minutes since the last scheduled event inside the session; NaN before the first one | minutes | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_opex_quarterlycalendar | 1 on the quarterly third Friday (March, June, September, December): options, the ES and NQ futures and the index rebalances expire or settle together. About 4 days a year | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_expiry_stackcalendar | 1 when two or more expiry-class events share the date: every quarterly third Friday, the January LEAPS expiry, a month-end that meets an index rebalance or the monthly VIX settlement | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_quarter_endcalendar | 1 on the last session of a quarter, the SPX quarter-end expiry. About 4 days a year | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_month_endcalendar | 1 on the last session of a month, quarter-ends included | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_vix_weekcalendar | 1 on every session of the week that holds the MONTHLY VIX settlement (the Wednesday thirty days before the next month's third Friday), about one week in four | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_futures_rollcalendar | 1 on the Thursday eight days before a quarterly expiry, when ES and NQ volume moves to the next contract. About 4 days a year | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
ev_leapscalendar | 1 on the January third Friday, when the long-dated LEAPS cycle expires. One day a year | flag | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
days_to_opexcalendar | weekdays left to the next third-Friday options expiration, 0 on the day itself, up to about 24; holidays count as weekdays | weekdays | /snapshots/events.jsonfrom the day's calendar rows; a day the calendar does not know reads 0, clocks NaN |
pulse_minutes_sincepulse | minutes since the last minute the tape marked as market-moving (a one-minute index move of 4 sigma of the trailing half hour, or 3 with the dealer book moving too); NaN before the first such minute, so 'pulse_minutes_since <= 5' means 'within five minutes after a tape shock' | minutes | pulse.firmtape.com marksfrom the tape-marked minutes of the session (not a payload field); a day without marks reads 0, clocks NaN |
pulse_zpulse | the spot z-score of that last marked minute, in sigmas of the trailing half hour; NaN before the first | sigma | pulse.firmtape.com marksfrom the tape-marked minutes of the session (not a payload field); a day without marks reads 0, clocks NaN |
pulse_flashpulse | 1 if that marked minute had two or more public news desks flashing beside it (a headline-driven move), else 0 | flag | pulse.firmtape.com marksfrom the tape-marked minutes of the session (not a payload field); a day without marks reads 0, clocks NaN |
pulse_bookpulse | 1 if that marked minute had no headline and no calendar event, the dealer book moved on its own; else 0 | flag | pulse.firmtape.com marksfrom the tape-marked minutes of the session (not a payload field); a day without marks reads 0, clocks NaN |
pulse_countpulse | how many tape-marked minutes the session has had so far; 0 before the first | count | pulse.firmtape.com marksfrom the tape-marked minutes of the session (not a payload field); a day without marks reads 0, clocks NaN |