The LAB vocabulary
Every column a rule can name: 120 of them, in 10 groups, with the unit, the range, the book it reads and one condition that uses it. The same dictionary the compiler is given, so what you read here is what it understands.
How a rule is written
A rule is one or two legs. A leg has a direction, up or down,
the way the trade profits, and a list of conditions on the columns in the groups on the
left, all of which must hold at the same minute. The engine then measures the move over the
next 5, 15 or 30 minutes of the same session, after a cost, against the core condition
alone, out of sample. Say it in words in the LAB chat and it is compiled into this shape;
send the shape itself through the API.
{"name": "FOMC last-hour fade",
"legs": [{"dir": "down", "when": [
{"col": "ev_fomc", "op": ">=", "value": 1, "core": true},
{"col": "min", "op": "between", "value": [330, 330]}]}],
"horizon": 30, "cost": 1.0, "good_move": 3.0}
Operators
| operator | meaning |
|---|---|
>= <= > < | compare with a number |
abs>= abs<= | compare the magnitude, sign ignored: distances, flows, changes |
between | inside [lo, hi], inclusive; [300, 300] is one exact minute |
top_pctl abs_top_pctl | in the top share of the column's own distribution over the whole store, 0.5 … 0.99; 0.9 is the top decile, signed or by magnitude |
Three things to know first
Distances are signed: spot minus the level, positive above it, so "at the wall" is
abs<= a few points and "above the flip" is flip_vol_dist > 0.
Every name says its book: _vol the volume book, the one the chart
draws, _meas the measured book, _oi the open-interest book. An idea that
says "the flip" or "the call wall" compiles to flip_vol_dist and
call_wall_vol_dist; say "measured book" for flip_meas_dist,
call_wall_meas_dist and gamma_pos_meas, or "open interest" for the
_oi twins, and keep one book per rule.
The last minutes have no outcome: a condition on min must leave
horizon minutes of session, so keep it at or below 384, 374 or 359 for the 5,
15 and 30-minute horizons.
The same reference as JSON, for scripts and assistants: /api/lab/vocabulary. The payload fields these columns are built from, book by book: the data dictionary. Every column is computed per minute over every archived session by the Lab's feature-store builder; a new column reaches the compiler, this page and the API in the same deploy.
Time in the session
Where in the day the rule is read. Minute 0 is 09:30, 389 is 15:59; a rule that fires inside the last `horizon` minutes measures nothing, so keep min ≤ 389 − horizon.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
min | minutes since the 09:30 open (0-389) | minutes since 09:30 | 0 … 389 | min between [300, 330] | |
minutes_to_close | 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 | 389 … 0; to 12:59 on a half day | minutes_to_close <= 60 |
Price, its running mean and the move just made
The index itself, the running mean of spot since the open and its ±2 SD band (an equal-weight mean, not a VWAP), and the last few minutes of tape. Distances are signed index points, positive above.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
spot | SPX spot price | index points | the SPX level | spot >= 5000 | |
spot_mean | the running mean of spot since the open (an equal-weight mean of minute prices; NOT a VWAP, no volume weights it) | index points | running mean of spot since the open (not volume-weighted) | spot_mean_z >= 2 (prefer the z-score) | |
spot_mean_dist | spot - spot_mean, points | points, signed | spot − spot_mean; negative below | spot_mean_dist >= 10 | |
spot_sd | one running standard deviation of spot since the open, points (the half-width of the band over 2) | points | one running SD of spot, > 0 | spot_sd <= 4 | |
spot_mean_z | 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 | typically −4 … +4 | spot_mean_z >= 3 | |
spot_mean_up2 | the band's upper edge, spot_mean + 2 running SDs, price | index points | spot_mean + 2 running SDs | spot_mean_z >= 2 (prefer the z-score) | |
spot_mean_dn2 | the band's lower edge, spot_mean - 2 running SDs, price | index points | spot_mean − 2 running SDs | spot_mean_z <= -2 | |
ret1 | spot now minus spot one minute ago, points (the last 1-minute candle's move) | points, signed | spot now − 1 min ago | ret1 abs>= 5 | |
ret15 | spot now minus spot 15 minutes ago, index points (the move just made; positive = drifted up) | points, signed | spot now − 15 min ago | ret15 <= -3 | |
ret30 | spot now minus spot 30 minutes ago, index points | points, signed | spot now − 30 min ago | ret30 abs>= 10 | |
rv_1m | intra-minute realised vol from the per-second spot, annualised in % -- comparable to atm_iv; a choppy vs smooth minute | annualised % | intra-minute realised vol | rv_1m >= 25 |
Dealer levels and distances
The zero-gamma flip and the call and put walls of each book, as signed distances from spot, how much of the book stands on each wall, and whether the books agree. Every name says its book: _vol the volume book (the one the chart draws, and what an unqualified idea means), _meas the measured book, _oi the open-interest book.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
flip_vol_dist | spot - the VOLUME-book zero-gamma flip, points (+ = above it, the positive-gamma side): THE flip, the one the chart draws | points, signed | spot − volume-book flip; + above | volume | flip_vol_dist abs<= 5 |
flip_meas | the MEASURED-book zero-gamma flip as a price (use flip_meas_dist in rules) | index points | the measured-book zero-gamma price | measured | flip_meas_dist abs<= 5 (prefer the distance) |
flip_meas_dist | spot - the MEASURED-book flip, points (+ = above it) | points, signed | spot − measured-book flip; + above | measured | flip_meas_dist abs<= 5 |
flip_oi_dist | spot - the OPEN-INTEREST-book flip, points (+ = above it) | points, signed | spot − open-interest-book flip; + above | open interest | flip_oi_dist abs<= 10 |
gamma_pos_vol | 1 when spot is at or above the VOLUME-book flip (long gamma), 0 below | flag | 1 at or above the volume flip, 0 below | volume | gamma_pos_vol >= 1 |
gamma_pos_meas | 1 when spot is at or above the MEASURED-book flip, 0 below | flag | 1 at or above the measured flip, 0 below | measured | gamma_pos_meas >= 1 |
call_wall_vol_dist | spot - the VOLUME-book call wall (the 0DTE strike with the most positive gamma), points (+ = above it) | points, signed | spot − volume-book call wall | volume | call_wall_vol_dist abs<= 5 |
put_wall_vol_dist | spot - the VOLUME-book put wall (the 0DTE strike with the most negative gamma), points (+ = above it) | points, signed | spot − volume-book put wall | volume | put_wall_vol_dist abs<= 5 |
call_wall_meas_dist | spot - the MEASURED-book call wall, points (+ = above it) | points, signed | spot − measured-book call wall | measured | call_wall_meas_dist abs<= 5 |
put_wall_meas_dist | spot - the MEASURED-book put wall, points (+ = above it) | points, signed | spot − measured-book put wall | measured | put_wall_meas_dist abs<= 5 |
call_wall_oi_dist | spot - the OPEN-INTEREST-book call wall at 0DTE, points (+ = above it) | points, signed | spot − OI-book call wall at 0DTE | open interest | call_wall_oi_dist abs<= 5 |
put_wall_oi_dist | spot - the OPEN-INTEREST-book put wall at 0DTE, points (+ = above it) | points, signed | spot − OI-book put wall at 0DTE | open interest | put_wall_oi_dist abs<= 5 |
call_wall_strength_vol | 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 | 0 … 1 of the near 0DTE volume book on that strike | volume | call_wall_strength_vol >= 0.2 |
put_wall_strength_vol | same for the VOLUME-book put wall, 0..1 | share | 0 … 1 | volume | put_wall_strength_vol >= 0.2 |
call_wall_strength_meas | share of the near-money MEASURED book on the measured call wall's strike, 0..1 | share | 0 … 1 of the near measured book on that strike | measured | call_wall_strength_meas >= 0.3 |
put_wall_strength_meas | same for the MEASURED-book put wall, 0..1 | share | 0 … 1 | measured | put_wall_strength_meas >= 0.3 |
call_wall_agree | 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 | 1 … 3 books on the same call wall; ≥ 2 in 45.5% of minutes, 3 in 7.1% | all three | call_wall_agree >= 2 |
put_wall_agree | same for the put wall: two or more books agree in 29.9% of minutes, all three in 1.8% | count | 1 … 3; ≥ 2 in 29.9% of minutes, 3 in 1.8% | all three | put_wall_agree >= 2 |
call_wall_agree_dist | spot - the call wall the most books name, points (+ = above it) | points, signed | spot − the call wall most books name | all three | call_wall_agree_dist abs<= 5 |
put_wall_agree_dist | spot - the put wall the most books name, points (+ = above it) | points, signed | spot − the put wall most books name | all three | put_wall_agree_dist abs<= 5 |
The dealer book and its flow
Net exposures at spot and how fast they are changing, per book. Level columns are the state; *_flow, max_change_* and total_change_* columns are what moved in the last minutes. Delta, vega, charm and vanna exist in the measured book only.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
net_gamma_vol | net gamma at spot, VOLUME book, $M -- 'how much gamma' unqualified | $M | net gamma at spot, signed | volume | net_gamma_vol <= 0 |
net_gamma_meas | net gamma at spot, MEASURED (tape-signed) book, $M | $M | net gamma at spot, signed | measured | net_gamma_meas <= 0 |
net_gamma_oi | net gamma at spot, call-minus-put OPEN-INTEREST book over four expiries, $M (not comparable with the 0DTE books' level) | $M | net gamma at spot, signed, four expiries | open interest | net_gamma_oi >= 0 |
net_gamma_meas_minus_oi | 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 | net_gamma_meas − net_gamma_oi | measured − open interest | net_gamma_meas_minus_oi abs>= 50 |
net_gamma_vol_flow | 1-minute change of net_gamma_vol, $M per minute -- 'gamma flow' unqualified | $M per minute | 1-minute change of net_gamma_vol | volume | net_gamma_vol_flow abs_top_pctl 0.9 |
net_gamma_meas_flow | 1-minute change of net_gamma_meas, $M per minute | $M per minute | 1-minute change of net_gamma_meas | measured | net_gamma_meas_flow abs_top_pctl 0.9 |
gamma_pctl_vol | 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 | 0 … 100 vs the same minute of the prior 20 sessions | volume | gamma_pctl_vol <= 20 |
gamma_pctl_meas | net_gamma_meas ranked against the same minute of the prior 20 sessions, 0..100 | percentile | 0 … 100 vs the same minute of the prior 20 sessions | measured | gamma_pctl_meas <= 20 |
dealer_delta_meas | dealer delta exposure, MEASURED book, millions of SPX units of delta; + = dealers long delta. No volume-book twin | M SPX units of delta | signed; + = dealers long delta | measured | dealer_delta_meas <= 0 |
dealer_vega_meas | dealer vega exposure, MEASURED book, $M per vol point. No volume-book twin | $M per vol point | signed | measured | dealer_vega_meas abs_top_pctl 0.9 |
charm_meas | charm pressure, MEASURED book: the dollar delta the book sheds per day from time decay alone, $Bn per day | $Bn of delta per day | signed | measured | charm_meas <= 0 |
vanna_meas | 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 | signed | measured | vanna_meas abs_top_pctl 0.9 |
dealer_delta_meas_flow | 1-minute change of dealer_delta_meas, millions of SPX units | M SPX units per minute | 1-minute change of dealer_delta_meas | measured | dealer_delta_meas_flow abs_top_pctl 0.9 |
dealer_vega_meas_flow | 1-minute change of dealer_vega_meas, $M per vol point | $M per vol point, per minute | 1-minute change of dealer_vega_meas | measured | dealer_vega_meas_flow >= 0 |
charm_meas_flow | 1-minute change of charm_meas, $Bn per day | $Bn per day, per minute | 1-minute change of charm_meas | measured | charm_meas_flow <= 0 |
max_change_5_meas | 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 | largest single-strike gamma change over 5 min | measured | max_change_5_meas abs_top_pctl 0.9 |
max_change_15_meas | the same over 15 min, $M | $M, signed | over 15 min | measured | max_change_15_meas abs_top_pctl 0.9 |
max_change_30_meas | the same over 30 min, $M | $M, signed | over 30 min | measured | max_change_30_meas abs_top_pctl 0.9 |
total_change_15_vol | sum over strikes of |gamma change| of the 0DTE VOLUME book against 15 minutes earlier, $M -- 'book being rebuilt / flow velocity' unqualified | $M | sum of |gamma change| over strikes, 15 min, 0DTE | volume | total_change_15_vol top_pctl 0.9 |
concentration_vol | 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 | 0 … 1; high = a few strikes hold it | volume | concentration_vol >= 0.15 |
concentration_meas | the same Herfindahl on the MEASURED book, 0..1 | Herfindahl | 0 … 1; high = a few strikes hold it | measured | concentration_meas >= 0.3 |
The unsigned book (GROSS)
|gamma| × open interest per strike, calls and puts summed, no side assigned: how much convexity there is and where it sits. The two-sided measured book alongside it. The open-interest book's scope follows book_width: 3 expiries on a narrow session, 21 on a widened one.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
gross_oi_total | 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 | sum over the near-money window | unsigned OI | gross_oi_total top_pctl 0.8 |
gross_oi_at_spot | the unsigned OI book on the strike nearest spot, $M/pt | $M/pt | the strike nearest spot | unsigned OI | gross_oi_at_spot >= 100 |
gross_oi_above | the heaviest unsigned OI strike ABOVE spot, $M/pt | $M/pt | heaviest strike above spot | unsigned OI | gross_oi_above >= 150 |
gross_oi_below | the heaviest unsigned OI strike BELOW spot, $M/pt | $M/pt | heaviest strike below spot | unsigned OI | gross_oi_below >= 150 |
gross_oi_above_dist | points from spot up to that heaviest strike above, always positive | points, always positive | distance to gross_oi_above | unsigned OI | gross_oi_above_dist <= 5 |
gross_oi_below_dist | points from spot down to the heaviest strike below, always positive | points, always positive | distance to gross_oi_below | unsigned OI | gross_oi_below_dist <= 5 |
gross_oi_near_share | share of the unsigned OI book within +-10 pt of spot, 0..1 -- how much convexity sits on top of price | share | 0 … 1 within ±10 pt of spot | unsigned OI | gross_oi_near_share >= 0.5 |
gross_oi_top3_share | share of the unsigned OI book on its three heaviest strikes, 0..1 | share | 0 … 1 on the three heaviest strikes | unsigned OI | gross_oi_top3_share >= 0.6 |
abs_gamma_meas_over_gross_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 | 0 … 1; low = the sides cancel | measured ÷ unsigned OI | abs_gamma_meas_over_gross_oi <= 0.15 |
abs_gamma_below_meas | sum |measured gamma| on strikes within 30 pt BELOW spot, $M/pt | $M/pt | sum |measured γ| within 30 pt below spot | measured | abs_gamma_below_meas >= 50 |
abs_gamma_above_meas | the same within 30 pt ABOVE spot, $M/pt | $M/pt | sum |measured γ| within 30 pt above spot | measured | abs_gamma_above_meas >= 50 |
abs_gamma_below_meas_chg15 | change of abs_gamma_below_meas against the frame 15 min earlier (negative = the book below thinned) | $M/pt, signed | change over 15 min | measured | abs_gamma_below_meas_chg15 <= -20 |
abs_gamma_above_meas_chg15 | change of abs_gamma_above_meas over 15 min (positive = the book above thickened) | $M/pt, signed | change over 15 min | measured | abs_gamma_above_meas_chg15 >= 20 |
abs_gamma_below_meas_chg30 | change of abs_gamma_below_meas over 30 min | $M/pt, signed | change over 30 min | measured | abs_gamma_below_meas_chg30 <= -20 |
abs_gamma_above_meas_chg30 | change of abs_gamma_above_meas over 30 min | $M/pt, signed | change over 30 min | measured | abs_gamma_above_meas_chg30 >= 20 |
The expiry split
Today's 0DTE against everything that survives it, per book. Only sessions archived since the wide book carry it; earlier days are NaN and never match.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
gamma_0dte_vol | VOLUME-book gamma, today's expiry only ($M) | $M | today's expiry | volume | gamma_0dte_vol <= 0 |
gamma_next_vol | VOLUME-book gamma past today ($M) | $M | surviving book | volume | gamma_next_vol >= 0 |
gamma_next_share_vol | share of the VOLUME book that outlives today (0..1) | share | 0 … 1 | volume | gamma_next_share_vol >= 0.6 |
gamma_0dte_meas | MEASURED gamma, today's expiry only ($M) | $M | today's expiry | measured | gamma_0dte_meas <= 0 |
gamma_next_meas | MEASURED gamma past today -- the book that survives the close ($M) | $M | the book that survives today | measured | gamma_next_meas >= 0 |
gamma_next_share_meas | share of the MEASURED book that outlives today (0..1) | share | 0 … 1 | measured | gamma_next_share_meas >= 0.6 |
gamma_0dte_oi | OPEN-INTEREST gamma, today's expiry only ($M) | $M | today's expiry | open interest | gamma_0dte_oi <= 0 |
gamma_next_oi | OPEN-INTEREST gamma past today ($M) | $M | surviving book | open interest | gamma_next_oi >= 0 |
gamma_next_share_oi | share of the OI book that outlives today (0..1) -- the OI book is roughly half next-expiry, so this one really moves | share | 0 … 1 | open interest | gamma_next_share_oi >= 0.6 |
book_width | 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 | 3 on a narrow session, 21 on a widened one (from 2026-08-24) | volume and OI scope | book_width >= 21 |
Implied and realised volatility
The 0DTE ATM implied vol and straddle, skew, FirmTape's range forecast, and realised against implied over three windows. ATM IV and the realised measures run on the trading clock (390 minutes × 252 days), skew on the calendar clock.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
atm_iv | 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) | 0DTE at-the-money, from the straddle | atm_iv top_pctl 0.9 | |
atm_iv_chg1 | 1-minute change of atm_iv, vol points | vol points per minute | signed | atm_iv_chg1 >= 0.5 | |
atm_iv_chg30 | 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 | atm_iv now − 30 min ago | atm_iv_chg30 >= 2 | |
straddle | the 0DTE ATM straddle price, index points: the market's expected absolute move to the close | index points | the 0DTE ATM straddle | straddle >= 30 | |
straddle_pct | the ATM straddle as a % of spot -- the expected move, comparable across days | % of spot | the expected move | straddle_pct >= 0.6 | |
em_used | |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 − open| ÷ the opening expected move (2 × straddle); > 1 = CHOP | em_used >= 1 | |
range_left_fcst | 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 | FirmTape's forecast of the range left to the close (rv30-based, adjusted by net_gamma_meas); not implied | measured (adjustment) | range_left_fcst >= 40 |
range_ratio_15 | 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 | realised ÷ implied range, 15 min | range_ratio_15 >= 1.5 | |
range_ratio_30 | the same realised/implied RANGE ratio over 30 min -- the strongest single forecast of the next 30 min's range this programme found | ratio | realised ÷ implied range, 30 min | range_ratio_30 <= 0.7 | |
range_ratio_60 | the same realised/implied RANGE ratio over 60 min | ratio | realised ÷ implied range, 60 min | range_ratio_60 >= 1.2 | |
rv30_over_atm_iv | 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 | 30-min realised vol ÷ atm_iv, both trading clock; > 1 = straddle cheap | rv30_over_atm_iv >= 1.2 | |
skew_25d | 25-delta put IV minus 25-delta call IV, vol points (calendar clock) | vol points (calendar clock) | 25Δ put − call IV | skew_25d top_pctl 0.9 | |
skew_25d_ratio | 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 | put IV over call IV minus one; ≈ −2 … 25, median ≈ 10. NOT a 0…1 percentile | skew_25d_ratio >= 15 | |
skew_25d_chg1 | 1-minute change of skew_25d, vol points | vol points per minute | signed | skew_25d_chg1 >= 0.2 |
Volume
Contracts printed across the whole 0DTE chain per minute, and its rank against the same minute of the prior 20 sessions.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
volume | 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 | whole 0DTE chain; older sessions: 5-minute increments spread per minute | volume_pctl >= 0.9 (rank it, do not threshold contracts) | |
volume_pctl | 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 | 0 … 1 against the same minute of the prior 20 sessions | volume_pctl >= 0.9 | |
volume_snap | 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 | the snapshot's own series; 5-minute increments spread per minute on older sessions | volume_snap >= 1000 |
The market calendar
The scheduled-event context of the session, from the same calendar the terminal draws: day flags for FOMC, CPI, payrolls, PCE, ISM, earnings and opex, and two clocks to the nearest in-session event.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
ev_high_impact | 1 on a day with a high-impact release: FOMC, CPI, payrolls or PCE; else 0 | flag | 1 on FOMC, CPI, payrolls or PCE days | ev_high_impact >= 1 | |
ev_fomc | 1 on an FOMC decision day (statement 14:00, press conference 14:30) | flag | 1 on a decision day | ev_fomc >= 1 | |
ev_cpi | 1 on a CPI day (08:30, before the open) | flag | 1 on a CPI day | ev_cpi >= 1 | |
ev_payrolls | 1 on a payrolls day (08:30, before the open) | flag | 1 on a payrolls day | ev_payrolls >= 1 | |
ev_pce | 1 on a PCE inflation day (08:30, before the open) | flag | 1 on a PCE day | ev_pce >= 1 | |
ev_ism | 1 on an ISM day, manufacturing or services (10:00, inside the session) | flag | 1 on an ISM day | ev_ism >= 1 | |
ev_earnings | 1 when a mega-cap (NVDA, AAPL, MSFT, ...) reports today, before the open or after the close | flag | 1 when a mega-cap reports | ev_earnings >= 1 | |
ev_opex | 1 on a monthly or quarterly options expiration day | flag | 1 on monthly / quarterly expiration | ev_opex >= 1 | |
ev_pre_open | 1 if a high/medium release came out before 09:30, so the session already trades AFTER the number | flag | 1 if a release came out before 09:30 | ev_pre_open >= 1 | |
ev_minutes_to | 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 | to the next in-session event; NaN if none | ev_minutes_to between [30, 90] | |
ev_minutes_since | minutes since the last scheduled event inside the session; NaN before the first one | minutes | since the last in-session event; NaN before it | ev_minutes_since <= 15 | |
ev_opex_quarterly | 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 | 1 on the quarterly third Friday: options, futures and rebalances together (about 4 days a year) | ev_opex_quarterly >= 1 | |
ev_expiry_stack | 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 | 1 when two or more expiry-class events share the date | ev_expiry_stack >= 1 | |
ev_quarter_end | 1 on the last session of a quarter, the SPX quarter-end expiry. About 4 days a year | flag | 1 on the last session of a quarter (about 4 days a year) | ev_quarter_end >= 1 | |
ev_month_end | 1 on the last session of a month, quarter-ends included | flag | 1 on the last session of a month | ev_month_end >= 1 | |
ev_vix_week | 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 | 1 all week when the monthly VIX settlement falls in it | ev_vix_week >= 1 | |
ev_futures_roll | 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 | 1 on the ES and NQ futures roll Thursday (about 4 days a year) | ev_futures_roll >= 1 | |
ev_leaps | 1 on the January third Friday, when the long-dated LEAPS cycle expires. One day a year | flag | 1 on the January third Friday, the LEAPS expiry (one day a year) | ev_leaps >= 1 | |
days_to_opex | weekdays left to the next third-Friday options expiration, 0 on the day itself, up to about 24; holidays count as weekdays | weekdays | 0 … 24 to the next third-Friday expiration, 0 on the day | days_to_opex <= 2 |
The minutes the tape marked (PULSE)
The tape's own marks, from the same detector the terminal draws: a one-minute index move of 4 sigma of the trailing half hour, or 3 with the dealer book moving too. A clock since the last such minute, its size, whether a public desks' flash or a calendar release sat beside it, and the running count. History carries book and calendar marks only; the flash flag exists from 2026-09-10.
| column | what it is | unit | range | book | a condition that uses it |
|---|---|---|---|---|---|
pulse_minutes_since | 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 | since the last minute the tape itself marked (a 4σ one-minute move, or 3σ with the book moving); NaN before the first | pulse_minutes_since <= 5 | |
pulse_z | the spot z-score of that last marked minute, in sigmas of the trailing half hour; NaN before the first | sigma | the spot z-score of that last marked minute; NaN before the first | pulse_z >= 5 | |
pulse_flash | 1 if that marked minute had two or more public news desks flashing beside it (a headline-driven move), else 0 | flag | 1 if that marked minute had two or more public desks flashing beside it | pulse_flash >= 1 | |
pulse_book | 1 if that marked minute had no headline and no calendar event, the dealer book moved on its own; else 0 | flag | 1 if that marked minute had no headline and no calendar event: the book moved alone | pulse_book >= 1 | |
pulse_count | how many tape-marked minutes the session has had so far; 0 before the first | count | tape-marked minutes so far in the session; 0 before the first | pulse_count >= 3 |
Renamed on 2026-10-03
Every column was given a name that says what it is and which book it reads. The old names are not accepted any more: a rule that uses one is refused with its new name in the error, and the ideas saved before the change were moved to the new names.
| old name | new name |
|---|---|
mins_left | minutes_to_close |
vwap | spot_mean |
vwap_dist | spot_mean_dist |
vwap_sigma | spot_sd |
vwap_z | spot_mean_z |
b2u | spot_mean_up2 |
b2l | spot_mean_dn2 |
candle_delta | ret1 |
flip | flip_meas |
flip_dist | flip_meas_dist |
flip_volcp_dist | flip_vol_dist |
flip_struct_dist | flip_oi_dist |
gamma_pos | gamma_pos_meas |
cr0_dist | call_wall_meas_dist |
ps0_dist | put_wall_meas_dist |
cr0_volcp_dist | call_wall_vol_dist |
ps0_volcp_dist | put_wall_vol_dist |
cr0_oi_dist | call_wall_oi_dist |
ps0_oi_dist | put_wall_oi_dist |
cr0_strength | call_wall_strength_meas |
ps0_strength | put_wall_strength_meas |
cw_agree | call_wall_agree |
pw_agree | put_wall_agree |
cw_agree_dist | call_wall_agree_dist |
pw_agree_dist | put_wall_agree_dist |
dex | dealer_delta_meas |
dealer_dex | dealer_delta_meas |
vex | dealer_vega_meas |
charm | charm_meas |
vanna | vanna_meas |
dex_flow | dealer_delta_meas_flow |
vex_flow | dealer_vega_meas_flow |
charm_flow | charm_meas_flow |
gpct | gamma_pctl_meas |
ngv_meas | net_gamma_meas |
ngv_conv | net_gamma_oi |
ngv_volcp | net_gamma_vol |
meas_conv_div | net_gamma_meas_minus_oi |
dgamma_flow | net_gamma_meas_flow |
mc5 | max_change_5_meas |
mc15 | max_change_15_meas |
mc30 | max_change_30_meas |
concentration | concentration_meas |
gross_total | gross_oi_total |
gross_at_spot | gross_oi_at_spot |
gross_up | gross_oi_above |
gross_dn | gross_oi_below |
gross_up_dist | gross_oi_above_dist |
gross_dn_dist | gross_oi_below_dist |
gross_near_share | gross_oi_near_share |
gross_top3_share | gross_oi_top3_share |
signed_over_gross | abs_gamma_meas_over_gross_oi |
meas_below | abs_gamma_below_meas |
meas_above | abs_gamma_above_meas |
meas_below_chg15 | abs_gamma_below_meas_chg15 |
meas_above_chg15 | abs_gamma_above_meas_chg15 |
meas_below_chg30 | abs_gamma_below_meas_chg30 |
meas_above_chg30 | abs_gamma_above_meas_chg30 |
gam_0dte | gamma_0dte_meas |
gam_next | gamma_next_meas |
gam_next_share | gamma_next_share_meas |
gam_vol_0dte | gamma_0dte_vol |
gam_vol_next | gamma_next_vol |
gam_vol_next_share | gamma_next_share_vol |
gam_oi_0dte | gamma_0dte_oi |
gam_oi_next | gamma_next_oi |
gam_oi_next_share | gamma_next_share_oi |
atmiv | atm_iv |
atmiv_chg | atm_iv_chg1 |
div30 | atm_iv_chg30 |
exp_range | range_left_fcst |
rvi15 | range_ratio_15 |
rvi30 | range_ratio_30 |
rvi60 | range_ratio_60 |
skew | skew_25d |
skewpct | skew_25d_ratio |
skew_chg | skew_25d_chg1 |
vol | volume |
vol_pctl | volume_pctl |
vol_snap | volume_snap |
ev_high | ev_high_impact |
ev_nfp | ev_payrolls |
ev_earn | ev_earnings |
ev_mins_to | ev_minutes_to |
ev_mins_since | ev_minutes_since |
ev_opex_q | ev_opex_quarterly |
ev_exp_stack | ev_expiry_stack |
ev_qend | ev_quarter_end |
ev_eom | ev_month_end |
ev_roll | ev_futures_roll |
pu_mins_since | pulse_minutes_since |
pu_z | pulse_z |
pu_flash | pulse_flash |
pu_book | pulse_book |
pu_count | pulse_count |
Retired
| column | why |
|---|---|
hold_lo | the hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin |
hold_hi | the hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin |
hold_lo_dist | the hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin |
hold_hi_dist | the hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin |
vrp_ratio | it divided a range ratio by an implied vol and was retired on 2026-10-03; use rv30_over_atm_iv |
range_used | it divided the distance from the running mean by a forecast of the range LEFT and was retired on 2026-10-03; use em_used |