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

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 bounce, the summer's most violent open, and NVDA's Friday reclamation, netting out to SPY +1.4%. Two facts tell the 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 below is read from a stored query.

The week on the board

Weekly changes run from Thursday July 2's regular close (July 3 was the Independence Day closure) to Friday July 10's. Rows are alphabetical.

QuerySPY / QQQ / DIA / IWM: week of July 6 vs the July 2 close, with the prior week's change
tickerprior_week_closeweek_closeweek_change_pctprior_week_change_pct
DIA527.83525.77-0.42
IWM297.53295.96-0.50
QQQ712.74725.541.81
SPY744.8754.91.42.2
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 ticker
Run this yourself

The 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

QuerySPY's week in trailing-year context (open-to-close weekly returns, ~53 weeks)
week_open_to_close_pctrank_bestweeks_comparedfirst_weeksessions_this_week
0.8220532025-07-075
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
)
Run this yourself

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 mid-table: the violence canceled itself out, ordinary is the finding.

Five sessions, one arc

QuerySPY by session: close, change, and share volume, July 6-10
et_datespy_closechange_pctspy_shares_m
2026-07-06751.30.949.2
2026-07-07747.66-0.542.5
2026-07-08745.31-0.342.8
2026-07-09751.640.839
2026-07-10754.90.440.9
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_date
Run this yourself

The arc: Monday reopened from the holiday with a growth-led gap up (+0.9%, recap); Tuesday the semiconductor complex broke 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.

The two names at the center of Tuesday's rout, receipted:

QueryTuesday's rout: INTC and TER, July 7 close vs July 6 close
tickerday_pct
INTC-9.6
TER-9.6
The exact SQL behind every number
SELECT ticker, round((c7 / c6 - 1) * 100, 1) AS day_pct
FROM (
    SELECT ticker,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')) AS c6,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS c7
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('INTC', 'TER')
      AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-07 20:00:00'
    GROUP BY ticker
)
ORDER BY ticker
Run this yourself

Tuesday's move at both names: INTC -9.6%, TER -9.6%, against SPY's -0.5% for the session.

What was said

Our prose stays observational; the week's narratives are quoted with names attached. First, the feed's attention across the four names at the whipsaw's center, out of 981 articles for the week:

QueryFeed coverage by day: articles tagging NVDA, MU, INTC, TER, July 6-10
dnvda_articlesmu_articlesintc_articlester_articles
2026-07-06251270
2026-07-07171320
2026-07-08131720
2026-07-09201230
2026-07-1011760
The exact SQL behind every number
SELECT toDate(toTimeZone(published_utc, 'America/New_York')) AS d,
       countIf(has(tickers, 'NVDA')) AS nvda_articles,
       countIf(has(tickers, 'MU')) AS mu_articles,
       countIf(has(tickers, 'INTC')) AS intc_articles,
       countIf(has(tickers, 'TER')) AS ter_articles
FROM global_markets.stocks_news
WHERE published_utc >= '2026-07-06 00:00:00' AND published_utc < '2026-07-11 04:00:00'
  AND toDate(toTimeZone(published_utc, 'America/New_York')) >= '2026-07-06'
  AND toDate(toTimeZone(published_utc, 'America/New_York')) <= '2026-07-10'
GROUP BY d
ORDER BY d
Run this yourself

Those headlines are not paraphrased here. They are read straight from the stored feed:

QueryWhat the news feed actually carried, verbatim (The Motley Fool, rout day and bounce day)
sessionoutletheadline
2026-07-07The Motley FoolMichael Burry Just Revealed His Next Big Short, and It's a Bet Against Nvidia, Micron, and AMD
2026-07-08The Motley FoolWhy Did Sandisk Stock Pop Today?
The exact SQL behind every number
SELECT toString(toDate(toTimeZone(published_utc, 'America/New_York'))) AS session,
       JSONExtractString(publisher, 'name') AS outlet,
       title AS headline
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) IN ('2026-07-07', '2026-07-08')
  AND JSONExtractString(publisher, 'name') = 'The Motley Fool'
  AND (positionCaseInsensitive(title, 'Burry') > 0 OR positionCaseInsensitive(title, 'Sandisk Stock Pop') > 0)
ORDER BY session, title
Run this yourself

On the rout day the feed carried The Motley Fool's "Michael Burry Just Revealed His Next Big Short, and It's a Bet Against Nvidia, Micron, and AMD"; on the bounce day the same outlet asked "Why Did Sandisk Stock Pop Today?." NVDA's Friday rally arrived with no catalyst headline at all, valuation-framed pieces only; cause unknown from this data.

