Quantitative note

How a print is scored

The desk scans 1-minute, 5-minute, and 15-minute bars from 15:30 to 16:00 Eastern. A name only surfaces when every structural filter below is true on the same bar. The last fifteen minutes (15:45–16:00) are tagged as the closing print window.

Green candle strength

Close must be above open. Body / (high − low) ≥ 70% — a closing marubozu. The close must also sit in the top 15% of the bar so leftover supply did not reject the lift.

Relative volume spike

Bar volume ≥ 3.0× the average volume for that exact clock slot over the prior ~20 sessions (live mode uses whatever history the 5-day 1-minute tape provides). Comparing 15:54 to 15:54, not to the day’s average, is the whole point.

Notional dollar surge

Close × volume on the trigger bar must be at least $2,000,000. That single floor removes most sub-$10 names printing empty 400% RVOL.

Trend and structure

Price holds above session VWAP. Price is above the 10-EMA and 21-EMA computed on the 15-minute series. A bull stack (price ≥ 10 ≥ 21) scores higher than a mixed cross.

Block / tape flag

When tick-level or reconstructed block prints are available, individual fills ≥ $500k notional are flagged as lit, TRF, or dark. They do not gate the signal; they raise conviction.

Conviction

A 0–99 score from body quality, RVOL excess, log notional above $2M, VWAP extension, EMA stack, block count, and whether the bar landed after 15:45. The blotter still sorts by notional, then bar change — conviction is the secondary read.

Data

The live desk calls the Yahoo Finance 1-minute chart as a no-key fallback. Polygon and Alpaca are first-class in the Python engine (`python/data_fetcher.py`) when those keys are present. The model session rebuilds a full cash day with a U-shaped volume profile and forced institutional lifts on high-affinity names so the filters can be inspected when the cash tape is dark.

Return to the blotter