Strasmore Research
Marktoverzichten Matt ConnorDoor Matt Connor · Bijgewerkt 2026-07-24

Marktoverzicht 2 juli 2026 cijfers

Rotatiedag voor de feestdag: brede marktstijging ondanks dalende Nasdaq. Tech lag achter bij de elf sectorfondsen en de memory-sector bleef onder druk staan.

Donderdag 2 juli 2026 — de laatste sessie voor de sluiting vanwege Independence Day — was een rotatiedag met een koersdaling als hoofdklemtoon. QQQ noteerde -1.71% terwijl DIA steeg met 1.04%, en de breedte van de markt was POSITIEF: 3398 liquide namen stegen tegenover 2758, waarbij 54.6% van de markt in het groen sloot terwijl de growth-index daalde. Acht van de elf sectorfondsen sloten hoger; de verkoop concentreerde zich in tech en de memory-complex die de dag ervoor brak.

Het scorebord

QuerySPY / QQQ / DIA / IWM — 2 juli t.o.v. sluiting 1 juli, regular hours
De exacte SQL achter elk getal
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-01 13:30:00' AND window_start < '2026-07-01 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-02 13:30:00' AND window_start < '2026-07-02 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_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 AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.ticker

De verhouding tussen DIA op 1.04% en QQQ op -1.71% vat de dag samen: industriële aandelen en growth zitten bijna drie punten uit elkaar in dagelijks rendement. SPY zat precies in het midden op -0.12%; IWM sloot op -0.59%.

Was de dag ongewoon?

Twee perspectieven in één paneel: de beweging van SPY van opening naar sluiting en de beweging van QQQ van sluiting naar sluiting, beide gerangschikt tegenover de voorgaande maand op basis van absolute grootte (rang 1 = grootste).

QuerySPY en QQQ gerangschikt tegen de voorgaande maand sessies (rank 1 = grootste absolute move)
De exacte SQL achter elk getal
WITH per_day AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct,
           argMax(toFloat64(close), window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ')
      AND window_start >= toDateTime('2026-06-02 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
    GROUP BY ticker, d
),
with_prev AS (
    SELECT ticker, d, oc_pct,
           lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) AS prev_close,
           (rth_close / lagInFrame(rth_close) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct
    FROM per_day
)
SELECT
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-02'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-02'))),
               groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-02') AND isFinite(cc_pct) AND prev_close > 0)) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ' AND isFinite(cc_pct) AND prev_close > 0) AS qqq_sessions_compared,
    toString(minIf(d, ticker = 'SPY')) AS first_session
FROM with_prev

Op indexniveau was dat niet het geval. De -0.35% beweging van SPY van opening naar sluiting heeft een rang van 15 van de 22 voorgaande sessies — de onderste helft. QQQ was volatieler maar nog steeds niet extreem: de -1.71% beweging van sluiting naar sluiting heeft een rang van 9 van de 21 sessies met een gedefinieerde voorgaande sluiting, teruggaand tot 2026-06-02 — een matige dag voor de growth index. De bewegingen van individuele aandelen waren de reden dat 2 juli een ongewone dag was.

Breedte: groene tape, rode groei-index

