Advancers vs decliners among tickers with at least $1M traded on July 7
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-07-26, from Market Recap: July 7, 2026, The Day in Numbers.
advancers
2,091
decliners
4,034
unchanged
59
liquid tickers
6,184
tickers traded both sessions
11,460
dropped by liquidity filter
5,276
advancer pct
33.8
- Rows × columns
- 1 × 7
- 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 |
|---|---|---|---|
advancers |
number | every row is 2,091 | |
decliners |
number | every row is 4,034 | |
unchanged |
number | every row is 59 | |
liquid_tickers |
number | every row is 6,184 | |
tickers_traded_both_sessions |
number | every row is 11,460 | |
dropped_by_liquidity_filter |
number | every row is 5,276 | |
advancer_pct |
number | every row is 33.8 | percent |
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
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-07 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') AS day_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
GROUP BY ticker
)
SELECT
countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
count() AS tickers_traded_both_sessions,
count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
/ countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0
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: July 7, 2026, The Day in Numbers
SPY's option quotes on July 7: the whole root, and the near-the-money same-day touch through the air pocket against a midday control
scalar 1×13
→
Session check: SPY's observed minute-bar span, the holiday table, and the next closure on the calendar
scalar 1×8
→
One row for the whole options day: volume, call share, 0DTE, and the two contracts that bracketed SPY's close
scalar 1×24
→
July 7's corporate calendar and information flow, in one row
scalar 1×15
→
QQQ and SPY: July 7 ranked against the trailing month of sessions (rank 1 = biggest absolute move)
scalar 1×7
→
SPY's update-weighted average quoted spread: July 7 ranked against the trailing month (rank 1 = tightest)
scalar 1×7
→
See all 2,170 queries →