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

operatormeaning
>= <= > <compare with a number
abs>= abs<=compare the magnitude, sign ignored: distances, flows, changes
betweeninside [lo, hi], inclusive; [300, 300] is one exact minute
top_pctl abs_top_pctlin 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.

columnwhat it isunitrangebooka condition that uses it
minminutes since the 09:30 open (0-389)minutes since 09:300 … 389min between [300, 330]
minutes_to_closeminutes left to the session's last minute: 15:59 on a full day, 12:59 on a half dayminutes to the last minute389 … 0; to 12:59 on a half dayminutes_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.

columnwhat it isunitrangebooka condition that uses it
spotSPX spot priceindex pointsthe SPX levelspot >= 5000
spot_meanthe running mean of spot since the open (an equal-weight mean of minute prices; NOT a VWAP, no volume weights it)index pointsrunning mean of spot since the open (not volume-weighted)spot_mean_z >= 2 (prefer the z-score)
spot_mean_distspot - spot_mean, pointspoints, signedspot − spot_mean; negative belowspot_mean_dist >= 10
spot_sdone running standard deviation of spot since the open, points (the half-width of the band over 2)pointsone running SD of spot, > 0spot_sd <= 4
spot_mean_zspot's distance from its running mean in running SDs (+3 = stretched 3 SD above). The 'sigma stretch' of the chart's bandrunning SDs, signedtypically −4 … +4spot_mean_z >= 3
spot_mean_up2the band's upper edge, spot_mean + 2 running SDs, priceindex pointsspot_mean + 2 running SDsspot_mean_z >= 2 (prefer the z-score)
spot_mean_dn2the band's lower edge, spot_mean - 2 running SDs, priceindex pointsspot_mean − 2 running SDsspot_mean_z <= -2
ret1spot now minus spot one minute ago, points (the last 1-minute candle's move)points, signedspot now − 1 min agoret1 abs>= 5
ret15spot now minus spot 15 minutes ago, index points (the move just made; positive = drifted up)points, signedspot now − 15 min agoret15 <= -3
ret30spot now minus spot 30 minutes ago, index pointspoints, signedspot now − 30 min agoret30 abs>= 10
rv_1mintra-minute realised vol from the per-second spot, annualised in % -- comparable to atm_iv; a choppy vs smooth minuteannualised %intra-minute realised volrv_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.

columnwhat it isunitrangebooka condition that uses it
flip_vol_distspot - the VOLUME-book zero-gamma flip, points (+ = above it, the positive-gamma side): THE flip, the one the chart drawspoints, signedspot − volume-book flip; + abovevolumeflip_vol_dist abs<= 5
flip_measthe MEASURED-book zero-gamma flip as a price (use flip_meas_dist in rules)index pointsthe measured-book zero-gamma pricemeasuredflip_meas_dist abs<= 5 (prefer the distance)
flip_meas_distspot - the MEASURED-book flip, points (+ = above it)points, signedspot − measured-book flip; + abovemeasuredflip_meas_dist abs<= 5
flip_oi_distspot - the OPEN-INTEREST-book flip, points (+ = above it)points, signedspot − open-interest-book flip; + aboveopen interestflip_oi_dist abs<= 10
gamma_pos_vol1 when spot is at or above the VOLUME-book flip (long gamma), 0 belowflag1 at or above the volume flip, 0 belowvolumegamma_pos_vol >= 1
gamma_pos_meas1 when spot is at or above the MEASURED-book flip, 0 belowflag1 at or above the measured flip, 0 belowmeasuredgamma_pos_meas >= 1
call_wall_vol_distspot - the VOLUME-book call wall (the 0DTE strike with the most positive gamma), points (+ = above it)points, signedspot − volume-book call wallvolumecall_wall_vol_dist abs<= 5
put_wall_vol_distspot - the VOLUME-book put wall (the 0DTE strike with the most negative gamma), points (+ = above it)points, signedspot − volume-book put wallvolumeput_wall_vol_dist abs<= 5
call_wall_meas_distspot - the MEASURED-book call wall, points (+ = above it)points, signedspot − measured-book call wallmeasuredcall_wall_meas_dist abs<= 5
put_wall_meas_distspot - the MEASURED-book put wall, points (+ = above it)points, signedspot − measured-book put wallmeasuredput_wall_meas_dist abs<= 5
call_wall_oi_distspot - the OPEN-INTEREST-book call wall at 0DTE, points (+ = above it)points, signedspot − OI-book call wall at 0DTEopen interestcall_wall_oi_dist abs<= 5
put_wall_oi_distspot - the OPEN-INTEREST-book put wall at 0DTE, points (+ = above it)points, signedspot − OI-book put wall at 0DTEopen interestput_wall_oi_dist abs<= 5
call_wall_strength_volshare 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 noneshare0 … 1 of the near 0DTE volume book on that strikevolumecall_wall_strength_vol >= 0.2
put_wall_strength_volsame for the VOLUME-book put wall, 0..1share0 … 1volumeput_wall_strength_vol >= 0.2
call_wall_strength_measshare of the near-money MEASURED book on the measured call wall's strike, 0..1share0 … 1 of the near measured book on that strikemeasuredcall_wall_strength_meas >= 0.3
put_wall_strength_meassame for the MEASURED-book put wall, 0..1share0 … 1measuredput_wall_strength_meas >= 0.3
call_wall_agreehow 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)count1 … 3 books on the same call wall; ≥ 2 in 45.5% of minutes, 3 in 7.1%all threecall_wall_agree >= 2
put_wall_agreesame for the put wall: two or more books agree in 29.9% of minutes, all three in 1.8%count1 … 3; ≥ 2 in 29.9% of minutes, 3 in 1.8%all threeput_wall_agree >= 2
call_wall_agree_distspot - the call wall the most books name, points (+ = above it)points, signedspot − the call wall most books nameall threecall_wall_agree_dist abs<= 5
put_wall_agree_distspot - the put wall the most books name, points (+ = above it)points, signedspot − the put wall most books nameall threeput_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.

