July 9 Market Recap: The Day in Numbers
Chip equipment gap up then fade, mega-caps bounce back, and tape turn green. See how NVDA still close red and wetin drive the sharp reversal.
Thursday, July 9, 2026 carry all the violence inside one minute, and that minute happen before opening bell. Chip-equipment names don already dey trade far above Wednesday close for premarket, while META sit -3.16% below am; the 9:30 print confirm both moves. The day later reverse part of its own open: the chip gaps fade, META climb back fully, and the tape close 71.5% green, the broadest session for the week. NVDA, wey dey green throughout Tuesday rout, close red. Every number below come from stored query.
What set up the open
Gaps no happen for the first time at 9:30. Between 4:00 am and 9:29 am ET, premarket tape don already reprice these names, and opening print land for that level.
| ticker | prior close | first premkt bar ET | premkt last | premkt pct | premkt shares k | gap pct | open vs premkt pct |
|---|---|---|---|---|---|---|---|
| KLAC | 221.03 | 04:00 | 239.8 | 8.49 | 357.1 | 8.14 | -0.33 |
| LRCX | 332.93 | 04:00 | 365.04 | 9.64 | 359.6 | 9.67 | 0.02 |
| META | 603.03 | 04:00 | 584 | -3.16 | 1463.8 | -3.16 | 0 |
| NVDA | 204.14 | 04:00 | 204.46 | 0.16 | 3741.7 | 0.16 | 0 |
| QQQ | 711.3 | 04:00 | 718.32 | 0.99 | 1652.7 | 0.99 | 0 |
| SPY | 745.31 | 04:00 | 747.38 | 0.28 | 814.8 | 0.27 | 0 |
The exact SQL behind every number
SELECT
ticker,
round(prior_close, 2) AS prior_close,
formatDateTime(first_pm_bar, '%H:%i') AS first_premkt_bar_et,
round(premkt_last, 2) AS premkt_last,
round((premkt_last / prior_close - 1) * 100, 2) AS premkt_pct,
round(premkt_shares / 1e3, 1) AS premkt_shares_k,
round((day_open / prior_close - 1) * 100, 2) AS gap_pct,
round((day_open / premkt_last - 1) * 100, 2) AS open_vs_premkt_pct
FROM (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS prior_close,
minIf(toTimeZone(window_start, 'America/New_York'), window_start >= '2026-07-09 08:00:00' AND window_start < '2026-07-09 13:30:00') AS first_pm_bar,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 08:00:00' AND window_start < '2026-07-09 13:30:00')) AS premkt_last,
sumIf(toFloat64(volume), window_start >= '2026-07-09 08:00:00' AND window_start < '2026-07-09 13:30:00') AS premkt_shares,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00')) AS day_open
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'KLAC', 'LRCX', 'META', 'NVDA')
AND ((window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')
OR (window_start >= '2026-07-09 08:00:00' AND window_start < '2026-07-09 20:00:00'))
GROUP BY ticker
)
ORDER BY tickerKLAC last premarket print dey +8.49% above Wednesday close, and e open +8.14%; LRCX run +9.64% before e open +9.67%; META print -3.16% and e open -3.16%. Read open_vs_premkt_pct: all six open within one percent of their last premarket price. NVDA na the odd one, 0.16% overnight on 3741.7k shares. Na the one wey get the heaviest premarket volume among the six, plus the smallest move (premarket and after-hours trading).
Catalyst dey? Our data no name any
Recap suppose talk wetin move a stock. But for here, our tables no name anything: both the news feed and SEC filing index empty for the four names wey gap pass.
| ticker | overnight articles | session articles | SEC filings | 8-K filings |
|---|---|---|---|---|
| AMD | 1 | 2 | 0 | 0 |
| KLAC | 0 | 0 | 0 | 0 |
| LRCX | 0 | 0 | 0 | 0 |
| META | 4 | 7 | 1 | 0 |
| MSFT | 6 | 5 | 0 | 0 |
| MU | 6 | 6 | 0 | 0 |
| NVDA | 7 | 9 | 0 | 0 |
| TER | 0 | 0 | 0 | 0 |
| WDC | 0 | 0 | 0 | 0 |
The exact SQL behind every number
SELECT
ticker,
toUInt32(sum(overnight_articles)) AS overnight_articles,
toUInt32(sum(session_articles)) AS session_articles,
toUInt32(sum(sec_filings)) AS sec_filings,
toUInt32(sum(filings_8k)) AS filings_8k
FROM (
SELECT
arrayJoin(['AMD', 'KLAC', 'LRCX', 'META', 'MSFT', 'MU', 'NVDA', 'TER', 'WDC']) AS ticker,
toUInt64(0) AS overnight_articles, toUInt64(0) AS session_articles,
toUInt64(0) AS sec_filings, toUInt64(0) AS filings_8k
UNION ALL
SELECT
arrayJoin(tickers) AS ticker,
countIf(published_utc < '2026-07-09 13:30:00') AS overnight_articles,
countIf(published_utc >= '2026-07-09 13:30:00') AS session_articles,
toUInt64(0) AS sec_filings, toUInt64(0) AS filings_8k
FROM global_markets.stocks_news
WHERE published_utc >= '2026-07-08 20:00:00' AND published_utc < '2026-07-09 20:00:00'
GROUP BY ticker
UNION ALL
SELECT
ticker, toUInt64(0), toUInt64(0),
count() AS sec_filings,
countIf(form_type = '8-K') AS filings_8k
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-08' AND filing_date <= '2026-07-09'
GROUP BY ticker
)
WHERE ticker IN ('AMD', 'KLAC', 'LRCX', 'META', 'MSFT', 'MU', 'NVDA', 'TER', 'WDC')
GROUP BY ticker
ORDER BY ticker0 overnight articles, 0 intraday, 0 SEC filings for KLAC. LRCX, TER and WDC get the same empty row. NVDA, wey no gap at all, get the heaviest coverage among the nine (7 overnight, 9 intraday) and e close red. Na attention from one feed, no be all the world media. Empty row no prove say event no happen. But nothing for our data name a cause, and “cause unknown” na complete answer.
The scoreboard
Every change dey compare July 9 last regular-session minute bar with Wednesday own. Rows dey alphabetical, so every ETF keep fixed position.
| ticker | prior close | day open | day close | gap pct | intraday pct | pct change | day high | day low | shares traded m |
|---|---|---|---|---|---|---|---|---|---|
| DIA | 522.72 | 523.65 | 524.22 | 0.18 | 0.11 | 0.29 | 525.15 | 522.14 | 2.7 |
| IWM | 293.47 | 295.27 | 297.26 | 0.61 | 0.67 | 1.29 | 297.88 | 294.9 | 14.4 |
| QQQ | 711.3 | 718.33 | 723.19 | 0.99 | 0.68 | 1.67 | 724.23 | 715.12 | 27.8 |
| SPY | 745.31 | 747.35 | 751.64 | 0.27 | 0.57 | 0.85 | 751.97 | 745.59 | 32.5 |
The exact SQL behind every number
WITH prior AS (
SELECT ticker, argMax(close, window_start) AS prior_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY ticker
),
sess AS (
SELECT ticker,
argMin(open, window_start) AS day_open,
argMax(close, window_start) AS day_close,
max(high) AS day_high,
min(low) AS day_low,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_traded_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
GROUP BY ticker
)
SELECT
s.ticker AS ticker,
round(toFloat64(p.prior_close), 2) AS prior_close,
round(toFloat64(s.day_open), 2) AS day_open,
round(toFloat64(s.day_close), 2) AS day_close,
round((toFloat64(s.day_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
round(toFloat64(s.day_high), 2) AS day_high,
round(toFloat64(s.day_low), 2) AS day_low,
s.shares_traded_m
FROM sess s LEFT JOIN prior p ON s.ticker = p.ticker
ORDER BY tickerAll four close green. QQQ lead with +1.67%, from a +0.99% gap plus a +0.68% climb. Small-cap IWM take +1.29%, SPY gain +0.85% to $751.64, while DIA trail with +0.29%. Growth dey front, Dow dey back.
Was di day unusual?
For di index level, no be so: QQQ get +1.67% close-over-close move, wey rank 10 out of 21 trailing sessions by size. SPY open-to-close move rank 8 out of 22. Na the movement between the day’s groups carry di drama.
| QQQ close over close pct | QQQ absolute move rank | QQQ sessions wey dem compare | SPY open to close pct | SPY absolute move rank | SPY sessions wey dem compare | first session |
|---|---|---|---|---|---|---|
| 1.67 | 10 | 21 | 0.57 | 8 | 22 | 2026-06-08 |
The exact SQL behind every number
SELECT
round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-09')), 2) AS qqq_close_over_close_pct,
arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-09'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-09'))) + 1 AS qqq_abs_move_rank,
countIf(ticker = 'QQQ' AND isFinite(cc_pct)) AS qqq_sessions_compared,
round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-09')), 2) AS spy_open_to_close_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-09'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-09'))) + 1 AS spy_abs_move_rank,
countIf(ticker = 'SPY') AS spy_sessions_compared,
toString(min(d)) AS first_session
FROM (
SELECT ticker, d,
if(isFinite(close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1),
(close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100, NULL) AS cc_pct,
oc_pct
FROM (
SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(toFloat64(close), window_start) AS close_px,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-06-08 13:30:00')
AND window_start < toDateTime('2026-07-10 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
)
)Breadth: di na session wey broad pass for this week
| advancers | decliners | unchanged | liquid tickers | traded for both sessions | dropped by liquidity filter | advancer pct | Jul 8 advancer pct |
|---|---|---|---|---|---|---|---|
| 4263 | 1631 | 72 | 5966 | 11351 | 5385 | 71.5 | 29.6 |
The exact SQL behind every number
SELECT
countIf(close_9 > close_8 AND close_8 > 0 AND dv_9 >= 1000000) AS advancers,
countIf(close_9 < close_8 AND close_8 > 0 AND dv_9 >= 1000000) AS decliners,
countIf(close_9 = close_8 AND close_8 > 0 AND dv_9 >= 1000000) AS unchanged,
countIf(close_8 > 0 AND close_9 > 0 AND dv_9 >= 1000000) AS liquid_tickers,
countIf(close_8 > 0 AND close_9 > 0) AS traded_both_sessions,
countIf(close_8 > 0 AND close_9 > 0) - countIf(close_8 > 0 AND close_9 > 0 AND dv_9 >= 1000000) AS dropped_by_liquidity_filter,
round(100.0 * countIf(close_9 > close_8 AND close_8 > 0 AND dv_9 >= 1000000) / countIf(close_8 > 0 AND close_9 > 0 AND dv_9 >= 1000000), 1) AS advancer_pct,
round(100.0 * countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) / countIf(close_8 > 0 AND close_7 > 0 AND dv_8 >= 1000000), 1) AS jul8_advancer_pct
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00')) AS close_9,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00') AS dv_9,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS dv_8
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-09 20:00:00'
GROUP BY ticker
)4263 advancers against 1631 decliners, meaning say advancers make up 71.5% after 29.6% on Wednesday. Na the same calculation and the same $1M-traded filter apply; 5385 of 11351 names fall below the filter. Compare am with the rest of the week:
| date | SPY pct | QQQ pct | advancer pct | liquid names |
|---|---|---|---|---|
| 2026-07-06 | 0.87 | 1.39 | 62.4 | 6189 |
| 2026-07-07 | -0.48 | -1.82 | 33.9 | 6189 |
| 2026-07-08 | -0.31 | 0.25 | 29.6 | 6162 |
| 2026-07-09 | 0.85 | 1.67 | 71.4 | 5973 |
The exact SQL behind every number
WITH per_day AS (
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-02 13:30:00' AND window_start < '2026-07-09 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY ticker, d
),
lagged AS (
SELECT ticker, d, c, dv,
lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d) AS prev_c
FROM per_day
)
SELECT
toString(d) AS date,
round(anyIf((c / prev_c - 1) * 100, ticker = 'SPY'), 2) AS spy_pct,
round(anyIf((c / prev_c - 1) * 100, ticker = 'QQQ'), 2) AS qqq_pct,
round(100.0 * countIf(c > prev_c AND prev_c > 0 AND dv >= 1000000) / countIf(c > 0 AND prev_c > 0 AND dv >= 1000000), 1) AS advancer_pct,
countIf(c > 0 AND prev_c > 0 AND dv >= 1000000) AS liquid_names
FROM lagged
WHERE d >= toDate('2026-07-06')
GROUP BY d
ORDER BY dMonday start with 62.4% advancers. Tuesday and Wednesday drop reach 33.9% and 29.6%. Thursday 71.4% na the highest for the four sessions wey don complete this week. Friday July 10 never enter this recap yet. QQQ follow the same pattern: -1.82% Tuesday, 0.25% Wednesday, and +1.67% Thursday.
Chips no be everything: how the rest of the market trade
Breadth show say most stocks rise; e no mean say the rally spread evenly. Below na equal-weighted basket of three liquid names for each sector, and na the same basket wey dem declare every day.
| sector | names | average pct chg | worst name pct | best name pct | gap to best sector pct |
|---|---|---|---|---|---|
| Semiconductors | 3 | 4.24 | 3.2 | 5.68 | 0 |
| Financials | 3 | 1.88 | 1.46 | 2.61 | -2.36 |
| Industrials | 3 | 0.42 | -1 | 1.4 | -3.82 |
| Healthcare | 3 | 0.22 | -1.62 | 1.41 | -4.02 |
| Big tech | 3 | 0.17 | -0.76 | 0.93 | -4.07 |
| Staples | 3 | -0.91 | -1.04 | -0.75 | -5.15 |
| Utilities | 3 | -0.96 | -1.28 | -0.41 | -5.21 |
| Energy | 3 | -2.01 | -2.54 | -1.06 | -6.25 |
The exact SQL behind every number
SELECT
sector,
count() AS names,
round(avg(pct_chg), 2) AS avg_pct_chg,
round(min(pct_chg), 2) AS worst_name_pct,
round(max(pct_chg), 2) AS best_name_pct,
round(avg(pct_chg) - max(avg(pct_chg)) OVER (), 2) AS gap_to_best_sector_pct
FROM (
SELECT
ticker,
multiIf(ticker IN ('AMD', 'AVGO', 'KLAC'), 'Semiconductors',
ticker IN ('AAPL', 'MSFT', 'GOOGL'), 'Big tech',
ticker IN ('JPM', 'BAC', 'GS'), 'Financials',
ticker IN ('CAT', 'HON', 'GE'), 'Industrials',
ticker IN ('XOM', 'CVX', 'COP'), 'Energy',
ticker IN ('JNJ', 'UNH', 'PFE'), 'Healthcare',
ticker IN ('KO', 'PG', 'WMT'), 'Staples',
'Utilities') AS sector,
(toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'))
/ toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) - 1) * 100 AS pct_chg
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'KLAC', 'AAPL', 'MSFT', 'GOOGL', 'JPM', 'BAC', 'GS', 'CAT', 'HON', 'GE',
'XOM', 'CVX', 'COP', 'JNJ', 'UNH', 'PFE', 'KO', 'PG', 'WMT', 'NEE', 'DUK', 'SO')
AND window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-09 20:00:00'
GROUP BY ticker
)
GROUP BY sector
ORDER BY avg_pct_chg DESCSemiconductors lead with +4.24%, while Energy trail with -2.01%, giving -6.25-point spread (gap_to_best_sector_pct). Financials be the strongest non-chip basket at +1.88%; Staples (-0.91%), Utilities (-0.96%) and Energy close red. Big tech (AAPL, MSFT and GOOGL) average a mild +0.17%. The biggest open-to-close reversal for the day, META's +8.1% swing, dey outside all eight baskets; inside this basket, MSFT's -2.25% open into a +0.33% close be the sharpest round trip.
Semiconductor open wey fade follow am
gap_pct na the open against Wednesday close; intraday_pct na the remaining part of the day. Rows dey alphabetical order.
| ticker | prior close | day open | day close | gap pct | intraday pct | pct chg | day dollar bn |
|---|---|---|---|---|---|---|---|
| AMD | 517.26 | 537.26 | 546.66 | 3.87 | 1.75 | 5.68 | 12.15 |
| AVGO | 388.67 | 402.19 | 401.11 | 3.48 | -0.27 | 3.2 | 8.34 |
| INTC | 110.27 | 114.87 | 112.55 | 4.17 | -2.02 | 2.07 | 9.21 |
| KLAC | 221.03 | 239.02 | 229.51 | 8.14 | -3.98 | 3.84 | 2.29 |
| LRCX | 332.93 | 365.13 | 353.24 | 9.67 | -3.26 | 6.1 | 3.36 |
| MRVL | 231.66 | 246.18 | 243.33 | 6.27 | -1.16 | 5.04 | 4.04 |
| MU | 949.37 | 1016.51 | 990.5 | 7.07 | -2.56 | 4.33 | 33.56 |
| NVDA | 204.14 | 204.46 | 202.76 | 0.16 | -0.83 | -0.68 | 21.28 |
| SNDK | 1729.4 | 1835.61 | 1858.26 | 6.14 | 1.23 | 7.45 | 20.59 |
| SOXL | 174.84 | 199.81 | 192.44 | 14.28 | -3.69 | 10.07 | 7.8 |
| SOXS | 4.52 | 3.87 | 4.07 | -14.38 | 5.17 | -9.96 | 2.18 |
| STX | 859.68 | 922.28 | 889.79 | 7.28 | -3.52 | 3.5 | 3.64 |
| TER | 351.56 | 379.24 | 362.87 | 7.87 | -4.32 | 3.22 | 0.95 |
| WDC | 550.71 | 594.14 | 578.32 | 7.89 | -2.66 | 5.01 | 3.27 |
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-09 00:00:00')) AS prior_close,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-09 00:00:00')) AS day_open,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-07-09 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-07-09 00:00:00') AS day_low,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-09 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
AND ((window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')
OR (window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close, 2) AS prior_close,
round(day_open, 2) AS day_open,
round(day_close, 2) AS day_close,
round((day_open / prior_close - 1) * 100, 2) AS gap_pct,
round((day_close / day_open - 1) * 100, 2) AS intraday_pct,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
day_dollar_bn
FROM per_name
ORDER BY tickerKLAC open +8.14% above Wednesday close, then e give back -3.98%; LRCX open +9.67% and fade -3.26%; TER (+7.87%) and WDC (+7.89%) follow the same pattern. MU gap up +7.07%, fall -2.56%, but still close +4.33% on 33.56B, the stock wey get the heaviest trading for the second session in a row (Wednesday recap get the first one). AMD and SNDK na the exceptions: AMD add 1.75% after opening +3.87%, to finish +5.68%, while SNDK, wey don already dey +6.14% for the open, add another 1.23% to close +7.45%. And NVDA: e open +0.16%, no gap, then close at -0.68%.
| Jul9 green | Jul9 red | Jul8 green | NVDA Jul9 pct | NVDA Jul8 pct | names we count |
|---|---|---|---|---|---|
| 12 | 2 | 12 | -0.68 | 3.66 | 14 |
The exact SQL behind every number
SELECT
countIf(close_9 > close_8) AS jul9_green,
countIf(close_9 < close_8) AS jul9_red,
countIf(close_8 > close_7) AS jul8_green,
round(anyIf((close_9 / close_8 - 1) * 100, ticker = 'NVDA'), 2) AS nvda_jul9_pct,
round(anyIf((close_8 / close_7 - 1) * 100, ticker = 'NVDA'), 2) AS nvda_jul8_pct,
count() AS names_counted
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00')) AS close_9
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
AND window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-09 20:00:00'
GROUP BY ticker
)12 of the fourteen stocks close green; the 2 red closes na the opposite wrapper, structural move for an up day, plus NVDA at -0.68%, one day after e close +3.66%. The biggest chip name for the tape no join the celebration for e own sector, even as e carry the heaviest news coverage.
The other side: mega-caps open low and climb back
| ticker | prior close | day open | day close | gap pct | intraday pct | pct chg | day dollar bn |
|---|---|---|---|---|---|---|---|
| AAPL | 313.26 | 310.51 | 316.17 | -0.88 | 1.82 | 0.93 | 11.14 |
| AMZN | 243.55 | 239.82 | 246.95 | -1.53 | 2.97 | 1.4 | 6.79 |
| CVX | 175.92 | 174.63 | 174.05 | -0.73 | -0.33 | -1.06 | 0.91 |
| GOOGL | 361.64 | 354.31 | 358.89 | -2.03 | 1.29 | -0.76 | 6.75 |
| JNJ | 263.36 | 260.63 | 259.1 | -1.04 | -0.59 | -1.62 | 1.25 |
| META | 603.03 | 583.99 | 631.31 | -3.16 | 8.1 | 4.69 | 12.69 |
| MSFT | 383.05 | 374.45 | 384.33 | -2.25 | 2.64 | 0.33 | 8.27 |
| TSLA | 393.92 | 393.99 | 406.56 | 0.02 | 3.19 | 3.21 | 12.67 |
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-09 00:00:00')) AS prior_close,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-09 00:00:00')) AS day_open,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-09 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-09 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'AMZN', 'CVX', 'GOOGL', 'JNJ', 'META', 'MSFT', 'TSLA')
AND ((window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')
OR (window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close, 2) AS prior_close,
round(day_open, 2) AS day_open,
round(day_close, 2) AS day_close,
round((day_open / prior_close - 1) * 100, 2) AS gap_pct,
round((day_close / day_open - 1) * 100, 2) AS intraday_pct,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
day_dollar_bn
FROM per_name
ORDER BY tickerSeven of the eight open below Wednesday close; wetin happen after that na wetin separate dem. META open -3.16% low and climb +8.1% reach 4.69% close, na the strongest open-to-close reversal for this page. MSFT open -2.25% low and recover reach +0.33%; AMZN (+1.4%) and AAPL (+0.93%) follow the same pattern; TSLA no get gap and climb reach +3.21%. The names wey remain down no be growth stocks: GOOGL (-0.76%), CVX (-1.06%), JNJ (-1.62%). Why stocks dey gap overnight explain the mechanics.
Wey money trade
| leaderboard | ticker | dollar volume bn | shares m | implied average price | pct of board leader |
|---|---|---|---|---|---|
| by dollars traded | MU | 33.56 | 33.1 | 1013.9 | 100 |
| by dollars traded | SPY | 24.37 | 32.5 | 749.85 | 72.6 |
| by dollars traded | NVDA | 21.28 | 105.3 | 202.09 | 63.4 |
| by dollars traded | SNDK | 20.59 | 11 | 1871.82 | 61.4 |
| by dollars traded | QQQ | 20.04 | 27.8 | 720.86 | 59.7 |
| by dollars traded | META | 12.69 | 20.8 | 610.1 | 37.8 |
| by shares traded | SOXS | 2.18 | 558.1 | 3.91 | 100 |
| by shares traded | BITO | 2.79 | 326.2 | 8.55 | 58.4 |
| by shares traded | TZA | 0.65 | 164 | 3.96 | 29.4 |
| by shares traded | SNDQ | 0.34 | 137.4 | 2.47 | 24.6 |
The exact SQL behind every number
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
round(1000 * dollar_volume_bn / shares_m, 2) AS implied_avg_price,
round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
/ max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
SELECT
'by dollars traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_volume_bn DESC
LIMIT 6
UNION ALL
SELECT
'by shares traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard, pct_of_board_leader DESCMU top the dollar board again with 33.56B, pass SPY (24.37B), NVDA (21.28B) and SNDK (20.59B). Memory get two slots among the top four. The shares board na different market: SOXS lead with 558.1M shares, implied price $3.91 (relative volume).
| ET time | shares bn | pct of biggest bucket |
|---|---|---|
| 09:30 | 1.79 | 58.3 |
| 10:00 | 1.4 | 45.4 |
| 10:30 | 1.09 | 35.5 |
| 11:00 | 0.95 | 30.9 |
| 11:30 | 0.82 | 26.7 |
| 12:00 | 0.75 | 24.3 |
| 12:30 | 0.64 | 20.9 |
| 13:00 | 0.64 | 20.9 |
| 13:30 | 0.66 | 21.5 |
| 14:00 | 0.71 | 23 |
| 14:30 | 0.74 | 24.1 |
| 15:00 | 0.84 | 27.5 |
| 15:30 | 3.07 | 100 |
The exact SQL behind every number
SELECT
et_time,
round(sum(shares) / 1e9, 2) AS shares_bn,
round(100 * sum(shares) / max(sum(shares)) OVER (), 1) AS pct_of_biggest_bucket
FROM
(
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
toFloat64(volume) AS shares
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
UNION ALL
SELECT
'15:30' AS et_time,
toFloat64(size) AS shares
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-07-09 20:00:00' AND sip_timestamp < '2026-07-09 20:15:00'
AND has(conditions, 8)
)
GROUP BY et_time
ORDER BY et_timeNa textbook U-shape: open bucket carry 1.79B shares, wey be 58.3% of the biggest volume. Midday trough na 0.64B. The closing auction half-hour na the biggest for the day, with 3.07B shares. Even though the day start strong for the open, volume finish for the close.
The options tape
| option prints m | contracts m | Jul8 contracts m | call pct of volume | pct 0dte | Jul8 pct 0dte | SPY regular close | top1 underlying | top1 strike | top1 type | top1 contracts k | top1 avg px | top1 na 0dte | top2 underlying | top2 strike | top2 type | top2 na 0dte | top3 underlying | top3 strike | top3 type | top3 na 0dte | top1 moneyness |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 9.99 | 58.85 | 63.26 | 58 | 28.7 | 38.7 | 751.64 | SPY | 751 | C | 846.6 | 0.526 | 1 | SPY | 752 | C | 1 | SPY | 750 | C | 1 | -0.64 |
The exact SQL behind every number
WITH
(
SELECT (groupArray(und), groupArray(strike), groupArray(typ), groupArray(vol), groupArray(avg_px), groupArray(is_0dte))
FROM (
SELECT any(underlying_symbol) AS und, any(toFloat64(strike_price)) AS strike, any(option_type) AS typ,
sum(size) AS vol, round(avg(toFloat64(price)), 3) AS avg_px,
if(substring(ticker, length(ticker) - 14, 6) = '260709', 1, 0) AS is_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'
GROUP BY ticker
ORDER BY vol DESC
LIMIT 3
)
) AS top3,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
) AS spy_regular_close,
(
SELECT round(toFloat64(sum(size)) / 1e6, 2)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'
) AS jul8_contracts_m,
(
SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260708') / sum(size), 1)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'
) AS jul8_pct_0dte
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
jul8_contracts_m,
round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260709') / sum(size), 1) AS pct_0dte,
jul8_pct_0dte,
spy_regular_close,
top3.1[1] AS top1_und, top3.2[1] AS top1_strike, top3.3[1] AS top1_type,
round(toFloat64(top3.4[1]) / 1e3, 1) AS top1_contracts_k, top3.5[1] AS top1_avg_px, top3.6[1] AS top1_is_0dte,
top3.1[2] AS top2_und, top3.2[2] AS top2_strike, top3.3[2] AS top2_type, top3.6[2] AS top2_is_0dte,
top3.1[3] AS top3_und, top3.2[3] AS top3_strike, top3.3[3] AS top3_type, top3.6[3] AS top3_is_0dte,
round(toFloat64(top3.2[1]) - spy_regular_close, 2) AS top1_moneyness
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'Tape get 9.99M prints and 58.85M contracts. E carry am under Wednesday’s 63.26M, with calls taking 58% of volume. The 0DTE share fall to 28.7% from 38.7%. The three contracts wey trade pass na all same-day SPY calls: 751C (846.6K contracts, average $0.526), 752C and 750C. Dem form ladder around SPY’s $751.64 close (0DTE options explain the product).
Hedge or bet? Hedge dey buy strikes wey dey away from the money. Bet dey buy the side wey e want.
| strike bucket | call contracts k | put contracts k | call share pct |
|---|---|---|---|
| Strike >2% below close | 1.8 | 146.8 | 1.2 |
| Strike 0.5-2% below | 255.4 | 1356.5 | 15.8 |
| Strike within 0.5% | 3768.9 | 2563.3 | 59.5 |
| Strike 0.5-2% above | 29.1 | 2.7 | 91.6 |
| Strike >2% above close | 0.3 | 0.3 | 49 |
The exact SQL behind every number
WITH (
SELECT toFloat64(argMax(close, window_start))
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00'
) AS spy_close
SELECT
multiIf(dist < -2, 'Strike >2% below close',
dist < -0.5, 'Strike 0.5-2% below',
dist <= 0.5, 'Strike within 0.5%',
dist <= 2, 'Strike 0.5-2% above',
'Strike >2% above close') AS strike_bucket,
round(toFloat64(sumIf(size, option_type = 'C')) / 1e3, 1) AS call_contracts_k,
round(toFloat64(sumIf(size, option_type = 'P')) / 1e3, 1) AS put_contracts_k,
round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_share_pct
FROM (
SELECT option_type, size, (toFloat64(strike_price) / spy_close - 1) * 100 AS dist
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'
AND underlying_symbol = 'SPY'
AND substring(ticker, length(ticker) - 14, 6) = '260709'
)
GROUP BY strike_bucket
ORDER BY min(dist)The same-day tape dey near the money: 3768.9k calls and 2563.3k puts within half percent of the close (59.5% calls). The wings split by direction. Below the close, get 1356.5k puts against 255.4k calls (1.2% call share deeper down). Above am, calls take 91.6% of a far thinner 29.1k bucket. Wing volume dey mostly for downside strikes, where people dey buy protection: na at-the-money ladder, no be upside one.
The quote tape
| Jul9 updates m | Jul8 updates m | day-over-day pct | Jul9 SPY updates m | Jul9 QQQ updates m | Jul9 NVDA updates m | Jul9 TSLA updates m | Jul9 MU updates m |
|---|---|---|---|---|---|---|---|
| 383.44 | 530.55 | -27.7 | 2.71 | 4.35 | 1.83 | 0.46 | 0.72 |
The exact SQL behind every number
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09')) / 1e6, 2) AS jul9_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / 1e6, 2) AS jul8_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-09')) / countIf(toDate(sip_timestamp) = toDate('2026-07-08')) - 1) * 100, 1) AS day_over_day_pct,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09') AND ticker = 'SPY') / 1e6, 2) AS jul9_spy_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09') AND ticker = 'QQQ') / 1e6, 2) AS jul9_qqq_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09') AND ticker = 'NVDA') / 1e6, 2) AS jul9_nvda_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09') AND ticker = 'TSLA') / 1e6, 2) AS jul9_tsla_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09') AND ticker = 'MU') / 1e6, 2) AS jul9_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'The day get one quiet fact: 383.44M NBBO updates show for stock tape, -27.7% compared with Wednesday. The big movement dey happen for price levels, no be for how often bid and offer change. Among the tickers wey dem name, QQQ lead with 4.35M, ahead of SPY at 2.71M and NVDA at 1.83M.
| ticker | median spread bps |
|---|---|
| SPY | 0.27 |
| QQQ | 0.42 |
| NVDA | 0.99 |
| TSLA | 2.27 |
| AVGO | 3.06 |
| MU | 4.23 |
| SNDK | 8.79 |
The exact SQL behind every number
SELECT
ticker,
round(quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000), 2) AS median_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'NVDA', 'TSLA', 'MU', 'SNDK', 'AVGO')
AND sip_timestamp >= '2026-07-09 13:30:00' AND sip_timestamp < '2026-07-09 20:00:00'
AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps ASCSPY median quoted spread na 0.27 bps, QQQ na 0.42, and NVDA na 0.99. All of dem dey within normal range. The wider ones na MU at 4.23 bps and SNDK at 8.79 bps (bid-ask spread na the cost wey this measurement dey capture).
| Jul9 average spread cents | tightness rank | sessions compared | tightest session cents | widest session cents | first session |
|---|---|---|---|---|---|
| 2.071 | 10 | 22 | 1.809 | 2.865 | 2026-06-08 |
The exact SQL behind every number
SELECT
round(anyIf(avg_spread_cents, d = toDate('2026-07-09')), 3) AS jul9_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-09')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-09'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(min(avg_spread_cents), 3) AS tightest_session_cents,
round(max(avg_spread_cents), 3) AS widest_session_cents,
toString(min(d)) AS first_session
FROM (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND sip_timestamp >= toDateTime('2026-06-08 00:00:00')
AND sip_timestamp < toDateTime('2026-07-10 00:00:00')
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
)SPY average quoted spread na 2.071 cents. E rank 10 out of 22 previous sessions. E stay inside 1.809–2.865 cent range. This mean say quote no dey under stress, even as market open that way.
| Jul9 options bn | options to stock ratio | Jul9 SPY options m |
|---|---|---|
| 6.9 | 18 | 242 |
The exact SQL behind every number
WITH
(SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00') AS jul9_options_rows,
(SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00') AS jul9_stock_quote_rows
SELECT
round(jul9_options_rows / 1e9, 2) AS jul9_options_bn,
round(jul9_options_rows / jul9_stock_quote_rows, 1) AS options_to_stock_ratio,
round((SELECT count() FROM global_markets.cache_options_quotes WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27' AND sip_timestamp >= '2026-07-09 13:30:00' AND sip_timestamp < '2026-07-09 20:00:00') / 1e6, 0) AS jul9_spy_options_mThe options-quote tape record 6.9 billion NBBO updates. Na 18× the number for stock tape, while SPY root alone account for 242M.
Rates: July 9 print
| Jul9 print rows | latest print date | latest 2y pct | latest 10y pct | latest 30y pct | latest 2s10s pct |
|---|---|---|---|---|---|
| 1 | 2026-07-09 | 4.16 | 4.54 | 5.05 | 0.38 |
The exact SQL behind every number
SELECT
(SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-09') AS jul9_print_rows,
toString(any(date)) AS latest_print_date,
round(toFloat64(any(yield_2_year)), 2) AS latest_2y_pct,
round(toFloat64(any(yield_10_year)), 2) AS latest_10y_pct,
round(toFloat64(any(yield_30_year)), 2) AS latest_30y_pct,
round(toFloat64(any(yield_10_year)) - toFloat64(any(yield_2_year)), 2) AS latest_2s10s_pct
FROM global_markets.treasury_yields
WHERE date = '2026-07-09'July 9 Treasury print show after authoring, following the daily yield file normal delay. 1 row don enter record now. The day’s curve (2026-07-09): 2-year 4.16%, 10-year 4.54%, 30-year 5.05%, 2s10s 0.38 points. The 2-year yield ease from July 8 level, while the long end hold steady.
The calendar wey dey behind the day
| ex-dividend records | splits wey dem execute | reverse splits | forward splits | Form 424B2 filings | Form 4 filings | Form 8-K filings | total filings | news articles | news publishers | top news ticker | top news n | top news lead over next | top news na NVDA |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 127 | 6 | 5 | 1 | 606 | 623 | 149 | 2981 | 184 | 3 | NVDA | 20 | 8 | 1 |
The exact SQL behind every number
WITH
(
SELECT (count(), uniqExact(publisher))
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-09'
) AS news,
(
SELECT (argMax(t, (n, t)), max(n), max(n) - arraySort(x -> -x, groupArray(n))[2])
FROM (
SELECT t, count() AS n
FROM (
SELECT arrayJoin(tickers) AS t
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-09'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-09') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-09') AS splits_executed,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-09') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-09') AS forward_splits,
(SELECT countIf(form_type = '424B2') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-09') AS fil_424b2,
(SELECT countIf(form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-09') AS fil_form4,
(SELECT countIf(form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-09') AS fil_8k,
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-09') AS fil_total,
news.1 AS news_articles, news.2 AS news_publishers,
top_news.1 AS top_news_ticker, top_news.2 AS top_news_n, top_news.3 AS top_news_lead_over_next,
if(top_news.1 = 'NVDA', 1, 0) AS top_news_is_nvdaNa normal calendar for one abnormal opening: 127 ex-dividend records, 5 reverse splits, 1 forward split, 2981 SEC filings (623 Form 4s, 606 424B2s, 149 8-Ks). The feed carry 184 articles from 3 publishers; ticker wey dem cover pass na NVDA, with 20 articles, 8 ahead of the next name.
On deck
From our own tables, facts about the next session, no be forecast.
| next session date | next session holiday rows | ex-div records next | household ex-div next | SPY next expiry contracts m | SPY monthly expiry contracts m | latest short settlement | jul15 short rows |
|---|---|---|---|---|---|---|---|
| 2026-07-10 | 0 | 153 | 0 | 1.66 | 0.57 | 2026-06-15 | 0 |
The exact SQL behind every number
SELECT
toString(min(d)) AS next_session_date,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-10') AS next_session_holiday_rows,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-10') AS ex_div_records_next,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JNJ', 'KO', 'PG', 'XOM', 'CVX', 'JPM', 'WMT', 'PEP', 'HON', 'CAT'))
FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-10') AS household_ex_div_next,
(SELECT round(toFloat64(sum(size)) / 1e6, 2) FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'
AND underlying_symbol = 'SPY' AND substring(ticker, length(ticker) - 14, 6) = '260710') AS spy_next_expiry_contracts_m,
(SELECT round(toFloat64(sum(size)) / 1e6, 2) FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'
AND underlying_symbol = 'SPY' AND substring(ticker, length(ticker) - 14, 6) = '260717') AS spy_monthly_expiry_contracts_m,
(SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
WHERE _ingest_time < '2026-07-11 00:00:00') AS latest_short_settlement,
(SELECT count() FROM global_markets.stocks_short_interest
WHERE settlement_date = '2026-07-15' AND _ingest_time < '2026-07-11 00:00:00') AS jul15_short_rows
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-10 00:00:00' AND window_start < '2026-07-14 00:00:00'
)The next session na 2026-07-10, 0 holiday rows dey against am: normal Friday. 153 companies go trade ex-dividend that morning, 0 from our household-name checklist. Friday’s SPY expiry na the heaviest forward one wey don already trade, 1.66M contracts for July 9 compared with 0.57M against the July monthly. Short-interest clock: latest settlement wey dey on file na 2026-06-15, 0 rows never file for mid-July. FINRA dey publish about eight business days after settlement (why short interest dey two weeks old).
Session wey dem verify
| first SPY bar ET | last SPY bar ET | SPY minute bars | regular session bars | day sessions | jul9 holiday rows | next closure date | next closure label | next closure name |
|---|---|---|---|---|---|---|---|---|
| 04:00 | 19:59 | 885 | 390 | 1 | 0 | 2026-09-07 | September 7, 2026 | Labor Day |
The exact SQL behind every number
SELECT
formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
count() AS spy_minute_bars,
countIf(window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-09') AS jul9_holiday_rows,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-09' AND status = 'closed') AS next_closure_date,
(SELECT concat(monthName(min(date)), ' ', toString(toDayOfMonth(min(date))), ', ', toString(toYear(min(date))))
FROM global_markets.stocks_market_holidays WHERE date > '2026-07-09' AND status = 'closed') AS next_closure_label,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-09' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-09 00:00:00' AND window_start < '2026-07-10 00:00:00'Full ordinary session: first SPY bar na 04:00 ET, last one na 19:59 ET, 390 regular minute bars, no holiday row. Next closure na Labor Day, September 7, 2026.
FAQ
Wetin happen for stock market on July 9, 2026?
Every index ETF close higher. QQQ +1.67%, IWM +1.29%, SPY +0.85%, DIA +0.29%, 71.5% of liquid stocks close up. Chip-equipment names gap up then fade; mega-caps gap down then recover.
Why chip-equipment stocks like KLAC and LRCX jump on July 9, 2026?
Our data no give any reason. No article and no SEC filing for KLAC, LRCX, TER or WDC show from Wednesday close reach Thursday. The move don already price into the market premarket, before 9:30 am ET.
Why NVDA fall while chip sector rally?
NVDA close -0.68%, while 12 of fourteen chip names close green. E no gap (0.16% at the open) and na the ticker wey articles cover pass, with 20 articles. E appear together for the record, but this data no show the cause.
July 9, 2026 unusual day for the market?
No be for index level. QQQ move rank 10 of 21 trailing sessions by size, while SPY average spread rank 10 of 22. But the dispersion underneath wide: -6.25 points between the best and worst sector basket.
Data notes
Regular hours na 13:30–20:00 UTC (9:30 am–4:00 pm ET); premarket panel dey use 08:00–13:30 UTC. The eight sector baskets na curated and equal-weighted, with three liquid names each, and every ticker dey listed for that panel’s SQL. Na declared method be this, no be vendor classification: three names fit speak for themselves, but dem no represent the whole sector. Catalyst panel dey count only our news feed and the EDGAR index.
Full data notes
Per-ticker panels dey arranged alphabetically, so each prose reference dey point to one fixed row; leaderboards dey ordered by value, and every positional claim get clear boundary. Treasury print and the mid-July short-interest settlement dey bounded to zero rows. Once dem arrive, this post go hold for rewrite.
Methodology
- Sources: SQL wey dey power each panel dey name the tables e use: minute aggregates, stock and options NBBO caches, options trades, our news feed, EDGAR index, dividends, short interest, holidays, Treasury yields, and other tables.
- The volume panel closing half hour dey count the closing auction prints. The one-minute bars no dey include any auction print, so the half-hour panel add every trade wey get closing-print sale condition, with timestamp from 4:00 to 4:15 p.m. ET for the consolidated tape, to the last bucket.
- Conventions: raw UTC literals dey inside WHERE, while ET labels dey only inside SELECT; gap = first regular bar open ÷ prior regular close − 1; query dey calculate prior-session and prior-week figures inside itself, e no dey carry dem from earlier post. Warehouse as of July 13, 2026.