QueryAdvancers vs decliners onder tickers met min. $1M volume op 2 juli
De exacte SQL achter elk getal
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
       OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
    countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
    countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
    countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
        / countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close > prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS advancers_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(countIf(day_close < prior_close AND day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS decliners_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(day_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_fmt,
    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_fmt
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

3,398 advancers, 2,758 decliners, 63 unchanged — 54.6% van de liquide tape steeg terwijl QQQ daalde. Cap-weighted indexes en equal-count breedte gaven verschillende antwoorden; dagen als deze zijn de reden waarom beide een panel krijgen. De filter verwijdert 5,317 van de 11,536 dual-session tickers met een handelsvolume onder $1 miljoen.

Sector voor sector: de verdeling van de winst

Breedte is belangrijk voor het aantal namen, maar geeft geen inzicht in de sector. De elf SPDR sector funds lieten de sessie zien per industrie. Het verschil tussen de beste en slechtste sector vormt de dagelijkse dispersion in één getal.

QueryDe elf SPDR sector ETF's — sluiting 2 juli vs sluiting 1 juli, regular hours
De exacte SQL achter elk getal
WITH per_etf AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 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-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    round((day_close / prior_close - 1) * 100 - min((day_close / prior_close - 1) * 100) OVER (), 2) AS pts_above_worst_sector,
    day_dollar_bn
FROM per_etf
ORDER BY ticker

Health care (XLV) stond bovenaan met 2.63%, gevolgd door utilities 2.23%, staples 2% en materials 1.94%. Technology (XLK) eindigde als laatste op -2.71% en was de enige sector met een daling van meer dan één punt; consumer discretionary (-0.81%) en communication services (-0.13%) waren de andere rode funds, terwijl de overige acht in het groen eindigden. De dispersion van best naar slechtste: 5.34 basis points. De splitsing waarbij de DIA steeg en de QQQ daalde, was zichtbaar in de hele markt en niet beperkt tot vier megacaps — dit verklaart waarom een stijgende advance-decline line bij een dalende Nasdaq geen tegenstrijdigheid is.

Hoogtepunt van de dag: verkoopgolf in geheugensector, dag twee

De sector die woensdag onder druk stond, daalde donderdag verder — zowel in omvang als in co-movement, niet in oorzaak.

QueryMemory en storage namen: verandering vs sluiting woensdag, range timing en dollar volume
De exacte SQL achter elk getal
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    round(day_high, 2) AS day_high,
    formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
    round(day_low, 2) AS day_low,
    formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
    round((day_high / day_low - 1) * 100, 2) AS range_pct,
    day_dollar_bn
FROM per_name
ORDER BY ticker

SanDisk noteerde -14.32%, Seagate -10.38%, Western Digital -9.92%, MU -5.57% — op $51.4 miljard aan MU-omzet, ongeveer anderhalve keer die van SPY. MU en SanDisk bereikten hun laag laat (15:26, 15:26 ET), Seagate en Western Digital eerder (14:23, 13:59). Context: woensdag en de MU-analyse.

De andere helft van de rotatie, in de megacaps:

QueryMegacap rotation: verandering vs sluiting woensdag, range timing en dollar volume
De exacte SQL achter elk getal
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-02 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-02 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-02 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-02 00:00:00') AS day_low,
        argMinIf(window_start, toFloat64(low), window_start >= '2026-07-02 00:00:00') AS low_bar,
        argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-02 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-02 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00')
        OR (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 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,
    round(day_high, 2) AS day_high,
    formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
    round(day_low, 2) AS day_low,
    formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
    round((day_high / day_low - 1) * 100, 2) AS range_pct,
    day_dollar_bn
FROM per_name
ORDER BY ticker

AAPL steeg 4.75% in een constante lijn — laag om 09:30 ET, hoog om 15:57, drie minuten voor de sluiting — terwijl TSLA het spiegelbeeld liet zien bij -7.65%. MSFT steeg met 1.41%; NVDA sloot met -1.55%. Dezelfde index, tegengestelde dagen.

Waar de handel plaatsvond

QueryVolume leaders op twee manieren: top 6 naar dollars traded, top 4 naar shares traded (één herhaalde ticker uitgesloten)
De exacte SQL achter elk getal
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
    round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
        / max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    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'
      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(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    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'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESC

MU met $51.4 miljard leidde de handel voor de vierde opeenvolgende sessie (maandag, dinsdag, woensdag) tegenover $32.7 miljard van SPY. SanDisk met $26.57 miljard zorgde voor een tweede naam in de sector memory in de top vier. SOXS — de 3x-inverse semiconductor ETF — stond bovenaan de lijst met 748.2 miljoen: goedkope aandelen domineren de aandelenhoeveelheid, dure aandelen de dollarwaarde, en relative volume vergelijkt dit met de normale waarde van een aandeel. Basis: 2 juli tijdens de reguliere handelsuren, waarbij één hergebruikte listing werd uitgesloten (ontvangsten).

QueryShares traded per 30-minuten bucket, regular hours (billions)
De exacte SQL achter elk getal
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
    round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
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'
GROUP BY et_time
ORDER BY et_time

2.13 miljard aandelen in het eerste half uur, een dieptepunt van 0.81 miljard om 14:30, en 2.3 miljard bij de afsluiting voor de feestdag — de laatste categorie was de grootste van de dag, doordat the closing auction resterende orders samenvoegt in één prijs.

De options tape: de verschoven weekly lands

QueryEén rij voor de gehele options dag: volume, same-day expiry, de verschoven holiday-week en de July monthly
De exacte SQL achter elk getal
WITH
    (
        SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
                any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
                sum(size), count(), round(avg(toFloat64(price)), 3))
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
        GROUP BY ticker
        ORDER BY sum(size) DESC
        LIMIT 1
    ) AS top_contract,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
    ) AS spy_regular_close
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS 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) = '260702') / sum(size), 1) AS same_day_expiry_pct,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,
    countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260710')) / 1e6, 2) AS jul10_weekly_contracts_m,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260717')) / 1e6, 2) AS jul17_monthly_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
    top_contract.1 AS top_contract_underlying,
    top_contract.2 AS top_contract_strike,
    top_contract.3 AS top_contract_type,
    top_contract.4 AS top_contract_expiry,
    top_contract.5 AS top_contract_volume,
    reverse(arrayStringConcat(extractAll(reverse(toString(assumeNotNull(top_contract.5))), '[0-9]{1,3}'), ',')) AS top_contract_volume_fmt,
    round(top_contract.7, 3) AS top_contract_avg_price,
    round(top_contract.2 - spy_regular_close, 2) AS top_strike_minus_spy_close,
    round(spy_regular_close - top_contract.2, 2) AS spy_close_minus_strike
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

