Strasmore Research
Market Recap Matt ConnorBy Matt Connor · Updated 2026-07-26

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.

QuerySPY / QQQ / DIA / IWM: July 10 vs the July 9 close, regular hours
tickerprior_closeday_openday_closegap_pctintraday_pctpct_changeday_highday_lowshares_traded_m
DIA524.22525.64525.770.270.020.3526.47521.743.1
IWM297.26297.69295.960.14-0.58-0.44298.21293.6214.2
QQQ723.19720.7725.54-0.340.670.32726.3971723.7
SPY751.64752.05754.90.050.380.43755.42748.134.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 ticker
Run this yourself

Three 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.

QuerySPY day move in trailing context (~22 sessions, open-to-close)
spy_open_to_close_pctspy_abs_move_rankspy_sessions_comparedfirst_session
0.3811222026-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
)
Run this yourself

Breadth: back to a split tape

QueryLiquid-tape breadth: July 10 advancer share vs July 9, $1M-traded filter
advancersdeclinersliquid_tickersadvancer_pctjul9_advancer_pct
31912580586654.471.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
)
Run this yourself

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.

QueryTen names that defined the session: gap, intraday, close, dollars, July 10
tickerprior_closeday_openday_closegap_pctintraday_pctpct_chgday_dollar_bn
AAPL316.17314.72315.33-0.460.19-0.277.39
AMD546.66544557.99-0.492.572.0710.2
AMZN246.95249.55245.331.05-1.69-0.666.13
GOOGL358.89357.52356.93-0.38-0.17-0.554.93
INTC112.55109.58109.83-2.640.23-2.426.62
META631.31660.34669.314.61.366.0222.82
MSFT384.33387.8385.090.9-0.70.27.12
MU990.5964.98978.69-2.581.42-1.1925.9
NVDA202.76202210.96-0.374.444.0426.56
SNDK1858.261778.981915.91-4.277.73.117.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 ticker
Run this yourself

NVDA 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:

QueryThe eleven SPDR sector ETFs: July 10 close vs July 9 close, regular hours
tickerprior_closeday_closepct_chgday_dollar_bn
XLB50.2850.891.210.37
XLC110.54111.6410.69
XLE54.8155.080.491.19
XLF55.5455.710.311.17
XLI181.12181.960.460.93
XLK185.34185.780.241.08
XLP83.2284.131.090.65
XLRE44.2244.440.50.15
XLU45.1245.40.620.59
XLV162.16160.88-0.791.38
XLY116.87117.20.280.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 ticker
Run this yourself

The 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:

QueryNVDA and META in the news feed on July 10: every company-named headline
et_timetitlepublisher
03:05Global Power Solutions Announces Registration to Attend Data Centre West 2026 in Calgary and Applauds Meta’s Historic CAD $13 Billion Alberta Data Centre InvestmentGlobeNewswire Inc.
11:19Nvidia Is the Cheapest It's Been Since 2019. Why Investors Should Load Up Now.The Motley Fool
11:20Why Meta Platforms Stock Jumped on FridayThe Motley Fool
12:03AI Price War Breaks Out as Meta Tries to Buy Its Way Into the FrontierInvesting.com
18:023 Reasons I Think Meta Platforms is a Screaming Buy Right NowThe 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 ASC
Run this yourself

META'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

QueryTop 6 by dollars traded, top 4 by shares traded: July 10 regular hours
leaderboardtickerdollar_volume_bnshares_mimplied_avg_price
by dollars tradedNVDA26.56127.4208.48
by dollars tradedSPY26.2934.9753.3
by dollars tradedMU25.926.5977.36
by dollars tradedMETA22.8234.1669.21
by dollars tradedSKHYV18.03105171.71
by dollars tradedQQQ17.1523.7723.63
by shares tradedBITO2.35270.38.69
by shares tradedSOXS1.844454.13
by shares tradedTZA0.84209.64.01
by shares tradedDFNS0.02188.90.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 DESC
Run this yourself

The 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:

QuerySK Hynix's first session: the listing record vs the tape, July 10, 2026
recorded_issue_priceraised_bnfirst_rth_openopen_vs_issue_pctregular_closerth_dollar_bnday_shares_mbars_before_debut
158.1428.11707.5168.3318.03106.80
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'
Run this yourself

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:

Query2026's five largest US listings by dollars raised
issuer_namelistedraised_bn
Space Exploration Technologies Corp.2026-06-1275
SK Hynix Inc2026-07-1028.1
Cerebras Systems Inc2026-05-145.6
Innio N.V.2026-06-042.4
Madison Air Solutions Corp.2026-04-162.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 5
Run this yourself

SpaceX'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

QueryOptions tape: contracts, call %, 0DTE share vs Thursday, top contract, Friday expiry day
option_prints_mcontracts_mjul9_contracts_mcall_pct_of_volumepct_0dtejul9_pct_0dtespy_regular_closetop1_undtop1_striketop1_typetop1_contractstop1_avg_pxtop1_is_0dtetop1_moneyness
10.5665.5958.8559.448.728.7754.9SPY755C10052790.26210.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'
Run this yourself

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

QueryStocks NBBO update count: July 10 vs July 9, with named-ticker updates (millions)
jul10_updates_mjul9_updates_mday_over_day_pctjul10_spy_updates_mjul10_qqq_updates_mjul10_nvda_updates_m
402.21383.444.92.484.282.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'
Run this yourself

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).

QuerySPY / QQQ / NVDA / META / MU / SNDK / AVGO: RTH median quoted spread in basis points
tickermedian_spread_bps
SPY0.27
QQQ0.55
NVDA0.96
META3.26
AVGO3.5
MU5
SNDK11.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 ASC
Run this yourself

SPY 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.

QueryOptions NBBO tape: total updates vs the stock tape, plus the SPY root slice
jul10_options_bnoptions_to_stock_ratiojul10_spy_options_m
6.7316.7243
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_m
Run this yourself

The 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

QueryTreasury print status: July 9 and July 10 rows on record, and the July 8 curve (latest at authoring)
jul9_print_rowsjul10_print_rowslatest_print_datelatest_2y_pctlatest_10y_pctlatest_30y_pct
112026-07-104.214.565.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'
Run this yourself

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

QueryEx-divs, splits, news, and the July 10 SEC filing mix
ex_dividend_recordsreverse_splitsforward_splitsfil_totalfil_filersfil_form4fil_424b2fil_8kfil_13ffil_10qskhyv_final_prospectusfil_form4_minus_next_formnews_articlesnews_publisherstop_news_tickertop_news_n
153643137178069453215099711621543NVDA11
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_n
Run this yourself

153 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.

QuerySEC filings per day, week of July 6 to July 10
filing_datefilingsfilers
2026-07-0650192883
2026-07-0734852053
2026-07-0837312163
2026-07-0929811781
2026-07-1031371780
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_date
Run this yourself

Monday 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:

QueryThe week of July 13–17: closures, ex-dividends, splits, the monthly expiry, and the short-interest lag
holiday_rows_next_weekexdiv_records_next_weekhousehold_exdivssplits_next_weekjul17_expiry_pct_of_friday_volumejul17_expiry_contracts_mlatest_si_settlementsi_settlement_age_days
069204217.811.692026-06-3010
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'
Run this yourself

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

QuerySession verification: first/last SPY bar ET, regular-bar count, holiday receipts, next closure
first_spy_bar_etlast_spy_bar_etregular_session_barsday_sessionsjul10_holiday_rowsnext_closure_datenext_closure_name
04:0019:59390102026-09-07Labor 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'
Run this yourself

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_aggs for prices and volumes, options_trades for 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.