Two findings: MU (17 articles) out-covered NVDA (13) exactly once, Wednesday, the bounce day (NVDA led the other four); and TER, half of the rout's hardest-hit pair, was tagged 0 times on the day it broke and zero every other day. One feed's attention, not the world's media.

Breadth: a green week where most stocks fell

QueryWeekly breadth: July 10 close vs July 2 close, names with $5M+ traded during the week
advancersdeclinersmeasured_namesadvancer_pct
30153270631947.7
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
)
Run this yourself

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. The same narrowness the Friday recap caught in one session, compounded across five.

The sector scoreboard

Where did the falling happen? The ten SPDR sector ETFs, July 2's close to July 10's, alphabetical:

QuerySector ETFs, full-week change: July 10 close vs July 2 close
tickerweek_pct
XLB-2.1
XLE3.5
XLF0.2
XLI-1.1
XLK2.9
XLP-1
XLRE-0.5
XLU-0.8
XLV-1.8
XLY0.1
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 ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      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 ticker
Run this yourself

Four of the ten sectors closed positive, but only two by any real margin: energy (XLE, +3.5%) and tech (XLK, +2.9%) led. Financials (+0.2%) and consumer discretionary (+0.1%) closed barely above flat. The other six, from materials (-2.1%) to healthcare (-1.8%), finished red. Outside those two clear winners, the board leaned down.

The tape's leader: MU out-traded the index. For a week.

QueryTop names by regular-hours dollar volume, full week July 6-10
tickerweek_dollar_bn
MU164
SPY137.3
NVDA107.1
QQQ103.4
SNDK88
TSLA69.3
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 6
Run this yourself