Er werden 80.96 miljoen contracten verhandeld via 13.15 miljoen prints, waarvan 47.4% van het volume op dezelfde donderdag afliep. Geen enkel contract met een expiratiecode van 3 juli werd gedurende de dag verhandeld (0 prints). Hierdoor viel de dagelijkse expiry samen met de verschoven weekly van die week. Het meest verhandelde contract was de SPY $740 put met dezelfde expiratiedatum — 540,403 contracten tegen een gemiddelde premium van $0.499, waarbij de SPY 4.8 dollar boven de strike sloot: out of the money. Dit was een put op een markt waar dinsdag en woensdag calls hadden. Calls vertegenwoordigden nog steeds 58.4% van het volume; de volgende weekly trok 9.64 miljoen contracten, de juli monthly 8.82 miljoen (expiry mechanics).

De quote tape: de kosten van het handelen

Prijzen geven aan wat er is gebeurd; quotes geven aan wat het kostte. De bid-ask spread is de tol bij elke round trip, uitgedrukt in basis points van de mid-price (een basis point is een honderdde van een procent). We meten dit elke sessie, of deze nu gewoon of ongewoon is — dit maakt de bewering "spreads blew out" toetsbaar.

QueryStocks NBBO update count: 2 juli vs 1 juli, inclusief named-ticker updates (millions)
De exacte SQL achter elk getal
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / 1e6, 2) AS jul2_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-01')) / 1e6, 2) AS jul1_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / countIf(toDate(sip_timestamp) = toDate('2026-07-01')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'SPY') / 1e6, 2) AS jul2_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'QQQ') / 1e6, 2) AS jul2_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-02') AND ticker = 'MU') / 1e6, 2) AS jul2_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-01 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'

De national best bid and offer — de bovenkant van het geconsolideerde orderboek — werd op 2 juli 597.22 miljoen keer herzien tegenover 449.15 miljoen op 1 juli: een stijging van 33% richting de sluiting. QQQ bereikte 7.56 miljoen, boven de 5.42 miljoen van SPY; MU 1.01 miljoen.

QueryMedian quoted spread in basis points, regular hours — index ETF's, megacaps en de memory namen
De exacte SQL achter elk getal
SELECT
    ticker,
    round(med_bps, 2) AS median_spread_bps,
    round(med_dollars * 100, 1) AS median_spread_cents,
    round(med_bps / min(med_bps) OVER (), 1) AS times_the_spy_spread,
    round(quote_updates / 1e6, 2) AS rth_updates_m,
    invalid_quotes_dropped
FROM (
    SELECT
        ticker,
        quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000,
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_bps,
        quantileExactIf(0.5)(toFloat64(ask_price) - toFloat64(bid_price),
                             toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)) AS med_dollars,
        count() AS quote_updates,
        countIf(NOT (toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price))) AS invalid_quotes_dropped
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'QQQ', 'AAPL', 'TSLA', 'NVDA', 'MU', 'SNDK', 'WDC')
      AND sip_timestamp >= '2026-07-02 13:30:00' AND sip_timestamp < '2026-07-02 20:00:00'
    GROUP BY ticker
)
ORDER BY median_spread_bps ASC

