What Is a Liquidity Heatmap? How to Read One
AAPL top of book by half hour (ET), latest session: NBBO updates and displayed size at the best bid and ask as a share of the peak bucketseries ·
2026-09-20 · 32×4
AAPL top of book by half hour (ET), latest session: NBBO updates and displayed size at the best bid and ask as a share of the peak bucket
AAPL top of book by half hour (ET), latest session: NBBO updates and displayed size at the best bid and ask as a share of the peak bucket
| et_time | quote_update_count | displayed_bid_pct_of_peak | displayed_ask_pct_of_peak |
|---|---|---|---|
| 04:00 | 576 | 29 | 4 |
| 04:30 | 240 | 43 | 4 |
| 05:00 | 157 | 29 | 9 |
| 05:30 | 167 | 71 | 4 |
| 06:00 | 185 | 71 | 9 |
| 06:30 | 2069 | 14 | 9 |
| 07:00 | 692 | 29 | 9 |
| 07:30 | 437 | 29 | 9 |
| 08:00 | 1103 | 29 | 9 |
| 08:30 | 598 | 29 | 9 |
| 09:00 | 4220 | 29 | 4 |
| 09:30 | 92588 | 29 | 9 |
| 10:00 | 76460 | 29 | 4 |
| 10:30 | 63134 | 29 | 9 |
| 11:00 | 57109 | 29 | 9 |
| 11:30 | 40110 | 29 | 9 |
| 12:00 | 36562 | 29 | 9 |
| 12:30 | 29945 | 29 | 9 |
| 13:00 | 33069 | 29 | 9 |
| 13:30 | 26416 | 29 | 9 |
| 14:00 | 25150 | 29 | 9 |
| 14:30 | 32164 | 29 | 9 |
| 15:00 | 37989 | 29 | 9 |
| 15:30 | 120615 | 43 | 9 |
| 16:00 | 1595 | 29 | 9 |
| 16:30 | 317 | 29 | 35 |
| 17:00 | 285 | 100 | 39 |
| 17:30 | 231 | 57 | 57 |
| 18:00 | 88 | 29 | 9 |
| 18:30 | 90 | 71 | 100 |
| 19:00 | 145 | 29 | 22 |
| 19:30 | 334 | 43 | 13 |
the exact SQL behind every number
WITH (
SELECT max(toDate(sip_timestamp))
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL' AND sip_timestamp >= now() - INTERVAL 7 DAY
) AS last_session
SELECT
et_time,
quote_update_count,
round(100 * median_bid_size / max(median_bid_size) OVER (), 0) AS displayed_bid_pct_of_peak,
round(100 * median_ask_size / max(median_ask_size) OVER (), 0) AS displayed_ask_pct_of_peak
FROM (
SELECT
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
count() AS quote_update_count,
quantileDeterministic(0.5)(toFloat64(bid_size), toUInt64(sip_timestamp)) AS median_bid_size,
quantileDeterministic(0.5)(toFloat64(ask_size), toUInt64(sip_timestamp)) AS median_ask_size
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= now() - INTERVAL 7 DAY
AND toDate(sip_timestamp) = last_session
AND bid_price > 0
AND ask_price > bid_price
AND bid_size > 0
AND ask_size > 0
GROUP BY et_time
)
ORDER BY et_time
Related queries
Top-of-book message rate, minute by minute (NVDA, one hour)
series 60×3
→
Level 1 top of book: quoted spread across a full session (AAPL, June 17 2026)
series 32×3
→
Executed volume by price level: the traded ladder (KO, 30 minutes)
table 63×3
→
Top-of-book spread and quote message count by name (10:00 to 11:00 a.m. ET)
ranking 5×3
→
See all 2,549 queries →