Market Recap: July 10, 2026, The Day in Numbers
NVDA woke up and led the whole tape a day after sitting out. META doubled down, MU cooled, small caps slipped, and the index barely moved. Friday in numbers.
Friday, July 10, 2026 was the rotation's third act: NVDA, the chip that sat out Thursday's sector celebration, woke up and led the entire tape, +4.04% on 26.56B of dollars traded, the heaviest name of the session. META ran +6.02% on top of Thursday's reversal, while MU, the week's volume monster, finally cooled (-1.19%). The indexes barely registered any of it: SPY +0.43%, QQQ +0.32%, and small caps closed red. Every number below is read from a stored query, expand any panel for the exact SQL.
The scoreboard
Every change compares July 10's last regular-session minute bar with Thursday July 9's, consecutive trading sessions. 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 | 524.22 | 525.64 | 525.77 | 0.27 | 0.02 | 0.3 | 526.47 | 521.74 | 3.1 |
| IWM | 297.26 | 297.69 | 295.96 | 0.14 | -0.58 | -0.44 | 298.21 | 293.62 | 14.2 |
| QQQ | 723.19 | 720.7 | 725.54 | -0.34 | 0.67 | 0.32 | 726.39 | 717 | 23.7 |
| SPY | 751.64 | 752.05 | 754.9 | 0.05 | 0.38 | 0.43 | 755.42 | 748.1 | 34.9 |
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-09 13:30:00' AND window_start < '2026-07-09 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-10 13:30:00' AND window_start < '2026-07-10 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 tickerThree of the four closed green, none of them dramatically: SPY +0.43% to $754.9, QQQ +0.32% (a -0.34% opening dip bought back through the day), DIA +0.3%. The odd one out was IWM at -0.44%, small caps, Thursday's co-stars, handed their gains back while the mega-cap end of the tape carried the day. That size split is the day's cleanest divergence; with both treasury prints still in transit, its rates side is not yet on the record.
Was the day unusual?
SPY's open-to-close move of +0.38% ranked 11 of 22 trailing sessions by absolute size, the third straight session where violent single-name action netted out to a mid-pack index day.
| spy_open_to_close_pct | spy_abs_move_rank | spy_sessions_compared | first_session |
|---|---|---|---|
| 0.38 | 11 | 22 | 2026-06-09 |
The exact SQL behind every number
SELECT
round(anyIf(oc_pct, d = toDate('2026-07-10')), 2) AS spy_open_to_close_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-10'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-10'))) + 1 AS spy_abs_move_rank,
count() AS spy_sessions_compared,
toString(min(d)) AS first_session
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-06-09 13:30:00')
AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)Breadth: back to a split tape
| advancers | decliners | liquid_tickers | advancer_pct | jul9_advancer_pct |
|---|---|---|---|---|
| 3191 | 2580 | 5866 | 54.4 | 71.5 |
The exact SQL behind every number
SELECT
countIf(close_10 > close_9 AND close_9 > 0 AND dv_10 >= 1000000) AS advancers,
countIf(close_10 < close_9 AND close_9 > 0 AND dv_10 >= 1000000) AS decliners,
countIf(close_9 > 0 AND close_10 > 0 AND dv_10 >= 1000000) AS liquid_tickers,
round(100.0 * countIf(close_10 > close_9 AND close_9 > 0 AND dv_10 >= 1000000) / countIf(close_9 > 0 AND close_10 > 0 AND dv_10 >= 1000000), 1) AS advancer_pct,
round(100.0 * countIf(close_9 > close_8 AND close_8 > 0 AND dv_9 >= 1000000) / countIf(close_9 > 0 AND close_8 > 0 AND dv_9 >= 1000000), 1) AS jul9_advancer_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 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,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')) AS close_10,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') AS dv_10,
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
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-10 20:00:00'
GROUP BY ticker
)After Thursday's 71.5% surge, the advancer share settled back to 54.4%, 3191 up, 2580 down across the liquid tape. A green index day with barely-positive breadth: the gains concentrated in the biggest names. The practical read: a cap-weighted gain on a split tape describes its heaviest names, not the typical stock, concentration on display, not a forecast.
The day's highlight: NVDA's turn
Rows are alphabetical, so each name keeps a fixed position, ten names spanning the chip complex and the mega-caps.
| ticker | prior_close | day_open | day_close | gap_pct | intraday_pct | pct_chg | day_dollar_bn |
|---|---|---|---|---|---|---|---|
| AAPL | 316.17 | 314.72 | 315.33 | -0.46 | 0.19 | -0.27 | 7.39 |
| AMD | 546.66 | 544 | 557.99 | -0.49 | 2.57 | 2.07 | 10.2 |
| AMZN | 246.95 | 249.55 | 245.33 | 1.05 | -1.69 | -0.66 | 6.13 |
| GOOGL | 358.89 | 357.52 | 356.93 | -0.38 | -0.17 | -0.55 | 4.93 |
| INTC | 112.55 | 109.58 | 109.83 | -2.64 | 0.23 | -2.42 | 6.62 |
| META | 631.31 | 660.34 | 669.31 | 4.6 | 1.36 | 6.02 | 22.82 |
| MSFT | 384.33 | 387.8 | 385.09 | 0.9 | -0.7 | 0.2 | 7.12 |
| MU | 990.5 | 964.98 | 978.69 | -2.58 | 1.42 | -1.19 | 25.9 |
| NVDA | 202.76 | 202 | 210.96 | -0.37 | 4.44 | 4.04 | 26.56 |
| SNDK | 1858.26 | 1778.98 | 1915.91 | -4.27 | 7.7 | 3.1 | 17.01 |
The exact SQL behind every number
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-10 00:00:00')) AS prior_close,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-10 00:00:00')) AS day_open,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-10 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'AMD', 'AMZN', 'GOOGL', 'INTC', 'META', 'MSFT', 'MU', 'NVDA', 'SNDK')
AND ((window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00')
OR (window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 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 tickerNVDA closed +4.04%, its best day of the week, one session after closing red while every other chip rallied (Thursday's recap has the receipts). META added +6.02% on 22.82B of dollars, back-to-back outsized green days after its violent Thursday reversal. The memory trade cooled: MU closed -1.19% after two heavy green sessions, and INTC gave back -2.42%. SNDK (+3.1%) and AMD (+2.07%) kept climbing. The rest of the mega-cap shelf was quiet, AAPL -0.27%, MSFT +0.2%, AMZN -0.66%, a one-stock day wearing a sector's clothes.
Did the rally reach the rest of the market?
The eleven SPDR sector funds, Friday's close over Thursday's:
| ticker | prior_close | day_close | pct_chg | day_dollar_bn |
|---|---|---|---|---|
| XLB | 50.28 | 50.89 | 1.21 | 0.37 |
| XLC | 110.54 | 111.64 | 1 | 0.69 |
| XLE | 54.81 | 55.08 | 0.49 | 1.19 |
| XLF | 55.54 | 55.71 | 0.31 | 1.17 |
| XLI | 181.12 | 181.96 | 0.46 | 0.93 |
| XLK | 185.34 | 185.78 | 0.24 | 1.08 |
| XLP | 83.22 | 84.13 | 1.09 | 0.65 |
| XLRE | 44.22 | 44.44 | 0.5 | 0.15 |
| XLU | 45.12 | 45.4 | 0.62 | 0.59 |
| XLV | 162.16 | 160.88 | -0.79 | 1.38 |
| XLY | 116.87 | 117.2 | 0.28 | 0.65 |
The exact SQL behind every number
WITH per_etf AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-10 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-10 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND ((window_start >= '2026-07-09 13:30:00' AND window_start < '2026-07-09 20:00:00')
OR (window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round(prior_close, 2) AS prior_close,
round(day_close, 2) AS day_close,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
day_dollar_bn
FROM per_etf
ORDER BY tickerThe green ran wider than a chip story, and not where a chip story would put it. Materials (+1.21%), consumer staples (+1.09%) and communication services (+1%), the fund that holds META, topped the board, while technology, home of the day's headline stock with MU and INTC red inside it, added just 0.24%. Health care was the lone decliner at -0.79%. No sector fund moved even two points: ten of eleven green, all shallow, the drama in single names.
What the news feed said
The panels say what moved; the feed says what was written. Every July 10 headline tagged NVDA or META whose title names the company:
| et_time | title | publisher |
|---|---|---|
| 03:05 | Global Power Solutions Announces Registration to Attend Data Centre West 2026 in Calgary and Applauds Meta’s Historic CAD $13 Billion Alberta Data Centre Investment | GlobeNewswire Inc. |
| 11:19 | Nvidia Is the Cheapest It's Been Since 2019. Why Investors Should Load Up Now. | The Motley Fool |
| 11:20 | Why Meta Platforms Stock Jumped on Friday | The Motley Fool |
| 12:03 | AI Price War Breaks Out as Meta Tries to Buy Its Way Into the Frontier | Investing.com |
| 18:02 | 3 Reasons I Think Meta Platforms is a Screaming Buy Right Now | The Motley Fool |
The exact SQL behind every number
SELECT
formatDateTime(toTimeZone(published_utc, 'America/New_York'), '%H:%i') AS et_time,
title,
JSONExtractString(publisher, 'name') AS publisher
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-10'
AND (has(tickers, 'NVDA') OR has(tickers, 'META'))
AND NOT has(tickers, 'SPCX')
AND (positionCaseInsensitive(title, 'nvidia') > 0 OR positionCaseInsensitive(title, 'meta') > 0)
ORDER BY published_utc ASC, title ASCMETA's back-to-back green days came with a story attached: an overnight GlobeNewswire wire (03:05 ET) applauded what it called Meta's "historic" Alberta data-centre investment, and Investing.com's midday framing (12:03 ET) read "AI Price War Breaks Out as Meta Tries to Buy Its Way Into the Frontier." NVDA drew no catalyst headline at all: the lone Nvidia-named piece (11:19 ET, The Motley Fool) was valuation commentary. The attributions are the publishers'; from the tape alone the cause of NVDA's move is unknown, and saying so beats inventing one.
Where the money traded
| leaderboard | ticker | dollar_volume_bn | shares_m | implied_avg_price |
|---|---|---|---|---|
| by dollars traded | NVDA | 26.56 | 127.4 | 208.48 |
| by dollars traded | SPY | 26.29 | 34.9 | 753.3 |
| by dollars traded | MU | 25.9 | 26.5 | 977.36 |
| by dollars traded | META | 22.82 | 34.1 | 669.21 |
| by dollars traded | SKHYV | 18.03 | 105 | 171.71 |
| by dollars traded | QQQ | 17.15 | 23.7 | 723.63 |
| by shares traded | BITO | 2.35 | 270.3 | 8.69 |
| by shares traded | SOXS | 1.84 | 445 | 4.13 |
| by shares traded | TZA | 0.84 | 209.6 | 4.01 |
| by shares traded | DFNS | 0.02 | 188.9 | 0.11 |
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
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-10 13:30:00' AND window_start < '2026-07-10 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-10 13:30:00' AND window_start < '2026-07-10 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard, dollar_volume_bn DESCThe dollar board's top three finished within a billion of each other, NVDA at 26.56B, SPY at 26.29B, MU at 25.9B, with NVDA taking the crown after MU's two-session reign. META at 22.82B out-traded QQQ, a single stock printing more dollars than the index that holds it. Wedged in at #5: a ticker that did not exist the day before, next section.
The other headline: a mega-listing's first tape
Friday was also a debut day, the largest US listing since SpaceX's June offering: SK Hynix Inc's US shares began trading under a brand-new symbol and immediately ranked among the tape's heaviest names:
| recorded_issue_price | raised_bn | first_rth_open | open_vs_issue_pct | regular_close | rth_dollar_bn | day_shares_m | bars_before_debut |
|---|---|---|---|---|---|---|---|
| 158.14 | 28.1 | 170 | 7.5 | 168.33 | 18.03 | 106.8 | 0 |
The exact SQL behind every number
SELECT
(SELECT round(toFloat64(final_issue_price), 2) FROM global_markets.stocks_ipos
WHERE issuer_name = 'SK Hynix Inc' AND listing_date = '2026-07-10') AS recorded_issue_price,
(SELECT round(total_offer_size / 1e9, 1) FROM global_markets.stocks_ipos
WHERE issuer_name = 'SK Hynix Inc' AND listing_date = '2026-07-10') AS raised_bn,
round(toFloat64(argMinIf(open, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')), 2) AS first_rth_open,
round(100 * (toFloat64(argMinIf(open, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'))
/ (SELECT toFloat64(final_issue_price) FROM global_markets.stocks_ipos
WHERE issuer_name = 'SK Hynix Inc' AND listing_date = '2026-07-10') - 1), 1) AS open_vs_issue_pct,
round(toFloat64(argMaxIf(close, window_start, window_start < '2026-07-10 20:00:00')), 2) AS regular_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') / 1e9, 2) AS rth_dollar_bn,
round(sum(toFloat64(volume)) / 1e6, 1) AS day_shares_m,
(SELECT count() FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SKHYV' AND window_start < '2026-07-10 00:00:00') AS bars_before_debut
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SKHYV' AND window_start >= '2026-07-10 04:00:00' AND window_start < '2026-07-11 00:00:00'The offering records show a recorded issue price of $158.14 and 28.1B raised, second among 2026 US listings only to SpaceX's June deal, receipted just below. The first regular-session print came at $170, 7.5% above it, and the day closed at $168.33 on 18.03B of regular-hours dollars, fifth on the day's board, ahead of QQQ, in its first session. The symbol receipt: 0 bars exist for this ticker before July 10, a genuinely new listing, not a reused symbol. SK Hynix and Micron are the memory industry's two listed giants, and MU, the week's heaviest name, cooled -1.19% on the very session its rival's US line began trading. Co-timing, on the record, the SpaceX debut playbook shows what a listing's first month can add.
Where Friday's raise sits in the year's class:
| issuer_name | listed | raised_bn |
|---|---|---|
| Space Exploration Technologies Corp. | 2026-06-12 | 75 |
| SK Hynix Inc | 2026-07-10 | 28.1 |
| Cerebras Systems Inc | 2026-05-14 | 5.6 |
| Innio N.V. | 2026-06-04 | 2.4 |
| Madison Air Solutions Corp. | 2026-04-16 | 2.2 |
The exact SQL behind every number
SELECT
issuer_name,
toString(listing_date) AS listed,
round(total_offer_size / 1e9, 1) AS raised_bn
FROM global_markets.stocks_ipos
WHERE listing_date >= '2026-01-01' AND listing_date < '2026-07-11'
AND total_offer_size > 0
ORDER BY total_offer_size DESC, issuer_name ASC
LIMIT 5SpaceX's June deal raised $75B, Friday's SK Hynix listing sits second at $28.1B, and third place (Cerebras Systems Inc, $5.6B) is nowhere near, the top two are a tier of their own. The H1 IPO ledger carries the full table.
The options tape
| option_prints_m | contracts_m | jul9_contracts_m | call_pct_of_volume | pct_0dte | jul9_pct_0dte | spy_regular_close | top1_und | top1_strike | top1_type | top1_contracts | top1_avg_px | top1_is_0dte | top1_moneyness |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10.56 | 65.59 | 58.85 | 59.4 | 48.7 | 28.7 | 754.9 | SPY | 755 | C | 1005279 | 0.262 | 1 | 0.1 |
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) = '260710', 1, 0) AS is_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-10 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'
GROUP BY ticker
ORDER BY vol DESC
LIMIT 2
)
) AS top2,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'
) AS spy_regular_close,
(
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'
) AS jul9_contracts_m,
(
SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260709') / sum(size), 1)
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-10 00:00:00'
) AS jul9_pct_0dte
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
jul9_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) = '260710') / sum(size), 1) AS pct_0dte,
jul9_pct_0dte,
spy_regular_close,
top2.1[1] AS top1_und, top2.2[1] AS top1_strike, top2.3[1] AS top1_type, top2.4[1] AS top1_contracts, top2.5[1] AS top1_avg_px, top2.6[1] AS top1_is_0dte,
round(toFloat64(top2.2[1]) - spy_regular_close, 2) AS top1_moneyness
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-10 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'Friday was the week's weekly-expiry session, and it printed like one: 65.59M contracts, the busiest options day of the week, with the 0DTE share jumping to 48.7% from Thursday's 28.7%, the signature of an expiry Friday (when do options expire maps the calendar). Calls ran 59.4% of volume. The busiest single contract: SPY 755C, a same-day contract that finished 0.1 from SPY's $754.9 close.
The quote tape
| jul10_updates_m | jul9_updates_m | day_over_day_pct | jul10_spy_updates_m | jul10_qqq_updates_m | jul10_nvda_updates_m |
|---|---|---|---|---|---|
| 402.21 | 383.44 | 4.9 | 2.48 | 4.28 | 2.24 |
The exact SQL behind every number
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-10')) / 1e6, 2) AS jul10_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-09')) / 1e6, 2) AS jul9_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-10')) / countIf(toDate(sip_timestamp) = toDate('2026-07-09')) - 1) * 100, 1) AS day_over_day_pct,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-10') AND ticker = 'SPY') / 1e6, 2) AS jul10_spy_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-10') AND ticker = 'QQQ') / 1e6, 2) AS jul10_qqq_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-10') AND ticker = 'NVDA') / 1e6, 2) AS jul10_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-09 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'The stock-quote tape carried 402.21M NBBO updates, 4.9% versus Thursday, an ordinary Friday's churn. QQQ (4.28M) led the named counts ahead of SPY (2.48M) and NVDA (2.24M).
| ticker | median_spread_bps |
|---|---|
| SPY | 0.27 |
| QQQ | 0.55 |
| NVDA | 0.96 |
| META | 3.26 |
| AVGO | 3.5 |
| MU | 5 |
| SNDK | 11.04 |
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', 'META', 'MU', 'SNDK', 'AVGO')
AND sip_timestamp >= '2026-07-10 13:30:00' AND sip_timestamp < '2026-07-10 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 quoted a 0.27 bps RTH median spread, QQQ 0.55 bps, NVDA 0.96 bps, no stress anywhere in the quote, even with the leadership churning underneath.
| jul10_options_bn | options_to_stock_ratio | jul10_spy_options_m |
|---|---|---|
| 6.73 | 16.7 | 243 |
The exact SQL behind every number
WITH
(SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-10 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00') AS jul10_options_rows,
(SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-10 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00') AS jul10_stock_quote_rows
SELECT
round(jul10_options_rows / 1e9, 2) AS jul10_options_bn,
round(jul10_options_rows / jul10_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-10 13:30:00' AND sip_timestamp < '2026-07-10 20:00:00') / 1e6, 0) AS jul10_spy_options_mThe options-quote tape ran 6.73 billion NBBO updates, 16.7× the stock tape, with the SPY root at 243 million regular-hours updates on its expiry day.
Rates: both prints on file
| jul9_print_rows | jul10_print_rows | latest_print_date | latest_2y_pct | latest_10y_pct | latest_30y_pct |
|---|---|---|---|---|---|
| 1 | 1 | 2026-07-10 | 4.21 | 4.56 | 5.06 |
The exact SQL behind every number
SELECT
(SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-09') AS jul9_print_rows,
(SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-10') AS jul10_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
FROM global_markets.treasury_yields
WHERE date = '2026-07-10'Both the July 9 and July 10 treasury prints arrived after authoring, on a longer lag than the file's usual single session, 1 and 1 rows now on record. Friday's curve (2026-07-10): 2-year 4.21%, 10-year 4.56%, 30-year 5.06%, back at July 8's marks after Thursday's brief easing in the 2-year. Both receipt columns are bounded to one, so the section stays pinned to the prints it quotes.
The calendar behind the day
| ex_dividend_records | reverse_splits | forward_splits | fil_total | fil_filers | fil_form4 | fil_424b2 | fil_8k | fil_13f | fil_10q | skhyv_final_prospectus | fil_form4_minus_next_form | news_articles | news_publishers | top_news_ticker | top_news_n |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 153 | 6 | 4 | 3137 | 1780 | 694 | 532 | 150 | 99 | 7 | 1 | 162 | 154 | 3 | NVDA | 11 |
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-10'
) AS news,
(
SELECT (argMax(t, (n, t)), max(n))
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-10'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news,
(
SELECT (count(), uniqExact(cik), countIf(form_type = '4'), countIf(form_type = '424B2'), countIf(form_type = '8-K'), countIf(form_type = '13F-HR'), countIf(form_type = '10-Q'), countIf(form_type = '424B4' AND positionCaseInsensitive(issuer_name, 'hynix') > 0), countIf(form_type = '4') - (SELECT max(n) FROM (SELECT count() AS n FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-10' AND form_type != '4' GROUP BY form_type)))
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date = '2026-07-10'
) AS fil
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-10') AS ex_dividend_records,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-10') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-10') AS forward_splits,
fil.1 AS fil_total,
fil.2 AS fil_filers,
fil.3 AS fil_form4,
fil.4 AS fil_424b2,
fil.5 AS fil_8k,
fil.6 AS fil_13f,
fil.7 AS fil_10q,
fil.8 AS skhyv_final_prospectus,
fil.9 AS fil_form4_minus_next_form,
news.1 AS news_articles, news.2 AS news_publishers,
top_news.1 AS top_news_ticker, top_news.2 AS top_news_n153 ex-dividend records, 6 reverse and 4 forward splits executed, and 154 news articles across 3 publishers, with NVDA the most-covered ticker at 11 articles. The SEC's EDGAR daily index carries 3137 filings for July 10, from 1780 distinct filers. Insider paperwork dominates the mix: 694 Form 4s, the filing an officer or director submits after buying or selling their own company's stock (the common SEC filings explains each one). The rest of the day's mix runs 532 424B2 pricing supplements (the prospectus a bank files for each new structured note), 150 8-K current reports, 99 quarterly 13F-HR holdings reports from institutional managers, and just 7 10-Q quarterly reports, with July 10 sitting between reporting seasons.
The day's other headline left a paper trail of its own. SK hynix Inc. filed a 424B4, the final priced prospectus a company files once its offering is done, on the same session its US line began trading: 1 such filing sits on July 10's index under that issuer's name.
Was that a busy filing day? The week gives the answer.
| filing_date | filings | filers |
|---|---|---|
| 2026-07-06 | 5019 | 2883 |
| 2026-07-07 | 3485 | 2053 |
| 2026-07-08 | 3731 | 2163 |
| 2026-07-09 | 2981 | 1781 |
| 2026-07-10 | 3137 | 1780 |
The exact SQL behind every number
SELECT
toString(filing_date) AS filing_date,
count() AS filings,
uniqExact(cik) AS filers
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-06' AND filing_date < '2026-07-11'
GROUP BY filing_date
ORDER BY filing_dateMonday July 6 was the week's heaviest index at 5019 filings, Thursday its lightest at 2981. Friday's 3137 lands between them, from 1780 filers: an ordinary day on the paperwork tape, whatever the price tape was doing.
On deck
Next week, from the same tables:
| holiday_rows_next_week | exdiv_records_next_week | household_exdivs | splits_next_week | jul17_expiry_pct_of_friday_volume | jul17_expiry_contracts_m | latest_si_settlement | si_settlement_age_days |
|---|---|---|---|---|---|---|---|
| 0 | 692 | 0 | 42 | 17.8 | 11.69 | 2026-06-30 | 10 |
The exact SQL behind every number
SELECT
(SELECT count() FROM global_markets.stocks_market_holidays
WHERE date >= '2026-07-13' AND date <= '2026-07-17') AS holiday_rows_next_week,
(SELECT count() FROM global_markets.stocks_dividends
WHERE ex_dividend_date >= '2026-07-13' AND ex_dividend_date <= '2026-07-17') AS exdiv_records_next_week,
(SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'JNJ', 'XOM', 'KO', 'PG', 'WMT', 'CVX', 'HD'))
FROM global_markets.stocks_dividends
WHERE ex_dividend_date >= '2026-07-13' AND ex_dividend_date <= '2026-07-17') AS household_exdivs,
(SELECT count() FROM global_markets.stocks_splits
WHERE execution_date >= '2026-07-13' AND execution_date <= '2026-07-17') AS splits_next_week,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717') / sum(size), 1) AS jul17_expiry_pct_of_friday_volume,
round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717')) / 1e6, 2) AS jul17_expiry_contracts_m,
(SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
WHERE _ingest_time < '2026-07-12 00:00:00') AS latest_si_settlement,
(SELECT dateDiff('day', max(settlement_date), toDate('2026-07-10')) FROM global_markets.stocks_short_interest
WHERE _ingest_time < '2026-07-12 00:00:00') AS si_settlement_age_days
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-10 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'The holiday table carries 0 rows for July 13–17, five full sessions scheduled, next closure Labor Day (2026-09-07). 692 dividend records go ex-dividend, 0 among ten checked household names, and 42 splits execute. The marked date is Friday, July 17: the third Friday, the July monthly options expiration, with 17.8% of Friday's option volume (11.69M contracts) already in that expiry. The newest short-interest settlement on file is 2026-06-30, 10 days old, the mid-July print arrives on the usual lag.
The session, verified
| first_spy_bar_et | last_spy_bar_et | regular_session_bars | day_sessions | jul10_holiday_rows | next_closure_date | next_closure_name |
|---|---|---|---|---|---|---|
| 04:00 | 19:59 | 390 | 1 | 0 | 2026-09-07 | 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,
countIf(window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-10') AS jul10_holiday_rows,
(SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-10' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-10' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-10 00:00:00' AND window_start < '2026-07-11 00:00:00'A full ordinary session: first SPY bar 04:00 ET, last 19:59 ET, 390 regular-hours bars, 1 session in the window, no holiday row. Next scheduled closure: Labor Day on 2026-09-07.
FAQ
How did the stock market do on Friday, July 10, 2026?
SPY closed +0.43%, QQQ +0.32%, DIA +0.3%; small-cap IWM slipped -0.44%, and only 54.4% of liquid tickers advanced, a modest green index on a split tape.
Why did Nvidia stock go up on July 10, 2026?
NVDA closed +4.04% on 26.56B of dollars traded, the session's heaviest name, a day after sitting out a chip rally. Our news feed carried no catalyst headline for it; the cause is not identifiable from this data.
What was the biggest IPO of 2026 so far?
By dollars raised, SpaceX's June listing at $75 billion. SK Hynix's July 10 debut ranks second at $28.1 billion.
Was July 10, 2026 an options expiration day?
Yes, a weekly Friday expiry: 0DTE contracts took 48.7% of option volume, up from 28.7% Thursday. The next monthly expiration is Friday, July 17.
Data notes
Named per-ticker panels are ordered alphabetically so prose references point at fixed rows; leaderboards are value-ordered, positional claims encoded as sanity bounds. One data-arrival receipt is a deliberate tripwire bounded to zero: the treasury prints for July 9 and July 10, neither of which is on file yet, so their arrival holds the post for a rates rewrite. The July 10 EDGAR daily index was the second such tripwire, it has since landed, and this version reads the real filing counts. The quote tapes (stock and options) were verified complete before the quote section was written. The sector read uses the eleven SPDR select-sector funds, a fixed, declared basket, not a vendor classification. The news panel lists every July 10 headline tagged NVDA or META whose title names the company, one feed's attention, not the world's media. The on-deck block deliberately reads the calendar week after the period.
Methodology
- Market data source: consolidated tape,
delayed_stocks_minute_aggsfor prices and volumes,options_tradesfor the options tape. - Time zone handling: all stored timestamps are UTC; ET labels computed with
toTimeZone(..., 'America/New_York')in SELECT lists only; WHERE clauses use raw UTC literals. - Regular-hours window: 13:30–20:00 UTC, verified against observed SPY minute bars in the session-verification panel.
- Prior-session comparisons: computed in-query from July 9, never carried over from a previous post.
- Deterministic aggregates: tuple-keyed tie-breaks and a deterministic news tie-break for stable regenerations.
- Warehouse as-of date: July 13, 2026 (T+3 for the period); equity minute tapes, options trades, quote tapes and the EDGAR filing index all fully ingested, with the treasury receipt above marking the one dataset still in transit.
Cross-links: July 9, 2026 recap, the full week's recap, when do options expire, 0DTE options, and relative volume.