MU 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 June (MU's June deep-dive); NVDA (107.1B), the week's AI/GPU bellwether, and SNDK (88B), another memory name, round out the week's top five. The whipsaw wasn't just price, it was where the market's money spent the whole week arguing.

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.

QueryThe chip complex's full-week change: July 10 close vs July 2 close, fourteen names
tickerweek_pct
AMD7.7
AVGO11
INTC-8.8
KLAC-1.8
LRCX-0.3
MRVL-3.9
MU0.3
NVDA8.5
SNDK9.9
SOXL6.1
SOXS-9.5
STX11
TER-2.6
WDC8.1
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 ticker
Run this yourself

After 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. 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 week's newest ticker: SK Hynix's US debut

Friday added a listed member to the memory complex that owned the week's tape, the debut, receipted:

QuerySK Hynix's US debut: the raise, the delayed open, the close vs offer, and where the first-day tape ranks in 2026
offer_pxraised_bnbigger_2026_raisesbiggest_2026_raise_bnfirst_rth_pxfirst_rth_bar_et_minutefirst_rth_bar_etdebut_closeclose_vs_offer_pctfaded_from_first_printrth_dollar_bndebuts_measured_2026debut_dollar_rank_2026biggest_2026_debut_bn
158.1428.117517069411:34168.336.41.6718.03144281.2
The exact SQL behind every number
WITH ipo AS (
    SELECT toFloat64(final_issue_price) AS offer, toFloat64(total_offer_size) AS raise
    FROM global_markets.stocks_ipos
    WHERE issuer_name = 'SK Hynix Inc' AND listing_date = '2026-07-10'
    LIMIT 1
),
debuts AS (
    SELECT a.ticker AS t, sum(toFloat64(a.close) * toFloat64(a.volume)) AS debut_rth_dollars
    FROM global_markets.delayed_stocks_minute_aggs a
    INNER JOIN (
        SELECT multiIf(replaceAll(ticker, ' ', '') = 'SKHY', 'SKHYV', replaceAll(ticker, ' ', '')) AS tk, listing_date
        FROM global_markets.stocks_ipos
        WHERE listing_date >= '2026-01-01' AND listing_date <= '2026-07-10'
    ) l ON a.ticker = l.tk
    WHERE a.window_start >= '2026-01-01 00:00:00' AND a.window_start < '2026-07-11 00:00:00'
      AND toDate(a.window_start) = l.listing_date
      AND (toHour(a.window_start) * 60 + toMinute(a.window_start)) BETWEEN 810 AND 1199
    GROUP BY a.ticker
)
SELECT
    round((SELECT offer FROM ipo), 2) AS offer_px,
    round((SELECT raise FROM ipo) / 1e9, 1) AS raised_bn,
    (SELECT countIf(toFloat64(total_offer_size) > (SELECT raise FROM ipo)) FROM global_markets.stocks_ipos WHERE listing_date >= '2026-01-01' AND listing_date <= '2026-07-10') AS bigger_2026_raises,
    round((SELECT max(toFloat64(total_offer_size)) FROM global_markets.stocks_ipos WHERE listing_date >= '2026-01-01' AND listing_date <= '2026-07-10') / 1e9, 1) AS biggest_2026_raise_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_px,
    toHour(toTimeZone(minIf(window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'), 'America/New_York')) * 60
        + toMinute(toTimeZone(minIf(window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'), 'America/New_York')) AS first_rth_bar_et_minute,
    formatDateTime(toTimeZone(minIf(window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'), 'America/New_York'), '%H:%i') AS first_rth_bar_et,
    round(toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')), 2) AS debut_close,
    round((toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')) / (SELECT offer FROM ipo) - 1) * 100, 1) AS close_vs_offer_pct,
    round(toFloat64(argMinIf(open, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'))
        - toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')), 2) AS faded_from_first_print,
    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,
    (SELECT count() FROM debuts) AS debuts_measured_2026,
    (SELECT countIf(debut_rth_dollars > (SELECT debut_rth_dollars FROM debuts WHERE t = 'SKHYV')) + 1 FROM debuts) AS debut_dollar_rank_2026,
    round((SELECT max(debut_rth_dollars) FROM debuts) / 1e9, 1) AS biggest_2026_debut_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'
Run this yourself

The raise: $28.1 billion at $158.14 a share, 1 US raise in 2026 was bigger, SpaceX's $75 billion June listing. With no prior close, the opening cross took until 11:34 ET to find a price: $170. The close, $168.33, faded $1.67 from that first print yet held 6.4% above the offer. And the tape: $18.03 billion of regular-hours dollars, of 144 US debuts measured in 2026, only SpaceX's $81.2 billion first day was heavier.

The week's biggest movers

Beyond chips, who won and lost? On an unadjusted tape the week's 30 reverse splits fake four-digit "gains", so these boards exclude in-week splits and require $5 million traded.

QueryWeekly movers: ten biggest gainers and decliners, $5M+ traded, in-week splits excluded
tickerboardweek_pctweek_dollar_mpct_of_dollar_max
FXHOgainers147.3113.81.2
FBRXgainers109.6305.83.2
CRNXgainers989660.5100
GMMgainers97.6639.36.6
LHSWgainers91.6307.83.2
JZXNgainers89.9356.53.7
TRAXgainers87.4225.62.3
ZCMDgainers86.277.20.8
WRAPgainers72.3172.71.8
SUNEgainers67363.93.8
JEMdecliners-76.426.10.3
ELPWdecliners-70.3105.21.1
HAOdecliners-65.8128.51.3
ALARdecliners-65.114.80.2
CCHHdecliners-55.5105.91.1
SDOTdecliners-53.7366.73.8
ONFOdecliners-47.675.20.8
YHCdecliners-46.917.70.2
GMEXdecliners-44.914.80.2
BYRNdecliners-44.644.80.5
The exact SQL behind every number
SELECT ticker, board, week_pct, week_dollar_m,
       round(100 * week_dollar_m / max(week_dollar_m) OVER (), 1) AS pct_of_dollar_max
FROM (
    SELECT 'gainers' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct, round(dv / 1e6, 1) AS week_dollar_m
    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,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-06' AND execution_date <= '2026-07-10')
          AND ((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
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct DESC
    LIMIT 10
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct, round(dv / 1e6, 1) AS week_dollar_m
    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,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-06' AND execution_date <= '2026-07-10')
          AND ((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
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct ASC
    LIMIT 10
)
ORDER BY board DESC, abs(week_pct) DESC
Run this yourself

Making either board took a big move: the mildest gainer shown rose 67%, the mildest decliner printed -44.6%. Even INTC's brutal chip week (-8.8%) comes nowhere near either bar. The boards are small-cap territory with one loud exception: CRNX, +98% on $9660.5 million traded, the most dollars of the twenty, Tuesday's overnight near-double holding its gain through Friday.

The shorts: one truncated file inside an otherwise complete week

QueryDaily short-volume file coverage: tickers on file and total short shares, July 6-10
dtickers_on_fileshort_shares_bn
2026-07-06153844.62
2026-07-0743331.86
2026-07-08151274.65
2026-07-09151244.61
2026-07-10151164.22
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 date
Run this yourself

Four 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.86B vs ~4.62B on complete days) shrunk to match. The same truncation pattern hit the June 29 file (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.

The options week: the same-day crowd breathed with the calendar

QueryOptions contracts and 0DTE share by session, July 6-10
dcontracts_mpct_0dte
2026-07-066138.7
2026-07-0761.131.2
2026-07-0863.338.7
2026-07-0958.928.7
2026-07-1065.648.7
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 d
Run this yourself

Contract volume ran from 58.9M (Thursday, the lightest) to 65.6M (Friday, the 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. The calendar still decides how big the same-day fraction gets.

Rates: drifting up all week

QueryTreasury curve: the Friday July 10 print vs the July 2 close, both late receipts on file
chg_2y_bpchg_10y_bpchg_30y_bpy10_fri_pcty30_fri_pctjul9_jul10_print_rows
7784.565.062
The exact SQL behind every number
SELECT
    round((toFloat64(anyIf(yield_2_year, date = '2026-07-10')) - toFloat64(anyIf(yield_2_year, date = '2026-07-02'))) * 100) AS chg_2y_bp,
    round((toFloat64(anyIf(yield_10_year, date = '2026-07-10')) - toFloat64(anyIf(yield_10_year, date = '2026-07-02'))) * 100) AS chg_10y_bp,
    round((toFloat64(anyIf(yield_30_year, date = '2026-07-10')) - toFloat64(anyIf(yield_30_year, date = '2026-07-02'))) * 100) AS chg_30y_bp,
    round(toFloat64(anyIf(yield_10_year, date = '2026-07-10')), 2) AS y10_fri_pct,
    round(toFloat64(anyIf(yield_30_year, date = '2026-07-10')), 2) AS y30_fri_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-10')
Run this yourself

Measured to the week's final print (Friday, July 10), 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 arrived after authoring on a longer-than-usual lag (2 rows now on file); this section carries the completed week.

The calendar behind the week

QueryThe week's corporate calendar: filings, dividends, splits, news
filings_weekfilings_fridaymonday_minus_next_busiestmonday_over_friday_form4min_daily_424b2max_daily_424b2ex_dividends_weekreverse_splits_weekforward_splits_weeknews_week
18353313712883.6487679560309981
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,
    toInt64((SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-06'))
        - toInt64((SELECT max(c) FROM (SELECT count() AS c FROM global_markets.stocks_sec_edgar_index WHERE filing_date > '2026-07-06' AND filing_date <= '2026-07-10' GROUP BY filing_date))) AS monday_minus_next_busiest,
    (SELECT round(countIf(form_type = '4' AND filing_date = '2026-07-06') / countIf(form_type = '4' AND filing_date = '2026-07-10'), 1) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-06' AND filing_date <= '2026-07-10') AS monday_over_friday_form4,
    (SELECT min(c) FROM (SELECT count() AS c FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-06' AND filing_date <= '2026-07-10' AND form_type = '424B2' GROUP BY filing_date)) AS min_daily_424b2,
    (SELECT max(c) FROM (SELECT count() AS c FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-06' AND filing_date <= '2026-07-10' AND form_type = '424B2' GROUP BY filing_date)) AS max_daily_424b2,
    (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_week
Run this yourself

18353 SEC filings, 560 ex-dividend records, 30 reverse and 9 forward splits, 981 news articles. Friday July 10's EDGAR index was still in transit when this page first ran (an ingest lag we have written about before). It has since landed at 3137 filings, so the weekly total above now counts all five sessions.

The filing week, by day and by form:

QuerySEC filings by session and form type, July 6-10
dfilingsform4form8kf424b2
2026-07-0650192464203487
2026-07-073485958175679
2026-07-083731775163527
2026-07-092981623149606
2026-07-103137694150532
The exact SQL behind every number
SELECT toString(filing_date) AS d,
       count() AS filings,
       countIf(form_type = '4') AS form4,
       countIf(form_type = '8-K') AS form8k,
       countIf(form_type = '424B2') AS f424b2
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-06' AND filing_date <= '2026-07-10'
GROUP BY filing_date
ORDER BY filing_date
Run this yourself

Monday was the week's heaviest filing session at 5019, clearing the next-busiest day by 1288, and the insider Form 4 was its largest component: 2464 of them, 3.6 times Friday's 694, on the first session following the four-day Independence Day break. The steadiest line is the 424B2, the shelf-takedown prospectus banks file for structured notes: it held a narrow band every session, 487 to 679. Insider paperwork breathes with the calendar. The note machine does not.

Friday's file also carries the week's newest ticker. SK Hynix's paper trail into its US listing:

QuerySK Hynix's SEC paper trail into its July 10 US listing
filing_dateform_type
2026-06-11DRS/A
2026-06-24F-1
2026-07-01F-6
2026-07-06F-1/A
2026-07-098-A12B
2026-07-09CERT
2026-07-09EFFECT
2026-07-09EFFECT
2026-07-10424B4
The exact SQL behind every number
SELECT toString(filing_date) AS filing_date,
       form_type
FROM global_markets.stocks_sec_edgar_index
WHERE issuer_name = 'SK hynix Inc.'
  AND filing_date >= '2026-06-01' AND filing_date <= '2026-07-10'
ORDER BY filing_date ASC, form_type ASC
Run this yourself

The registration statement in June, the amendment on Monday of this week, the exchange certification on Thursday, then the last row: the 424B4 final prospectus, filed 2026-07-10, the session the stock opened. The filing index and the tape agree on the date.

The sessions, verified

QuerySession verification: five sessions, no holiday, next scheduled closure
sessions_in_weekfirst_sessionlast_sessionholiday_rows_in_weeknext_closure_datenext_closure_name
52026-07-062026-07-1002026-09-07Labor Day
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 1199
Run this yourself

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

On deck

Next week, from our own tables:

QueryNext week on the calendar: closures, ex-dividends, and the monthly expiry's pull
closures_next_weekex_dividends_next_weekhousehold_ex_div_next_weekjul17_expiry_pct_of_week_volume
0692014
The exact SQL behind every number
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-11' AND date <= '2026-07-17' AND status != 'open') AS closures_next_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-13' AND ex_dividend_date <= '2026-07-17') AS ex_dividends_next_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-13' AND ex_dividend_date <= '2026-07-17') AS household_ex_div_next_week,
    (SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717') / sum(size), 1) FROM global_markets.options_trades WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-11 00:00:00') AS jul17_expiry_pct_of_week_volume
Run this yourself

The holiday table shows 0 closures next week, five full sessions. 692 ex-dividend records fall inside it, none from the ten household names the panel checks. Next Friday is the third Friday of July, the monthly options expiration, and contracts expiring that day already carried 14% of this week's options volume. One receipt stays open: the July 9 and July 10 treasury prints (2 rows on file), a zero-bounded tripwire that holds this page's regeneration until Treasury's file lands. Friday's EDGAR index, the page's other tripwire, has already landed and is read in full above.

FAQ

How did the stock market do the week of July 6, 2026?

Split: SPY rose 1.4% and QQQ 1.8%, DIA and IWM finished red, and 3270 of 6319 measured liquid stocks fell.

Which sector performed best the week of July 6, 2026?

Energy: XLE gained 3.5%, ahead of tech's +2.9%, the two clear winners of the ten. Financials and consumer discretionary also closed marginally positive (+0.2%, +0.1%), with the other six in the red.

How did SK Hynix's US stock market debut go?

It raised $28.1 billion, 2026's second-largest US raise, behind SpaceX, and closed its first session 6.4% above the $158.14 offer, on $18.03 billion of regular-hours turnover.

When is the next monthly options expiration?

The third Friday of July, the Friday right after this week. Contracts expiring that day already carried 14% of this week's options volume.

Data notes

All timestamps are UTC; regular hours are 13:30-20:00 UTC per session; week boundaries run from July 2's regular close to July 10's. The weekly trailing rank uses OPEN-to-close returns, so it differs from the close-to-close scoreboard, both are labeled. Weekly breadth compares July 2 and July 10 closes over a $5M-traded-in-week filter. One arrival tripwire is bounded to zero: the July 9 and July 10 treasury prints. Friday's EDGAR daily index landed after this page first ran and is now counted in full inside the weekly filings total, which is no longer a floor. No VIX-style print appears here: index implied-volatility series are not licensed into this warehouse, volatility is read from the tape (ranges, 0DTE share, quote behavior). The IPO table stores the debut ticker with a stray space; the debut panel joins on the cleaned symbol.

Methodology

  • Market data source: consolidated tape, delayed_stocks_minute_aggs for prices and volumes, options_trades for the options week.
  • Time zone handling: stored timestamps are UTC; ET labels via toTimeZone(...) in SELECT lists; WHERE clauses use raw UTC literals.
  • Deterministic aggregates: tuple-keyed tie-breaks; prose claims encoded as bounds.
  • SEC filings source: stocks_sec_edgar_index, the daily EDGAR filing index, counted by filing_date.
  • Warehouse as-of date: July 13, 2026; equity tapes, options trades, and the week's five EDGAR daily indexes are fully ingested. The July 9 and July 10 treasury prints remain 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.