Market Recap: Week of July 6, 2026
A chip rout, a bounce, the summer's wildest open, and NVDA's Friday — netting out to a quiet index week where most stocks fell and MU out-traded SPY itself.
The week of July 6, 2026 was a semiconductor whipsaw wearing a calm index costume. Inside five sessions: a chip rout, a chip bounce, the most violent open of the summer, and NVDA's Friday reclamation — and the scoreboard nets it all out to SPY +1.4%. Two facts tell the real story: MU printed more dollar volume than SPY itself across the week, and more liquid stocks fell than rose in a week the growth index gained 1.8%. Every number is read from a stored query — expand any panel for the SQL.
The week on the board
Weekly changes run from the prior week's final regular-session close (Thursday July 2 — July 3 was the Independence Day closure) to Friday July 10's close. Rows are alphabetical.
The exact SQL behind every number
SELECT ticker,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-02') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS prior_week_close,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-06') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS week_close,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-07-06') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
/ argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-02') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS week_change_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-02') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
/ argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= '2026-06-22 13:30:00' AND window_start < '2026-07-10 20:00:00'
GROUP BY ticker
ORDER BY tickerThe split is the story: QQQ +1.8% and SPY +1.4% against DIA -0.4% and IWM -0.5%. Growth carried everything; the Dow and the small-cap index finished a green-index week red. Whatever this week was, it was not broad.
The week against the trailing year
The exact SQL behind every number
SELECT round(anyIf(ret, wk = toDate('2026-07-06')), 2) AS week_open_to_close_pct,
arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-06')), groupArrayIf(ret, wk != toDate('2026-07-06'))) + 1 AS rank_best,
count() AS weeks_compared,
toString(min(wk)) AS first_week,
anyIf(sessions, wk = toDate('2026-07-06')) AS sessions_this_week
FROM (
SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-07-06 00:00:00')
AND window_start < toDateTime('2026-07-11 00:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY wk
HAVING sessions >= 3
)Measured open-to-close, SPY's week ranked 20 of 53 trailing weeks — squarely mid-pack. A week containing the summer's most dramatic single open (Thursday) and its sharpest sector rout (Tuesday) lands in the middle of the trailing-year table: the violence canceled itself out. Ordinary is a valid result — and here it is the finding.
Five sessions, one arc
The exact SQL behind every number
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS spy_close,
round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / any(prev) - 1) * 100, 1) AS change_pct,
round(toFloat64(sum(volume)) / 1e6, 1) AS spy_shares_m
FROM global_markets.delayed_stocks_minute_aggs
INNER JOIN (
SELECT d, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-02 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY d
)
) AS p ON toDate(toTimeZone(window_start, 'America/New_York')) = p.d
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-06 00:00:00') AND window_start < toDateTime('2026-07-11 00:00:00')
GROUP BY et_date
ORDER BY et_dateThe arc, session by session: Monday reopened from the holiday with a growth-led gap up (+0.9%, recap); Tuesday the semiconductor complex broke — TER and INTC near −10% — while the index gave back only -0.5% (recap); Wednesday the chips bounced hard and the index sat still (-0.3%, recap); Thursday the whole tape flipped green on the summer's wildest open (+0.8%, recap); Friday NVDA led a quiet finish (+0.4%, recap) to a $754.9 close.
Breadth: a green week where most stocks fell
The exact SQL behind every number
SELECT
countIf(cw > cp AND cp > 0 AND dv >= 5000000) AS advancers,
countIf(cw < cp AND cp > 0 AND dv >= 5000000) AS decliners,
countIf(cp > 0 AND cw > 0 AND dv >= 5000000) AS measured_names,
round(100.0 * countIf(cw > cp AND cp > 0 AND dv >= 5000000) / countIf(cp > 0 AND cw > 0 AND dv >= 5000000), 1) AS advancer_pct
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-03 00:00:00')) AS cp,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00')) AS cw,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 13:30:00') AS dv
FROM global_markets.delayed_stocks_minute_aggs
WHERE ((window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-11 00:00:00'))
GROUP BY ticker
)Across 6319 names with at least $5M traded during the week, 3270 fell against 3015 that rose — an advancer share of just 47.7% in a week the growth index gained 1.8%. The index's green week was manufactured by its largest members; the median stock had a red one. That is the same narrowness the Friday recap caught in a single session, compounded across five.
The tape's leader: MU out-traded the index. For a week.
The exact SQL behind every number
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS week_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-10 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY week_dollar_bn DESC
LIMIT 6MU printed 164B of regular-hours dollar volume across the five sessions — ahead of SPY's 137.3B. A single memory stock out-trading the S&P 500 ETF for an entire week echoes its June performance (MU's June deep-dive measured that month's reign); NVDA (107.1B) and SNDK (88B) put two more memory-complex names in the week's top five. The whipsaw wasn't just price — it was where the market's money spent the whole week arguing. And on Friday the argument gained a participant: SK Hynix's US listing began trading — a 28.1B raise, the year's second-largest after SpaceX — and printed 18.03B of regular-hours dollars in its first session, instantly one of the week's heaviest tickers. The memory complex that dominated this week's tape now has one more listed member; Friday's recap carries the full debut receipts.
The exact SQL behind every number
SELECT
(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(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
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 whipsaw's net result: same complex, opposite weeks
The fourteen chip names that drove every one of the week's stories, measured across the whole week — July 2's close to July 10's. Rows are alphabetical.
The exact SQL behind every number
SELECT ticker,
round((cw / cp - 1) * 100, 1) AS week_pct
FROM (
SELECT ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-03 00:00:00')) AS cp,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')) AS cw
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-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'))
GROUP BY ticker
)
ORDER BY tickerAfter a rout, a bounce, a monster open, and a Friday rally, the complex did not travel together — it split down the middle. AVGO (+11%), STX (+11%), SNDK (+9.9%), NVDA (+8.5%), and WDC (+8.1%) finished with big green weeks; INTC (-8.8%) had a brutal one, and the equipment names that starred in Thursday's giant gaps — KLAC (-1.8%), LRCX (-0.3%) — round-tripped to roughly flat. And the punchline: MU, the name that out-traded the S&P 500 ETF all week, netted +0.3%. 164 billion dollars changed hands to move the price almost nowhere — the purest picture of a market arguing with itself at maximum volume.
The shorts: one truncated file inside an otherwise complete week
The exact SQL behind every number
SELECT toString(date) AS d,
uniqExact(ticker) AS tickers_on_file,
round(sum(short_volume) / 1e9, 2) AS short_shares_bn
FROM global_markets.stocks_short_volume
WHERE date >= '2026-07-06' AND date <= '2026-07-10'
GROUP BY date
ORDER BY dateFour of the five daily short-volume files arrived complete, at roughly 15384 tickers each. Tuesday July 7's file carries only 4333 — less than a third of its neighbors — with total short shares (1.81B vs ~4.62B on complete days) shrunk to match. The same truncation pattern hit the June 29 file (documented in that week's recap), and July 7 was, of all days, the rout day. Treat any per-ticker short-volume claim about July 7 as unverifiable until the file is refiled; daily short volume is a flow metric and this is exactly the failure mode it inherits from its source files.
The options week: the same-day crowd breathed with the calendar
The exact SQL behind every number
SELECT toDate(sip_timestamp) AS d,
round(toFloat64(sum(size)) / 1e6, 1) AS contracts_m,
round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = formatDateTime(toDate(sip_timestamp), '%y%m%d')) / sum(size), 1) AS pct_0dte
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00'
GROUP BY d
ORDER BY dContract volume held between 58.9M (Thursday, the week's lightest) and 65.6M on Friday, the week's heaviest. The 0DTE share told the calendar's story: it sagged to 28.7% on Thursday — a session with no major expiry pull — and jumped to 48.7% on Friday as the weeklies expired, the rhythm the expiration calendar predicts. Same-day trading is a standing fraction of this market, but the calendar still decides how big the fraction gets.
Rates: drifting up, two prints in transit
The exact SQL behind every number
SELECT
round((toFloat64(anyIf(yield_2_year, date = '2026-07-08')) - toFloat64(anyIf(yield_2_year, date = '2026-07-02'))) * 100) AS chg_2y_bp,
round((toFloat64(anyIf(yield_10_year, date = '2026-07-08')) - toFloat64(anyIf(yield_10_year, date = '2026-07-02'))) * 100) AS chg_10y_bp,
round((toFloat64(anyIf(yield_30_year, date = '2026-07-08')) - toFloat64(anyIf(yield_30_year, date = '2026-07-02'))) * 100) AS chg_30y_bp,
round(toFloat64(anyIf(yield_10_year, date = '2026-07-08')), 2) AS y10_jul8_pct,
round(toFloat64(anyIf(yield_30_year, date = '2026-07-08')), 2) AS y30_jul8_pct,
(SELECT count() FROM global_markets.treasury_yields WHERE date IN ('2026-07-09', '2026-07-10')) AS jul9_jul10_print_rows
FROM global_markets.treasury_yields
WHERE date IN ('2026-07-02', '2026-07-08')Through the week's latest landed print (July 8), the curve drifted up in near-parallel from the prior week's close: 2-year +7 bp, 10-year +7 bp to 4.56%, 30-year +8 bp to 5.06% — no twist, just level. The July 9 and 10 prints were still in transit at authoring (0 rows between them, bounded to zero as this page's tripwire): when they land, this section gets the week's true endpoint.
The calendar behind the week
The exact SQL behind every number
SELECT
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-06' AND filing_date <= '2026-07-10') AS filings_week,
(SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-10') AS filings_friday,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-06' AND ex_dividend_date <= '2026-07-10') AS ex_dividends_week,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-06' AND execution_date <= '2026-07-10') AS reverse_splits_week,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-06' AND execution_date <= '2026-07-10') AS forward_splits_week,
(SELECT count() FROM global_markets.stocks_news WHERE toDate(toTimeZone(published_utc, 'America/New_York')) >= '2026-07-06'
AND toDate(toTimeZone(published_utc, 'America/New_York')) <= '2026-07-10') AS news_week15165 SEC filings, 558 ex-dividend records, 30 reverse and 8 forward splits, 981 news articles. One receipt inside that filings total: Friday July 10's daily index contributes 0 — the EDGAR file for the week's last day had not been ingested at authoring (a known lag pattern; dissected here), so the weekly total is bounded as a floor and this page is held for a rewrite when Friday's file lands.
The sessions, verified
The exact SQL behind every number
SELECT
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_in_week,
toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session,
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-06' AND date <= '2026-07-10') AS holiday_rows_in_week,
(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-06 13:30:00' AND window_start < '2026-07-10 20:00:00'
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 11995 full sessions, 2026-07-06 through 2026-07-10, no holiday rows in the window — the first five-session week since mid-June's. Next scheduled closure: Labor Day on 2026-09-07.
Data notes
All timestamps are UTC; regular hours are 13:30-20:00 UTC per session, and week boundaries run from the prior week's final regular-session close (July 2 — the prior week was holiday-shortened) to July 10's close. The weekly trailing rank uses OPEN-to-close weekly returns (the convention its trailing distribution is built on), so its weekly figure differs by construction from the close-to-close scoreboard number — both are labeled. Weekly breadth compares each name's July 2 close with its July 10 close over a $5M-traded-in-week filter. Prior-week comparisons are computed in-query, never quoted from earlier posts. Two arrival tripwires are bounded to zero: the July 9/10 treasury prints, and Friday's EDGAR daily index inside the weekly filings total.
Methodology
- Market data source: consolidated tape —
delayed_stocks_minute_aggsfor prices and volumes,options_tradesfor the options week. - Time zone handling: stored timestamps are UTC; ET labels via
toTimeZone(...)in SELECT lists; WHERE clauses use raw UTC literals (with the ET-clock band for multi-session RTH filters). - Deterministic aggregates: tuple-keyed tie-breaks; positional prose claims encoded as sanity bounds.
- Warehouse as-of date: July 12, 2026 (T+2 for the week's final session); equity and options-trade tapes fully ingested, with treasury and Friday-EDGAR receipts marking what is still in transit.
Cross-links: the five dailies — Monday, Tuesday, Wednesday, Thursday, Friday — plus MU's June deep-dive, when do options expire, and the prior week's recap.