SPY had een mediane spread van 0.27 basis points: ongeveer 2 cent op een ETF van $744.8. QQQ zat op 0.83 bps, NVDA 1.03. De aandelen die de grootste dalingen lieten zien, waren ook het duurst om te handelen: MU 5.52 bps, SanDisk 10.4, Western Digital 10.7940x de spread van SPY. Het handelen in een mandje memory-aandelen kostte een veelvoud van het handelen in de index, nog voordat er sprake was van price impact. Ongeldige quotes (eenzijdig, crossed) worden per aandeel geteld en worden niet verborgen.

QueryWas liquidity ongebruikelijk? SPY's regular-hours median spread vs de voorgaande maand sessies
De exacte SQL achter elk getal
WITH per_day AS (
    SELECT toDate(sip_timestamp) AS d,
           quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000) AS med_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-06-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
      AND toFloat64(bid_price) > 0 AND toFloat64(ask_price) > toFloat64(bid_price)
    GROUP BY d
)
SELECT
    round(anyIf(med_bps, d = toDate('2026-07-02')), 3) AS jul2_median_spread_bps,
    round(quantileExact(0.5)(med_bps), 3) AS trailing_median_bps,
    round(anyIf(med_bps, d = toDate('2026-07-02')) - quantileExact(0.5)(med_bps), 3) AS jul2_minus_trailing_bps,
    arrayCount(x -> x > anyIf(med_bps, d = toDate('2026-07-02')), groupArrayIf(med_bps, d != toDate('2026-07-02'))) + 1 AS wider_rank,
    count() AS sessions_compared,
    round(max(med_bps), 3) AS widest_session_bps
FROM per_day

Een normale dag voor de liquiditeit, dat is de conclusie: de mediane spread van SPY van 0.27 bps ligt 0 bps van de mediane waarde van de afgelopen maand (0.27 bps) af, wat een rangorde van 11 van 22 sessies oplevert wat betreft breedte — ver verwijderd van de breedste spread van de maand op 0.409 bps. Een geconcentreerde daling binnen een groene tape heeft de marktstructuur niet onder druk gezet.

Rentes: de gegevens van 2 juli zijn binnen

QueryDe receipt: de July 2 Treasury print is geregistreerd
De exacte SQL achter elk getal
SELECT
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS jul2_rows,
    (SELECT count() FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS jul1_rows

De Treasury-feed loopt een dag of twee achter op de markt: bij de eerste publicatie waren er geen gegevens beschikbaar voor de slotkoers van 2 juli, en deze pagina gaf dat aan in plaats van te gokken. De gegevens zijn inmiddels binnen — 1 regels voor 2 juli, 1 voor 1 juli — dus de onderstaande tabel bevat de curve van de betreffende sessie.

QueryDe curve print van de sessie: 2 juli vs 1 juli (alleen gepopuleerde maturities)
De exacte SQL achter elk getal
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul2_yield_pct,
    round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(d.yield_1_month),  toFloat64(p.yield_1_month)),
        ('3 month',  toFloat64(d.yield_3_month),  toFloat64(p.yield_3_month)),
        ('1 year',   toFloat64(d.yield_1_year),   toFloat64(p.yield_1_year)),
        ('2 year',   toFloat64(d.yield_2_year),   toFloat64(p.yield_2_year)),
        ('5 year',   toFloat64(d.yield_5_year),   toFloat64(p.yield_5_year)),
        ('10 year',  toFloat64(d.yield_10_year),  toFloat64(p.yield_10_year)),
        ('30 year',  toFloat64(d.yield_30_year),  toFloat64(p.yield_30_year)),
        ('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-01') AS p
)

Bij de sluiting stond de 10-jarige op 4.49%, met een 2s10s spread van 0.35 basis points.

De kalender van de dag

