Pick an intraday window, then click any ATR residence zone. The four arrows on the chart are the independent probabilities that price tests or accepts the adjacent upper / lower boundary within that window. The right panel splits sessions by their first level-touching bar — those buckets are mutually exclusive and sum to N.
Scope: within the selected window only. Every probability on the chart is computed from 3-minute bars whose timestamp falls inside the chosen window. Bars at or after the window end are ignored — if SPX accepts the upper boundary at 11:01 ET on the 10am → 11am chart, that session is still counted as "did not accept up" for that hour band. Pick a different chip to ask the same question over a different slice of the day.
Denominator (N). All historical RTH sessions whose starting price sits inside the selected ATR residence zone at the start of the selected window. The first window (Open → 10am) uses the 09:30 RTH open; later windows use the close of the first 3-minute bar at or after the window start. Each session contributes at most one snapshot per window.
bar.high ≥ U and bar.low ≤ U for the upper level (mirror for lower). The bar physically reaches the level — close-side does not matter. A test at 11:01 does not count for the 10am → 11am window.close > U for an upward accept, close < L for a downward accept. Acceptance is a strict subset of testing. This is touch-bar acceptance, not sustained acceptance — price can fail back inside on the next bar and the event still counts. And, like Test, it is window-scoped: an accept that happens after the window ends is invisible on this chip.rejected_up = tested_up − accepted_up. The first up-test bar closed back inside the zone. Mirror for down.Why test and accept rates don't sum to 100%. A single session can test BOTH boundaries (touch upper then lower, or both within the same bar) inside the window, so tested_up + tested_down ≥ N in general. And most first-test bars close back inside the zone (rejected), so accepted_up + accepted_down is much smaller than the fraction of sessions that left the zone. The four chart arrows are independent rates — read each in isolation against N.
The right-panel first-touch partition resolves this. Each session is bucketed by what its first level-touching bar in the window did: upper accept, upper reject, lower accept, lower reject, both same bar (one bar touched both rungs), or no touch. The buckets are mutually exclusive and sum to N — so the partition tells you the unconditional fraction that genuinely never moved, vs. each first-event outcome.
Sanity checks built into the chart. rejected_up = tested_up − accepted_up at every row; the partition strip sums to N; tested_either ≤ N and tested_both ≤ min(tested_up, tested_down).