Why Relative Volume Differs Between Platforms
Five relative-volume definitions on one AAPL session, at 10:30 a.m. ET and at the closeranking ·
2026-09-16 · 5×3
One AAPL session, four lookbacks: full-day relative volume from daily barsranking ·
2026-09-16 · 4×4
How the session's volume piled up against the prior 10 sessions, checkpoint by checkpointseries ·
2026-09-16 · 14×4
Same session, same 10-session lookback: same-time basis vs full-day basis through the dayseries ·
2026-09-16 · 14×3
Five relative-volume definitions on one AAPL session, at 10:30 a.m. ET and at the close
Five relative-volume definitions on one AAPL session, at 10:30 a.m. ET and at the close
| definition | at_10_30_et_ratio | at_close_ratio |
|---|---|---|
| Full-day basis, 63-session (3-month) average | 0.38 | 1.54 |
| Full-day basis, 50-session average | 0.4 | 1.62 |
| Full-day basis, 10-session average | 0.46 | 1.87 |
| Same-time basis, 50-session average | 1.52 | 1.62 |
| Same-time basis, 10-session average | 1.92 | 1.87 |
the exact SQL behind every number
WITH toDate('2026-09-10') AS session_day
SELECT
tupleElement(r, 1) AS definition,
round(tupleElement(r, 2), 2) AS at_10_30_et_ratio,
round(tupleElement(r, 3), 2) AS at_close_ratio
FROM
(
SELECT
arrayJoin([
('Full-day basis, 63-session (3-month) average', session_1030 / avg63_full, session_close / avg63_full, 1),
('Full-day basis, 50-session average', session_1030 / avg50_full, session_close / avg50_full, 2),
('Full-day basis, 10-session average', session_1030 / avg10_full, session_close / avg10_full, 3),
('Same-time basis, 50-session average', session_1030 / avg50_same, session_close / avg50_full, 4),
('Same-time basis, 10-session average', session_1030 / avg10_same, session_close / avg10_full, 5)
]) AS r
FROM
(
SELECT
anyIf(cum_1030, d = session_day) AS session_1030,
anyIf(cum_close, d = session_day) AS session_close,
arrayReverseSort(x -> tupleElement(x, 1), groupArrayIf((d, cum_1030, cum_close), d < session_day)) AS prior,
arrayAvg(x -> tupleElement(x, 3), arraySlice(prior, 1, 63)) AS avg63_full,
arrayAvg(x -> tupleElement(x, 3), arraySlice(prior, 1, 50)) AS avg50_full,
arrayAvg(x -> tupleElement(x, 3), arraySlice(prior, 1, 10)) AS avg10_full,
arrayAvg(x -> tupleElement(x, 2), arraySlice(prior, 1, 50)) AS avg50_same,
arrayAvg(x -> tupleElement(x, 2), arraySlice(prior, 1, 10)) AS avg10_same
FROM
(
SELECT
d,
sumIf(vol, minute_of_day <= 630) AS cum_1030,
sum(vol) AS cum_close
FROM
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York')) AS minute_of_day,
max(toFloat64(volume)) AS vol
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'AAPL'
AND window_start >= toDateTime(session_day - 100, 'America/New_York')
AND window_start < toDateTime(session_day + 1, 'America/New_York')
GROUP BY d, minute_of_day
HAVING minute_of_day >= 570 AND minute_of_day <= 960
)
GROUP BY d
)
HAVING length(prior) >= 63 AND session_close > 0
)
)
ORDER BY tupleElement(r, 4)
More from this analysisWhy Relative Volume Differs Between Platforms
One AAPL session, four lookbacks: full-day relative volume from daily bars
ranking 4×4
→
How the session's volume piled up against the prior 10 sessions, checkpoint by checkpoint
series 14×4
→
Same session, same 10-session lookback: same-time basis vs full-day basis through the day
series 14×3
→
Full-day RVOL percentiles across high-volume US stocks and ETFs (20-day ADV above 5M shares), latest completed session
ranking 6×2
→
See all 2,272 queries →