Market Recap: July 9, 2026, The Day in Numbers
Chip equipment gapped up hard and faded, mega-caps gapped down and ripped back, the tape flipped decisively green, and NVDA sat it out, closing red.
Thursday, July 9, 2026 packed its violence into one minute, and that minute came before the opening bell. Chip-equipment names were already far above Wednesday's close in premarket trade, while META sat -3.16% below it; the 9:30 print ratified both. The day then partly unwound its own open: the chip gaps faded, META climbed all the way back, and the tape finished 71.5% green, the broadest session of the week. NVDA, green through Tuesday's rout, closed red. Every number below is read from a stored query.
What set up the open
The gaps were not made at 9:30. Between 4:00 am and 9:29 am ET the premarket tape had already repriced these names, and the opening print landed on 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's last premarket print stood +8.49% over Wednesday's close and it opened +8.14%; LRCX ran +9.64% into a +9.67% open; META printed -3.16% and opened -3.16%. Read open_vs_premkt_pct: all six opened within one percent of their last premarket price. NVDA is the odd one, 0.16% overnight on 3741.7k shares, the heaviest premarket volume of the six and the smallest move (premarket and after-hours trading).
Was there a catalyst? Our data names none
A recap should say what moved a stock. Here our tables name nothing: the news feed and the SEC filing index are both empty for the four names that gapped hardest.
| ticker | overnight_articles | session_articles | sec_filings | filings_8k |
|---|---|---|---|---|
| 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, the same empty row for LRCX, TER and WDC. NVDA, which never gapped, carried the heaviest coverage of the nine (7 overnight, 9 intraday) and closed red. This is one feed's attention, not the world's media, and an absent row is not proof of an absent event, but nothing in our data names a cause, and "cause unknown" is a complete answer.
The scoreboard
Every change compares July 9's last regular-session minute bar with Wednesday's; rows are alphabetical, so each ETF keeps a 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 closed green. QQQ led at +1.67%, a +0.99% gap plus a +0.68% climb; small-cap IWM took +1.29%, SPY +0.85% to $751.64, DIA trailed at +0.29%. Growth in front, the Dow in back.
Was the day unusual?
At the index level, no: QQQ's +1.67% close-over-close ranked 10 of 21 trailing sessions by size, SPY's open-to-close 8 of 22. The drama sat between the day's groups.
| qqq_close_over_close_pct | qqq_abs_move_rank | qqq_sessions_compared | spy_open_to_close_pct | spy_abs_move_rank | spy_sessions_compared | 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: the broadest session of the week
| advancers | decliners | unchanged | liquid_tickers | traded_both_sessions | dropped_by_liquidity_filter | advancer_pct | jul8_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, an advancer share of 71.5% after 29.6% on Wednesday, same computation, same $1M-traded filter (5385 of 11351 names fall below it). Against 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 started at 62.4% advancers, Tuesday and Wednesday sank to 33.9% and 29.6%, and Thursday's 71.4% is the highest of the week's four completed sessions (Friday July 10 postdates this recap). QQQ traced it too: -1.82% Tuesday, 0.25% Wednesday, +1.67% Thursday.
Beyond the chips: how the rest of the market traded
Breadth says most stocks rose; it does not say the rally was even. Below: an equal-weighted basket of three liquid names per sector, the same declared basket every day.
| sector | names | avg_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 led at +4.24%, Energy trailed at -2.01%, a -6.25-point spread (gap_to_best_sector_pct). Financials were the strongest non-chip basket at +1.88%; Staples (-0.91%), Utilities (-0.96%) and Energy closed red. Big tech (AAPL, MSFT and GOOGL) averaged a muted +0.17%. The day's largest open-to-close reversal, META's +8.1% swing, sits outside all eight baskets; inside this one, MSFT's -2.25% open into a +0.33% close was the sharpest round trip.
The semiconductor open, and the fade that followed
gap_pct is the open against Wednesday's close; intraday_pct is the rest of the day. Rows are alphabetical.
| 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 opened +8.14% above Wednesday's close, then gave back -3.98%; LRCX opened +9.67% and faded -3.26%; TER (+7.87%) and WDC (+7.89%) traced the same shape. MU gapped +7.07%, slid -2.56%, still closed +4.33% on 33.56B, the tape's heaviest name for a second session (Wednesday's recap has the first). AMD and SNDK were the exceptions: AMD added 1.75% after a +3.87% open to finish +5.68%, and SNDK, already +6.14% at the open, added another 1.23% to close +7.45%. And NVDA: a +0.16% open, no gap, into a -0.68% close.
| jul9_green | jul9_red | jul8_green | nvda_jul9_pct | nvda_jul8_pct | names_counted |
|---|---|---|---|---|---|
| 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 closed green; the 2 red closes were the inverse wrapper, structural on an up day, and NVDA at -0.68%, a day after closing +3.66%. The tape's biggest chip name sat out its own sector's celebration while carrying its heaviest news coverage.
The other side: mega-caps opened down and climbed 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 opened below Wednesday's close; what followed separates them. META opened -3.16% down and climbed +8.1% to a 4.69% close, the most violent open-to-close reversal on the page. MSFT opened -2.25% down and recovered to +0.33%; AMZN (+1.4%) and AAPL (+0.93%) traced it too; TSLA never gapped and climbed to +3.21%. The names that stayed down were not growth: GOOGL (-0.76%), CVX (-1.06%), JNJ (-1.62%). Why stocks gap overnight walks the mechanic.
Where the money traded
| leaderboard | ticker | dollar_volume_bn | shares_m | implied_avg_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 topped the dollar board again at 33.56B, over SPY (24.37B), NVDA (21.28B) and SNDK (20.59B), memory in two of the top four slots. The shares board is a different market: SOXS led at 558.1M shares, implied price $3.91 (relative volume).
| et_time | shares_bn | pct_of_biggest_bucket |
|---|---|---|
| 09:30 | 1.79 | 91.4 |
| 10:00 | 1.4 | 71.3 |
| 10:30 | 1.09 | 55.7 |
| 11:00 | 0.95 | 48.4 |
| 11:30 | 0.82 | 41.9 |
| 12:00 | 0.75 | 38 |
| 12:30 | 0.64 | 32.8 |
| 13:00 | 0.64 | 32.8 |
| 13:30 | 0.66 | 33.7 |
| 14:00 | 0.71 | 36.1 |
| 14:30 | 0.74 | 37.8 |
| 15:00 | 0.84 | 43.1 |
| 15:30 | 1.96 | 100 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
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'
GROUP BY et_time
ORDER BY et_timeA textbook U: the open bucket ran 1.79B shares (91.4% of the biggest), the midday trough 0.64B, and the closing auction half-hour was the day's biggest at 1.96B. Even on a day made at its open, the volume finished at 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_und | top1_strike | top1_type | top1_contracts_k | top1_avg_px | top1_is_0dte | top2_und | top2_strike | top2_type | top2_is_0dte | top3_und | top3_strike | top3_type | top3_is_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'The tape carried 9.99M prints and 58.85M contracts, under Wednesday's 63.26M, calls at 58% of volume, the 0DTE share down to 28.7% from 38.7%. The three busiest contracts were all same-day SPY calls, the 751C (846.6K contracts, average $0.526), the 752C and the 750C, a ladder around SPY's $751.64 close (0DTE options covers the product).
Hedge or bet? A hedge buys strikes away from the money; a bet buys the side it wants.
| 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 sat at the money: 3768.9k calls and 2563.3k puts within half a percent of the close (59.5% calls). The wings split by direction, below the close, 1356.5k puts against 255.4k calls (1.2% call share deeper down); above it, calls took 91.6% of a far thinner 29.1k bucket. The wing volume sat on downside strikes, where protection is bought: an at-the-money ladder, not an 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 quietest fact of the day: 383.44M NBBO updates on the stock tape, -27.7% versus Wednesday. The violence lived in price levels, not in churn at the touch. QQQ led the named tickers at 4.35M, over SPY's 2.71M and NVDA's 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's median quoted spread printed 0.27 bps, QQQ 0.42, NVDA 0.99, ordinary numbers. The wider tail: MU at 4.23 bps, SNDK at 8.79 bps (the bid-ask spread is the cost this measures).
| jul9_avg_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's average quoted spread of 2.071 cents ranked 10 of 22 trailing sessions, inside a 1.809–2.865 cent range: no stress in the quote, even at that open.
| 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 carried 6.9 billion NBBO updates, 18× the stock tape, the SPY root alone at 242M.
Rates: the 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'The July 9 treasury print landed after authoring, on the daily yield file's usual lag, 1 row now on record. 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 easing off July 8's mark while the long end held.
The calendar behind the day
| ex_dividend_records | splits_executed | reverse_splits | forward_splits | fil_424b2 | fil_form4 | fil_8k | fil_total | news_articles | news_publishers | top_news_ticker | top_news_n | top_news_lead_over_next | top_news_is_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_nvdaA routine calendar under an unroutine open: 127 ex-dividend records, 5 reverse splits, 1 forward split, 2981 SEC filings (623 Form 4s, 606 424B2s, 149 8-Ks). The feed ran 184 articles across 3 publishers; most-covered ticker NVDA, 20 articles, 8 clear of the next name.
On deck
From our own tables, facts about the next session, not forecasts.
| 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 is 2026-07-10, 0 holiday rows against it: a normal Friday. 153 companies go ex-dividend that morning, 0 from our household-name checklist. Friday's SPY expiry is the heaviest forward one already traded, 1.66M contracts on July 9 versus 0.57M against the July monthly. Short-interest clock: latest settlement on file 2026-06-15, 0 rows yet filed for mid-July, FINRA publishes about eight business days after settlement (why short interest is two weeks old).
The session, verified
| 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'A full ordinary session: first SPY bar 04:00 ET, last 19:59 ET, 390 regular minute bars, no holiday row. Next closure: Labor Day, September 7, 2026.
FAQ
What happened in the stock market on July 9, 2026?
Every index ETF closed higher, QQQ +1.67%, IWM +1.29%, SPY +0.85%, DIA +0.29%, 71.5% of liquid stocks up. Chip-equipment names gapped up and faded; mega-caps gapped down and recovered.
Why did chip-equipment stocks like KLAC and LRCX jump on July 9, 2026?
Our data names no reason: no article and no SEC filing for KLAC, LRCX, TER or WDC from Wednesday's close through Thursday's. The move was already priced premarket, before 9:30 am ET.
Why did NVDA fall while the chip sector rallied?
NVDA closed -0.68% while 12 of fourteen chip names closed green. It never gapped (0.16% at the open) and was the most-covered ticker at 20 articles, co-occurrence on the record, cause not in this data.
Was July 9, 2026 an unusual day for the market?
Not at the index level: QQQ's move ranked 10 of 21 trailing sessions by size, SPY's average spread 10 of 22. The dispersion underneath was: -6.25 points between best and worst sector basket.
Data notes
Regular hours are 13:30–20:00 UTC (9:30 am–4:00 pm ET); the premarket panel uses 08:00–13:30 UTC. The eight sector baskets are curated and equal-weighted, three liquid names each, every ticker listed in that panel's SQL. That is a declared method, not a vendor classification: three names speak for themselves, not for a whole sector. The catalyst panel counts our news feed and the EDGAR index only.
Full data notes
Per-ticker panels are alphabetical, so each prose reference points at a fixed row; leaderboards are value-ordered, every positional claim bounded. The treasury print and the mid-July short-interest settlement are bounded to zero rows, their arrival holds this post for a rewrite.
Methodology
- Sources: each panel's SQL names its own tables, minute aggregates, the stock and options NBBO caches, options trades, our news feed, the EDGAR index, dividends, short interest, holidays, treasury yields.
- Conventions: raw UTC literals in WHERE, ET labels only in SELECT; gap = first regular bar's open ÷ prior regular close − 1; prior-session and prior-week figures computed in-query, never carried from an earlier post. Warehouse as-of July 13, 2026.