columnwhat it isunitrangebooka condition that uses it
net_gamma_volnet gamma at spot, VOLUME book, $M -- 'how much gamma' unqualified$Mnet gamma at spot, signedvolumenet_gamma_vol <= 0
net_gamma_measnet gamma at spot, MEASURED (tape-signed) book, $M$Mnet gamma at spot, signedmeasurednet_gamma_meas <= 0
net_gamma_oinet gamma at spot, call-minus-put OPEN-INTEREST book over four expiries, $M (not comparable with the 0DTE books' level)$Mnet gamma at spot, signed, four expiriesopen interestnet_gamma_oi >= 0
net_gamma_meas_minus_oinet_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$Mnet_gamma_meas − net_gamma_oimeasured − open interestnet_gamma_meas_minus_oi abs>= 50
net_gamma_vol_flow1-minute change of net_gamma_vol, $M per minute -- 'gamma flow' unqualified$M per minute1-minute change of net_gamma_volvolumenet_gamma_vol_flow abs_top_pctl 0.9
net_gamma_meas_flow1-minute change of net_gamma_meas, $M per minute$M per minute1-minute change of net_gamma_measmeasurednet_gamma_meas_flow abs_top_pctl 0.9
gamma_pctl_volnet_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 medianpercentile0 … 100 vs the same minute of the prior 20 sessionsvolumegamma_pctl_vol <= 20
gamma_pctl_measnet_gamma_meas ranked against the same minute of the prior 20 sessions, 0..100percentile0 … 100 vs the same minute of the prior 20 sessionsmeasuredgamma_pctl_meas <= 20
dealer_delta_measdealer delta exposure, MEASURED book, millions of SPX units of delta; + = dealers long delta. No volume-book twinM SPX units of deltasigned; + = dealers long deltameasureddealer_delta_meas <= 0
dealer_vega_measdealer vega exposure, MEASURED book, $M per vol point. No volume-book twin$M per vol pointsignedmeasureddealer_vega_meas abs_top_pctl 0.9
charm_meascharm pressure, MEASURED book: the dollar delta the book sheds per day from time decay alone, $Bn per day$Bn of delta per daysignedmeasuredcharm_meas <= 0
vanna_measvanna pressure, MEASURED book: the dollar delta the book gains per 1 vol point of IV, $M per vol point$M of delta per vol pointsignedmeasuredvanna_meas abs_top_pctl 0.9
dealer_delta_meas_flow1-minute change of dealer_delta_meas, millions of SPX unitsM SPX units per minute1-minute change of dealer_delta_measmeasureddealer_delta_meas_flow abs_top_pctl 0.9
dealer_vega_meas_flow1-minute change of dealer_vega_meas, $M per vol point$M per vol point, per minute1-minute change of dealer_vega_measmeasureddealer_vega_meas_flow >= 0
charm_meas_flow1-minute change of charm_meas, $Bn per day$Bn per day, per minute1-minute change of charm_measmeasuredcharm_meas_flow <= 0
max_change_5_measthe largest single-strike gamma change of the MEASURED ladder over the last 5 min, $M, signed -- how hard the busiest strike just moved$M, signedlargest single-strike gamma change over 5 minmeasuredmax_change_5_meas abs_top_pctl 0.9
max_change_15_measthe same over 15 min, $M$M, signedover 15 minmeasuredmax_change_15_meas abs_top_pctl 0.9
max_change_30_measthe same over 30 min, $M$M, signedover 30 minmeasuredmax_change_30_meas abs_top_pctl 0.9
total_change_15_volsum over strikes of |gamma change| of the 0DTE VOLUME book against 15 minutes earlier, $M -- 'book being rebuilt / flow velocity' unqualified$Msum of |gamma change| over strikes, 15 min, 0DTEvolumetotal_change_15_vol top_pctl 0.9
concentration_volHerfindahl 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' unqualifiedHerfindahl0 … 1; high = a few strikes hold itvolumeconcentration_vol >= 0.15
concentration_measthe same Herfindahl on the MEASURED book, 0..1Herfindahl0 … 1; high = a few strikes hold itmeasuredconcentration_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.

columnwhat it isunitrangebooka condition that uses it
gross_oi_totalsum 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/ptsum over the near-money windowunsigned OIgross_oi_total top_pctl 0.8
gross_oi_at_spotthe unsigned OI book on the strike nearest spot, $M/pt$M/ptthe strike nearest spotunsigned OIgross_oi_at_spot >= 100
gross_oi_abovethe heaviest unsigned OI strike ABOVE spot, $M/pt$M/ptheaviest strike above spotunsigned OIgross_oi_above >= 150
gross_oi_belowthe heaviest unsigned OI strike BELOW spot, $M/pt$M/ptheaviest strike below spotunsigned OIgross_oi_below >= 150
gross_oi_above_distpoints from spot up to that heaviest strike above, always positivepoints, always positivedistance to gross_oi_aboveunsigned OIgross_oi_above_dist <= 5
gross_oi_below_distpoints from spot down to the heaviest strike below, always positivepoints, always positivedistance to gross_oi_belowunsigned OIgross_oi_below_dist <= 5
gross_oi_near_shareshare of the unsigned OI book within +-10 pt of spot, 0..1 -- how much convexity sits on top of priceshare0 … 1 within ±10 pt of spotunsigned OIgross_oi_near_share >= 0.5
gross_oi_top3_shareshare of the unsigned OI book on its three heaviest strikes, 0..1share0 … 1 on the three heaviest strikesunsigned OIgross_oi_top3_share >= 0.6
abs_gamma_meas_over_gross_oisum |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_widthratio0 … 1; low = the sides cancelmeasured ÷ unsigned OIabs_gamma_meas_over_gross_oi <= 0.15
abs_gamma_below_meassum |measured gamma| on strikes within 30 pt BELOW spot, $M/pt$M/ptsum |measured γ| within 30 pt below spotmeasuredabs_gamma_below_meas >= 50
abs_gamma_above_measthe same within 30 pt ABOVE spot, $M/pt$M/ptsum |measured γ| within 30 pt above spotmeasuredabs_gamma_above_meas >= 50
abs_gamma_below_meas_chg15change of abs_gamma_below_meas against the frame 15 min earlier (negative = the book below thinned)$M/pt, signedchange over 15 minmeasuredabs_gamma_below_meas_chg15 <= -20
abs_gamma_above_meas_chg15change of abs_gamma_above_meas over 15 min (positive = the book above thickened)$M/pt, signedchange over 15 minmeasuredabs_gamma_above_meas_chg15 >= 20
abs_gamma_below_meas_chg30change of abs_gamma_below_meas over 30 min$M/pt, signedchange over 30 minmeasuredabs_gamma_below_meas_chg30 <= -20
abs_gamma_above_meas_chg30change of abs_gamma_above_meas over 30 min$M/pt, signedchange over 30 minmeasuredabs_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.

columnwhat it isunitrangebooka condition that uses it
gamma_0dte_volVOLUME-book gamma, today's expiry only ($M)$Mtoday's expiryvolumegamma_0dte_vol <= 0
gamma_next_volVOLUME-book gamma past today ($M)$Msurviving bookvolumegamma_next_vol >= 0
gamma_next_share_volshare of the VOLUME book that outlives today (0..1)share0 … 1volumegamma_next_share_vol >= 0.6
gamma_0dte_measMEASURED gamma, today's expiry only ($M)$Mtoday's expirymeasuredgamma_0dte_meas <= 0
gamma_next_measMEASURED gamma past today -- the book that survives the close ($M)$Mthe book that survives todaymeasuredgamma_next_meas >= 0
gamma_next_share_measshare of the MEASURED book that outlives today (0..1)share0 … 1measuredgamma_next_share_meas >= 0.6
gamma_0dte_oiOPEN-INTEREST gamma, today's expiry only ($M)$Mtoday's expiryopen interestgamma_0dte_oi <= 0
gamma_next_oiOPEN-INTEREST gamma past today ($M)$Msurviving bookopen interestgamma_next_oi >= 0
gamma_next_share_oishare of the OI book that outlives today (0..1) -- the OI book is roughly half next-expiry, so this one really movesshare0 … 1open interestgamma_next_share_oi >= 0.6
book_widthhow 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 conditioncount3 on a narrow session, 21 on a widened one (from 2026-08-24)volume and OI scopebook_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.

columnwhat it isunitrangebooka condition that uses it
atm_iv0DTE 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 clockIV, % (trading clock)0DTE at-the-money, from the straddleatm_iv top_pctl 0.9
atm_iv_chg11-minute change of atm_iv, vol pointsvol points per minutesignedatm_iv_chg1 >= 0.5
atm_iv_chg30atm_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 windowvol pointsatm_iv now − 30 min agoatm_iv_chg30 >= 2
straddlethe 0DTE ATM straddle price, index points: the market's expected absolute move to the closeindex pointsthe 0DTE ATM straddlestraddle >= 30
straddle_pctthe ATM straddle as a % of spot -- the expected move, comparable across days% of spotthe expected movestraddle_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 CHOPratio|spot − open| ÷ the opening expected move (2 × straddle); > 1 = CHOPem_used >= 1
range_left_fcstFirmTape'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 numberindex pointsFirmTape's forecast of the range left to the close (rv30-based, adjusted by net_gamma_meas); not impliedmeasured (adjustment)range_left_fcst >= 40
range_ratio_15realised RANGE over the last 15 min (per-second high minus low) / the range the straddle implies for 15 min; > 1 = moving more than pricedratiorealised ÷ implied range, 15 minrange_ratio_15 >= 1.5
range_ratio_30the same realised/implied RANGE ratio over 30 min -- the strongest single forecast of the next 30 min's range this programme foundratiorealised ÷ implied range, 30 minrange_ratio_30 <= 0.7
range_ratio_60the same realised/implied RANGE ratio over 60 minratiorealised ÷ implied range, 60 minrange_ratio_60 >= 1.2
rv30_over_atm_ivrealised 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 ratioratio30-min realised vol ÷ atm_iv, both trading clock; > 1 = straddle cheaprv30_over_atm_iv >= 1.2
skew_25d25-delta put IV minus 25-delta call IV, vol points (calendar clock)vol points (calendar clock)25Δ put − call IVskew_25d top_pctl 0.9
skew_25d_ratio25-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 itpercentput IV over call IV minus one; ≈ −2 … 25, median ≈ 10. NOT a 0…1 percentileskew_25d_ratio >= 15
skew_25d_chg11-minute change of skew_25d, vol pointsvol points per minutesignedskew_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.

columnwhat it isunitrangebooka condition that uses it
volumecontracts 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 minutescontracts per minutewhole 0DTE chain; older sessions: 5-minute increments spread per minutevolume_pctl >= 0.9 (rank it, do not threshold contracts)
volume_pctltraded-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 volpercentile0 … 1 against the same minute of the prior 20 sessionsvolume_pctl >= 0.9
volume_snapvolume as the snapshot carries it: per-second prints summed on newer sessions, a 5-minute increment spread per minute on older onescontracts per minutethe snapshot's own series; 5-minute increments spread per minute on older sessionsvolume_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.

columnwhat it isunitrangebooka condition that uses it
ev_high_impact1 on a day with a high-impact release: FOMC, CPI, payrolls or PCE; else 0flag1 on FOMC, CPI, payrolls or PCE daysev_high_impact >= 1
ev_fomc1 on an FOMC decision day (statement 14:00, press conference 14:30)flag1 on a decision dayev_fomc >= 1
ev_cpi1 on a CPI day (08:30, before the open)flag1 on a CPI dayev_cpi >= 1
ev_payrolls1 on a payrolls day (08:30, before the open)flag1 on a payrolls dayev_payrolls >= 1
ev_pce1 on a PCE inflation day (08:30, before the open)flag1 on a PCE dayev_pce >= 1
ev_ism1 on an ISM day, manufacturing or services (10:00, inside the session)flag1 on an ISM dayev_ism >= 1
ev_earnings1 when a mega-cap (NVDA, AAPL, MSFT, ...) reports today, before the open or after the closeflag1 when a mega-cap reportsev_earnings >= 1
ev_opex1 on a monthly or quarterly options expiration dayflag1 on monthly / quarterly expirationev_opex >= 1
ev_pre_open1 if a high/medium release came out before 09:30, so the session already trades AFTER the numberflag1 if a release came out before 09:30ev_pre_open >= 1
ev_minutes_tominutes 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 itselfminutesto the next in-session event; NaN if noneev_minutes_to between [30, 90]
ev_minutes_sinceminutes since the last scheduled event inside the session; NaN before the first oneminutessince the last in-session event; NaN before itev_minutes_since <= 15
ev_opex_quarterly1 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 yearflag1 on the quarterly third Friday: options, futures and rebalances together (about 4 days a year)ev_opex_quarterly >= 1
ev_expiry_stack1 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 settlementflag1 when two or more expiry-class events share the dateev_expiry_stack >= 1
ev_quarter_end1 on the last session of a quarter, the SPX quarter-end expiry. About 4 days a yearflag1 on the last session of a quarter (about 4 days a year)ev_quarter_end >= 1
ev_month_end1 on the last session of a month, quarter-ends includedflag1 on the last session of a monthev_month_end >= 1
ev_vix_week1 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 fourflag1 all week when the monthly VIX settlement falls in itev_vix_week >= 1
ev_futures_roll1 on the Thursday eight days before a quarterly expiry, when ES and NQ volume moves to the next contract. About 4 days a yearflag1 on the ES and NQ futures roll Thursday (about 4 days a year)ev_futures_roll >= 1
ev_leaps1 on the January third Friday, when the long-dated LEAPS cycle expires. One day a yearflag1 on the January third Friday, the LEAPS expiry (one day a year)ev_leaps >= 1
days_to_opexweekdays left to the next third-Friday options expiration, 0 on the day itself, up to about 24; holidays count as weekdaysweekdays0 … 24 to the next third-Friday expiration, 0 on the daydays_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.

columnwhat it isunitrangebooka condition that uses it
pulse_minutes_sinceminutes 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'minutessince the last minute the tape itself marked (a 4σ one-minute move, or 3σ with the book moving); NaN before the firstpulse_minutes_since <= 5
pulse_zthe spot z-score of that last marked minute, in sigmas of the trailing half hour; NaN before the firstsigmathe spot z-score of that last marked minute; NaN before the firstpulse_z >= 5
pulse_flash1 if that marked minute had two or more public news desks flashing beside it (a headline-driven move), else 0flag1 if that marked minute had two or more public desks flashing beside itpulse_flash >= 1
pulse_book1 if that marked minute had no headline and no calendar event, the dealer book moved on its own; else 0flag1 if that marked minute had no headline and no calendar event: the book moved alonepulse_book >= 1
pulse_counthow many tape-marked minutes the session has had so far; 0 before the firstcounttape-marked minutes so far in the session; 0 before the firstpulse_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 namenew name
mins_leftminutes_to_close
vwapspot_mean
vwap_distspot_mean_dist
vwap_sigmaspot_sd
vwap_zspot_mean_z
b2uspot_mean_up2
b2lspot_mean_dn2
candle_deltaret1
flipflip_meas
flip_distflip_meas_dist
flip_volcp_distflip_vol_dist
flip_struct_distflip_oi_dist
gamma_posgamma_pos_meas
cr0_distcall_wall_meas_dist
ps0_distput_wall_meas_dist
cr0_volcp_distcall_wall_vol_dist
ps0_volcp_distput_wall_vol_dist
cr0_oi_distcall_wall_oi_dist
ps0_oi_distput_wall_oi_dist
cr0_strengthcall_wall_strength_meas
ps0_strengthput_wall_strength_meas
cw_agreecall_wall_agree
pw_agreeput_wall_agree
cw_agree_distcall_wall_agree_dist
pw_agree_distput_wall_agree_dist
dexdealer_delta_meas
dealer_dexdealer_delta_meas
vexdealer_vega_meas
charmcharm_meas
vannavanna_meas
dex_flowdealer_delta_meas_flow
vex_flowdealer_vega_meas_flow
charm_flowcharm_meas_flow
gpctgamma_pctl_meas
ngv_measnet_gamma_meas
ngv_convnet_gamma_oi
ngv_volcpnet_gamma_vol
meas_conv_divnet_gamma_meas_minus_oi
dgamma_flownet_gamma_meas_flow
mc5max_change_5_meas
mc15max_change_15_meas
mc30max_change_30_meas
concentrationconcentration_meas
gross_totalgross_oi_total
gross_at_spotgross_oi_at_spot
gross_upgross_oi_above
gross_dngross_oi_below
gross_up_distgross_oi_above_dist
gross_dn_distgross_oi_below_dist
gross_near_sharegross_oi_near_share
gross_top3_sharegross_oi_top3_share
signed_over_grossabs_gamma_meas_over_gross_oi
meas_belowabs_gamma_below_meas
meas_aboveabs_gamma_above_meas
meas_below_chg15abs_gamma_below_meas_chg15
meas_above_chg15abs_gamma_above_meas_chg15
meas_below_chg30abs_gamma_below_meas_chg30
meas_above_chg30abs_gamma_above_meas_chg30
gam_0dtegamma_0dte_meas
gam_nextgamma_next_meas
gam_next_sharegamma_next_share_meas
gam_vol_0dtegamma_0dte_vol
gam_vol_nextgamma_next_vol
gam_vol_next_sharegamma_next_share_vol
gam_oi_0dtegamma_0dte_oi
gam_oi_nextgamma_next_oi
gam_oi_next_sharegamma_next_share_oi
atmivatm_iv
atmiv_chgatm_iv_chg1
div30atm_iv_chg30
exp_rangerange_left_fcst
rvi15range_ratio_15
rvi30range_ratio_30
rvi60range_ratio_60
skewskew_25d
skewpctskew_25d_ratio
skew_chgskew_25d_chg1
volvolume
vol_pctlvolume_pctl
vol_snapvolume_snap
ev_highev_high_impact
ev_nfpev_payrolls
ev_earnev_earnings
ev_mins_toev_minutes_to
ev_mins_sinceev_minutes_since
ev_opex_qev_opex_quarterly
ev_exp_stackev_expiry_stack
ev_qendev_quarter_end
ev_eomev_month_end
ev_rollev_futures_roll
pu_mins_sincepulse_minutes_since
pu_zpulse_z
pu_flashpulse_flash
pu_bookpulse_book
pu_countpulse_count

Retired

columnwhy
hold_lothe hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin
hold_hithe hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin
hold_lo_distthe hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin
hold_hi_distthe hold band was retired on 2026-10-03: it existed in the measured book only and has no volume-book twin
vrp_ratioit divided a range ratio by an implied vol and was retired on 2026-10-03; use rv30_over_atm_iv
range_usedit divided the distance from the running mean by a forecast of the range LEFT and was retired on 2026-10-03; use em_used