Strasmore Research
Market Recap

Marktoverzicht week van 29 juni 2026

Matt ConnorBy Matt Connor Updated 2026-07-24

De laatste week van juni bestond uit vier handelsdagen: de markt handelde van maandag 29 juni tot en met donderdag 2 juli, en sloot vervolgens op vrijdag 3 juli vanwege Independence Day — 4 juli viel op een zaterdag, waardoor de feestdag op de voorafgaande vrijdag werd geobserveerd. De resultaten voor deze sluiting, en voor alle overige gegevens hier, zijn te vinden in de panelen. Het meest opvallende feit van de week staat in de volume-tabel: één fabrikant van geheugenchips verhandelde $190.2 billion in vier dagen — anderhalf keer zoveel als SPY zelf. Elk getal op deze pagina is een resultaat van een opgeslagen query; klik op een paneel voor de exacte SQL.

De week op de markt

Heeft de markt het verlies van de vorige week ingehaald, of is de daling doorgezet? De resultaten wijzen op herstel: dit overzicht berekent de week-over-week verandering van elke index ETF en, ter vergelijking, de week daarvoor — beide gegevens zijn rechtstreeks afkomstig uit dezelfde query.

QueryWeek-over-week: de vier index ETF's t.o.v. de slotkoers van de voorgaande vrijdag
De exacte SQL achter elk getal
SELECT ticker,
    round(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), 2) AS prior_friday_close,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') 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-06-29') 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 week_change_pct,
    round((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)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-18') 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 >= toDateTime('2026-06-15 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY ticker
ORDER BY ticker

SPY sloot de week op $744.8, een stijging van 2.2% ten opzichte van de vorige vrijdag — na een -2.3% week daarvoor. QQQ steeg met 1% na een -4.6% week, DIA won 2%, en IWM sloot op 297.53 — een verandering van 0% voor de week, waarbij de koers gelijk bleef terwijl de large-cap indexes stegen.

De week ten opzichte van het voorgaande jaar

QueryDeze week t.o.v. het voorgaande jaar: SPY, open-to-close per week (rang 1 = best; korte weken uitgesloten)
De exacte SQL achter elk getal
SELECT round(anyIf(ret, wk = toDate('2026-06-29')), 2) AS week_2026_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-06-29')), groupArrayIf(ret, wk != toDate('2026-06-29'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions, wk = toDate('2026-06-29')) 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-06-29 00:00:00')
      AND window_start < toDateTime('2026-07-03 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
)

De gemeten open-to-close binnen de week — van de eerste reguliere handelsuur-bar op maandag tot de laatste op donderdag — biedt een licht afwijkend perspectief vergeleken met de resultaten van de vrijdagsluiting hierboven. De resultaten tonen aan dat de week van SPY op plek 14 staat van de afgelopen 53 weken (rang 1 = beste): middenmoot, in een jaar met zowel de selloff als het herstel. Weken met minder dan drie sessies worden uitgesloten door een sessie-limiet; deze week had 4 sessies. De historische context varieert per tijdsperiode — de samenvattingen van de maand, het kwartaal en het halfjaar vergelijken hun periodes met elk jaar uit de volledige dataset.

Vier sessies, gevolgd door een feestdag

Een handelsweek van vijf dagen is een aanname, geen feit — deze week bestond uit vier sessies. Het ontvangstpaneel controleert de afsluiting via de tape zelf: er zijn nul SPY-bars geregistreerd op 3 juli tegenover 1560 regular-session bars gedurende de vier handelsdagen.

