Advancers and decliners per session, names with $5M+ traded, July 20-24
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-08-12, from Market Recap: Week of July 20, 2026.
| date | advancers | decliners | unchanged | measured_names |
|---|---|---|---|---|
| 2026-07-20 | 1268 | 2632 | 45 | 3945 |
| 2026-07-21 | 2516 | 1450 | 41 | 4007 |
| 2026-07-22 | 1595 | 2332 | 33 | 3960 |
| 2026-07-23 | 1232 | 2815 | 30 | 4077 |
| 2026-07-24 | 2273 | 1635 | 42 | 3950 |
- Rows × columns
- 5 × 5
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
date |
date | 2026-07-20 to 2026-07-24 | |
advancers |
number | 1,232 to 2,516 | |
decliners |
number | 1,450 to 2,815 | |
unchanged |
number | 30 to 45 | |
measured_names |
number | 3,945 to 4,077 |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
the exact SQL behind every number
SELECT toString(d) AS date, advancers, decliners, unchanged, measured_names
FROM (
SELECT d,
countIf(c > prev_c) AS advancers,
countIf(c < prev_c) AS decliners,
countIf(c = prev_c) AS unchanged,
count() AS measured_names
FROM (
SELECT d, c, dv,
lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
FROM (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS c,
sum(toFloat64(close) * toFloat64(volume)) AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)
WHERE d >= '2026-07-20' AND prev_c > 0 AND dv >= 5000000
GROUP BY d
)
ORDER BY date
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysisMarket Recap: Week of July 20, 2026
Treasury curve by session, July 17 print through July 24
series 6×6
→
SPY median quoted spread and NBBO updates per session, regular hours, July 20-24
series 5×5
→
SPY by session: close, change, and share volume, July 20-24
series 5×4
→
Options contracts, same-day share, and call share by session, July 20-24
series 5×5
→
SEC filings by session and form type, July 20-24
series 5×5
→
Daily short-volume file coverage: tickers on file and short shares, July 20-24
series 5×4
→
See all 2,170 queries →