QueryCorporate calendar en informatieflow van 2 juli in één rij (incl. acht splits achter één fake screener move)
De exacte SQL achter elk getal
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-02'
    ) AS news,
    (
        SELECT (argMax(t, n), 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-02'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), countIf(split_to > split_from), countIf(split_to < split_from),
                arrayStringConcat(groupArray(concat(ticker, ' ', toString(split_to), '-for-', toString(split_from))), '; '))
        FROM global_markets.stocks_splits
        WHERE execution_date = '2026-07-02' AND ticker NOT IN ('SPCX')
    ) AS splits
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-02') AS ex_dividend_records,
    splits.1 AS splits_executed,
    splits.2 AS forward_splits,
    splits.3 AS reverse_splits,
    splits.4 AS split_records,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-02') AS filings_8k,
    (SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
        SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-02' ORDER BY ticker
    )) AS ipo_names,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    top_news.1 AS most_covered_ticker,
    top_news.2 AS most_covered_articles,
    (SELECT any(split_from) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_from,
    (SELECT any(split_to) FROM global_markets.stocks_splits WHERE ticker = 'CRWD' AND execution_date = '2026-07-02') AS crwd_split_to,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-01 13:30:00' AND window_start < '2026-07-01 20:00:00') AS crwd_prev_close,
    (SELECT round(toFloat64(argMax(close, window_start)), 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_day_close,
    (SELECT round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 2) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'CRWD' AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS crwd_dollar_m,
    (SELECT count() FROM (
        SELECT ticker FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-02')
          AND window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
        GROUP BY ticker
    )) AS split_names_with_bars

319 dividend records gingen ex-dividend, 2 nieuwe listings kwamen binnen (MIACU — Meridian3 Industrials Acquisition Corp.; VIIU — Viking Acquisition Corp. II), en de SEC index registreerde 5200 filings voor de feestdag — 2109 Form 4s, 258 8-Ks. De nieuwsfeed bevatte 201 artikelen van 3 uitgevers (NVDA meest gecoverd, 18 daarvan).

Aandelensplits kunnen lezers van ongewijzigde slotkoersen misleiden. CRWD voerde een 4-voor-1 forward split uit, waardoor de ongewijzigde koerskoersen $772.45 op woensdag en $193.67 op donderdag laten zien — een schijnbare daling die in werkelijkheid vier nieuwe aandelen per oud aandeel betekent. Dit was niet de enige: 8 split records werden uitgevoerd, 5 forward en 3 reverse (de split_records kolom vermeldt deze), en een reverse split veroorzaakt het tegenovergestelde effect — een ruwe koers die plotseling stijgt. Slechts 2 van die namen werd verhandeld op onze tape; de turnover van $1473.51 miljoen van CRWD is de enige die groot genoeg is om een scherm te beïnvloeden, en elke mover screen hier sluit deze uit.

In voorbereiding

Kalenderfeiten, geen prognoses — wat de gegevens voorspelden voor de volgende sessies.

QueryNa de holiday: de volgende sessie, ex-dividenden en splits, de volgende geplande sluiting en de short-interest lag
De exacte SQL achter elk getal
SELECT
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS jul6_spy_regular_bars,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-06') AS exdiv_records_jul6,
    (SELECT arrayStringConcat(groupArray(ticker), ', ') FROM global_markets.stocks_dividends
     WHERE ex_dividend_date = '2026-07-06'
       AND ticker IN ('AAPL', 'MSFT', 'JPM', 'JNJ', 'XOM', 'KO', 'PG', 'WMT', 'CVX', 'HD')) AS household_exdivs_jul6,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS splits_jul6,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02') AS next_scheduled_closure,
    (SELECT any(name) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_name,
    (SELECT any(status) FROM global_markets.stocks_market_holidays
     WHERE date = (SELECT min(date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-02')) AS next_closure_status,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS latest_si_settlement,
    (SELECT dateDiff('day', max(settlement_date), toDate('2026-07-02')) FROM global_markets.stocks_short_interest
     WHERE settlement_date <= '2026-07-02') AS si_settlement_age_days

Maandag 6 juli opende met een volledige 390-bar sessie, bevestigd door de eigen bars. Er waren 118 ex-dividend records — één bekende naam onder de tien die we onderzoeken (JPM) — en 15 split executies. Volgende geplande sluiting: Labor Day, 2026-09-07 (closed). De short interest was, zoals gebruikelijk, oud nieuws — de nieuwste settlement staat geregistreerd op 2026-06-30, 2 dagen geleden, waarbij de publicatie ongeveer twee weken achterloopt op de settlement (waarom).

De sessie, bevestigd — en de vrijdag die niet doorging

QuerySession check: SPY's observed minute-bar span en de July 3 sluiting op de tape
De exacte SQL achter elk getal
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,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= '2026-07-03 00:00:00' AND window_start < '2026-07-04 00:00:00') AS jul3_spy_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-02 00:00:00' AND window_start < '2026-07-03 00:00:00'

2 juli was een volledige sessie, geen vroege sluiting: de bars van SPY lopen van 04:00 tot 19:59 New Yorkse tijd (inclusief pre-market en after-hours bars), met exact 390 bars tijdens de reguliere handel. Vrijdag 3 juli leverde 0 SPY bars op — een volledige sluiting vanwege Independence Day, aangezien 4 juli op een zaterdag viel. De week met vier sessies: de week recap.

FAQ

Waarom steeg de Dow terwijl de Nasdaq daalde op 2 juli 2026?

De twee indexes bevatten verschillende bedrijven: DIA sloot op 1.04%, QQQ op -1.71%. De sectorale verdeling is identiek — gezondheidszorg, nutsbedrijven en consumptiegoederen staan bovenaan, technologie staat als laatste op -2.71%, een verschil van 5.34 basis points tussen de beste en slechtste sectoren.

Was de aandelenmarkt geopend op de vrijdag van de Independence Day-week?

Nee. Independence Day viel op een zaterdag, en de beurzen hielden een volledige sluiting op de vrijdag direct na deze sessie; onze data toont 0 SPY minute bars voor die dag.

Wat is het effect van een forward stock split op de koers?

Het vermenigvuldigt het aantal aandelen met vier en deelt de prijs door vier; de waarde van de positie blijft ongewijzigd. CRWD, 2 juli: een ongewijzigde slotkoers van $772.45 op woensdag en $193.67 op donderdag — een schijnbare daling op elke screener die de split niet verwerkt.

Hoe groot waren de bid-ask spreads op 2 juli 2026?

De mediane spread van SPY was 0.27 basis points van de mid-price tijdens de reguliere handel — 11 van de 22 voorgaande sessies qua breedte, een normale dag. Individuele aandelen hadden grotere spreads: MU 5.52 bps, WDC 10.79.

Datanotities

  • Dollar volume is een proxy per minuut — prijs × volume, opgeteld per bar.
  • De juli 2 treasury print verscheen na de eerste publicatie — de oorspronkelijke notitie gaf de afwezigheid aan middels een rij-aantal; deze revisie bevat de print, zie het bijgevoegde overzicht.
  • De ruwe koerswijziging van CRWD is een gevolg van een split — uitgesloten van mover screens.
Volledige datanotities
  • Het sectorbord bevat de elf SPDR Select Sector funds (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY) — een vaste, vastgestelde basket en geen sectorveld van een leverancier.
  • Quote-tape tellingen worden ingedeeld op basis van de UTC-datum van de SIP-timestamp; een zomerse sessie valt binnen één UTC-dag.
  • Eén hergebruikte symbool-notering van juni is uitgesloten van de leaderboards (overzichten); gedetailleerde tick-analyse is beschikbaar in de deep-dives.

Methodologie

  • De periode beslaat één handelsessie (1 sessie, geverifieerd op basis van geobserveerde bars). Tijdstempels worden in UTC opgeslagen en binnen de queries omgezet naar New York-tijd; "close" betekent de laatste minute bar van de reguliere sessie, en dagveranderingen vergelijken 2 juli met 1 juli. De sluiting van 3 juli is geverifieerd via bars en is nooit aangenomen.
  • Spreads worden gecoteerd (ask minus bid) in basis points van de mid-price, mediaan over NBBO-updates tijdens de reguliere uren, op een deterministisch kwantiel. Decimalen worden omgezet naar floats voor ratio-berekeningen; de expiries van opties worden opnieuw geparsed vanuit de OCC ticker. Elk paneel wordt eenmaal gelezen op het moment van redactie via het beveiligde read-only pad.

Grafiek, tabel en SQL vormen één object. Plak elk paneel in de Strasmore terminal om het naar eigen wens aan te passen. Vorige sessie: 1 juli. De week: de vier-sessie vakantieweek.