QuerySession-overzicht: vier handelsdagen, één vrijdagsluiting, geverifieerd via de tape
De exacte SQL achter elk getal
SELECT
    (SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS sessions_in_week,
    (SELECT countIf((toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS regular_bars_week,
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-03 00:00:00') AND window_start < toDateTime('2026-07-04 00:00:00')) AS jul3_spy_bars
QueryPer session: SPY close, verandering en full-day volume
De exacte SQL achter elk getal
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 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-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 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-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY et_date
ORDER BY et_date

Alle vier de sessies volgden het volledige reguliere schema — de 1560 regular bars komen exact overeen met vier sessies van 390 minuten. De week sloot nagenoeg vlak (-0.1%) af op 2026-07-02, voorafgaand aan de feestdag — de winsten van de week werden behaald in de eerste drie sessies.

Breedte: hoeveel deel van de markt steeg

De stijging van één index kan een dalende markt verhullen. Dit overzicht telt elke ticker met een slotkoers aan beide zijden van de week; de uitgesloten set wordt vermeld in plaats van weggelaten.

QueryAdvancers en decliners per week, inclusief toegepaste liquidity filter
De exacte SQL achter elk getal
SELECT
    countIf(chg > 0 AND NOT dropped) AS advancers,
    countIf(chg < 0 AND NOT dropped) AS decliners,
    countIf(chg = 0 AND NOT dropped) AS unchanged,
    countIf(dropped) AS dropped_by_liquidity_filter,
    count() AS tickers_with_both_closes
FROM (
    SELECT ticker,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') 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) AS chg,
        sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29')) < 1e6 AS dropped
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
    GROUP BY ticker
    HAVING countIf(toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
       AND countIf(toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
)

5047 tickers stegen deze week tegenover 3525 die daalden (39 ongewijzigd) — de stijging was breed gespreid en niet beperkt tot het indexniveau. De liquiditeitsfilter heeft 3163 tickers die de hele week onder $1M handelden apart gezet; deze worden hier meegeteld en niet weggelaten.

De koplopers van de tape: één aandeel boven de ETF's

QueryRegular-hours dollar volume, week van 29 juni (één reused-symbol listing uitgesloten wegens verificatie)
De exacte SQL achter elk getal
SELECT ticker,
    round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
    round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
  AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8

MU leidde de gehele tape met een dollar volume van $190.2 miljard tijdens de reguliere handelsuren — SPY, de grootste ETF, vertegenwoordigde 66.4% van dat volume. Dat één enkel bedrijf gedurende een volledige week meer verhandeld wordt dan de standaard indexfondsen van de markt, is het meest opvallende feit van deze week; deze pagina rapporteert de omvang van de cash flow, niet de oorzaak hiervan. Basis: 29 juni–3 juli tijdens reguliere handelsuren; één hergebruikt symbool uit een lijst van juni is uitgesloten in afwachting van verificatie van de entiteit — de transactiegegevens staan in deze diepgaande analyse.

De feestdag verschoof de wekelijkse expiries

Wat gebeurt er met een wekelijkse vrijdag-expiry als de beurs op vrijdag gesloten is? De options tape geeft direct antwoord: dit paneel analyseert de expiry datum van elk contract dat tijdens de week is verhandeld en rangschikt deze.

QueryContracts verhandeld tijdens de week, per expiry date (single-pass scan; batch-generated)
De exacte SQL achter elk getal
SELECT concat('20', substring(expiry_raw, 1, 2), '-', substring(expiry_raw, 3, 2), '-', substring(expiry_raw, 5, 2)) AS expiry,
    round(sum(size) / 1e6, 1) AS contracts_m,
    round(100 * sum(size) / max(sum(size)) OVER (), 1) AS pct_of_biggest
FROM (
    SELECT substring(ticker, length(ticker) - 14, 6) AS expiry_raw, size
    FROM global_markets.options_trades
    WHERE sip_timestamp >= toDateTime64('2026-06-29 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-03 00:00:00', 9)
)
GROUP BY expiry
ORDER BY contracts_m DESC
LIMIT 6

De drukste expiry van de week was 2026-07-02 — een donderdag — met 74.1 miljoen contracts, 42.2% meer dan de volgende datum. Omdat 3 juli gesloten was, verschoof de "vrijdag" expiry van de week naar de donderdag; de dagelijkse expiries van maandag tot en met woensdag en de monthly van 17 juli vullen de tabel aan. Expiry data worden opnieuw geanalyseerd op basis van het OCC-symbool van elk contract (de eigen expiry-kolom van de tape is onbetrouwbaar); de werking van expiry weken zoals deze vindt u in de uitleg over feestdagen.

Rentes: de 10-jarige stijgt

QueryTreasury yields gedurende de week (July 2 print nog niet verwerkt)
De exacte SQL achter elk getal
SELECT toString(date) AS d,
    round(yield_10_year, 2) AS y10,
    round(yield_2_year, 2) AS y2,
    round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-06-26') AND date <= toDate('2026-07-02')
ORDER BY date

De 10-jarige steeg van 4.38% op de voorgaande vrijdag naar 4.48% tegen 2026-07-01, terwijl de 2s10s spread rond de 31 basis points bleef. Eén opmerking: de yield-cijfers van juli waren nog niet verwerkt toen deze pagina werd gegenereerd (4 rijen tot en met 1 juli) — het overzicht bevat deze gegevens bij de volgende generatie.

De kalender: een kwartaal eindigt, een indieningsdag ontbreekt

QueryCorporate calendar van de week — inclusief June 30 filing-index gap
De exacte SQL achter elk getal
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-06-29') AND ex_dividend_date <= toDate('2026-07-02')) AS ex_div_events,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-06-29') AND execution_date <= toDate('2026-07-02')) AS splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-06-29') AND listing_date <= toDate('2026-07-02')) AS ipos,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_jun29,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-01')) AS filings_jul1,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-02')) AS filings_jul2,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= toDateTime('2026-06-29 00:00:00') AND published_utc < toDateTime('2026-07-03 00:00:00')) AS news_articles

De week bevatte 2217 ex-dividend events, 48 splits en 7 nieuwe listings aan het begin van het kwartaal. De kolommen voor indieningen bevatten een fout in de datakwaliteit van deze week: de SEC filing index toont 4439 filings op 29 juni en 4282 op 1 juli, maar slechts 31 op 30 juni — de laatste dag van het kwartaal. De laatste dagen van het kwartaal in het voorgaande jaar bevatten duizenden indieningen. De kloof zit in de datafeed, niet in de daadwerkelijke indieningen van de bedrijven; elke telling van juni of Q2 die 30 juni bevat, is te laag totdat de index de gegevens aanvult. Dit is onderdeel van een patroon voor maandafsluitingen in 2026 — de diagnostische notitie bevat de bewijzen — bekendgemaakt hier en in de juni en Q2 recaps.

De shorts: één afgebroken bestand, drie volledige bestanden

QueryFINRA off-exchange short volume per session: coverage en marked-short shares
De exacte SQL achter elk getal
SELECT toString(date) AS d,
    uniqExact(ticker) AS tickers_on_file,
    max(ticker) AS alphabetical_end,
    round(100 * sum(toFloat64(short_volume)) / sum(toFloat64(total_volume)), 1) AS marked_short_pct
FROM (
    SELECT date, ticker, any(short_volume) AS short_volume, any(total_volume) AS total_volume
    FROM global_markets.stocks_short_volume
    WHERE date >= toDate('2026-06-29') AND date <= toDate('2026-07-02')
    GROUP BY date, ticker
)
GROUP BY date
ORDER BY date

De volume-gegevens buiten de beurs waren halverwege de week laag, rond de 48.8% — dit betreft reguliere market-maker plumbing en geen signaal voor een squeeze. De columns voor de coverage bevatten de volgende kanttekening: het bestand van 29 juni is marktbreed afgebroken (5489 tickers eindigend op "SSUS" tegenover circa 15.000 eindigend op "ZYME" op volledige dagen), waardoor de 45.8% van 29 juni wordt berekend op basis van een gedeeltelijk bestand. De diepgaande analyse van 29 juni bevat de volledige marktbrede onderzoek.

Datanotities

Volledige datanotities
  • 3 juli was een volledige sluiting, geen vroege sluiting. 4 juli 2026 viel op een zaterdag; NYSE en Nasdaq hielden de feestdag op vrijdag 3 juli aan — 0 SPY bars werden die dag geprint. Een datasetnotitie die werd ontdekt bij het regenereren van deze pagina: de exchange-calendar tabel is een feed met aankomende feestdagen, en de rij voor 3 juli is uit de lijst verlopen zodra de feestdag voorbij was (deze was aanwezig in de eerste versie van deze pagina); de sluiting is daarom de zero-bar dag van de tape; de werking staat beschreven in de uitleg over feestdagen.
  • Short interest eindigt bij de settlement van 15 juni. De bi-monthly settlement van eind juni was nog niet gepubliceerd toen deze pagina werd gegenereerd; er wordt hier geen gebruik van gemaakt, en de recap van juni bevat de volledige verklaring. Deze post wordt geregenereerd zodra de gegevens beschikbaar zijn.
  • De June 30 filing-index gap wordt hierboven inline vermeld; de Treasury print van 2 juli is in afwachting van verwerking.
  • Het FINRA short-volume bestand van 29 juni is marktbreed ingekort; de ratio wordt getoond met de bijbehorende dekking.
  • Uitsluiting van volume-leiders: een notering uit juni handelt onder een hergebruikt symbool en is uitgesloten van de leaderboard in afwachting van verificatie van de entiteit (de bijbehorende post bevat de bewijsstukken).

Methodologie

  • De periode loopt van 29 juni tot en met 2 juli 2026 — de vier handelsdagen van de week; 3 juli was een marktfeestdag. Sessiegrenzen worden geverifieerd aan de hand van geobserveerde bars en nooit aangenomen (de dataset van de beurskalender bevat alleen toekomstige feestdagen — zie de datanotitie).
  • Timestamps worden opgeslagen in UTC en gefilterd met ruwe UTC-grenzen; de reguliere handelsuren in deze (EDT) week zijn 13:30–20:00 UTC. De sluitingen zijn de laatste minute bar van de reguliere uren; de dollar volume is het product van de minute close en de minute volume, opgeteld over de reguliere uren.
  • Week-over-week cijfers worden vergeleken met de sluiting van de voorafgaande vrijdag, berekend in dezelfde query als deze week — nooit gelezen uit een opgeslagen waarde. De trailing-year rank wordt elke week op identieke wijze opnieuw berekend (reguliere handelsuren volgens Eastern-wall-clock, minimum-session guard, bovengrens vastgesteld op de afsluiting van deze week).
  • De generatie vindt plaats via het beveiligde read-only pad; de publieke pagina voert nooit live queries uit. Status van het warehouse per 5 juli 2026.

Dit is de eerste editie van de vaste wekelijkse recap — de editie van volgende week behandelt 6–10 juli en verwijst hiernaar terug. De dagelijkse recap van 29 juni behandelt de maandag in detail op dagniveau.