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

Marktoverzicht 8 juli 2026 de cijfers

Een herstel in de chipsector had weinig impact op de index. De meeste semis stegen, NVDA steeg voor de tweede dag en de brede markt was twee-tegen-één rood.

Woensdag 8 juli 2026 was een dag van een kortstondig herstel in de chipsector, maar de indexen merkten hier nauwelijks iets van. SNDK sloot met +6.8%, AVGO met +4.82% en NVDA met +3.66% — een scherpe ommekeer ten opzichte van de chip-crash van dinsdag — maar de index ETF's bleven onveranderd: SPY -0.31% en QQQ +0.25%. De brede markt was zelfs nog twee-tegen-één roder dan de dag ervoor: 1821 stijgers tegenover 4260 dalers, met een aandeel stijgers van 29.6% na 33.8% de vorige sessie. Elk onderstaand getal is afkomstig uit een opgeslagen query — klap elk paneel uit voor de exacte SQL.

Het scorebord

Elke verandering vergelijkt de laatste minute-bar van de reguliere sessie van 8 juli met die van dinsdag 7 juli — opeenvolgende handelsdagen. De rijen staan op alfabetische volgorde, zodat elke ETF een vaste positie behoudt.

QuerySPY / QQQ / DIA / IWM — 8 juli vs sluiting 7 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-07 13:30:00' AND window_start < '2026-07-07 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-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
    GROUP BY ticker
)
SELECT
    s.ticker AS ticker,
    round(toFloat64(p.prior_close), 2) AS prior_close,
    round(toFloat64(s.day_open), 2) AS day_open,
    round(toFloat64(s.day_close), 2) AS day_close,
    round((toFloat64(s.day_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
    round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
    round((toFloat64(s.day_close) / toFloat64(p.prior_close) - 1) * 100, 2) AS pct_change,
    round(toFloat64(s.day_high), 2) AS day_high,
    round(toFloat64(s.day_low), 2) AS day_low,
    s.shares_traded_m
FROM sess s LEFT JOIN prior p ON s.ticker = p.ticker
ORDER BY ticker

De vier ETF's stonden met een gap down open en bewogen daarna in verschillende richtingen. DIA opende de sessie op -0.97% ten opzichte van de vorige slotkoers en zakte verder, met een slotkoers van -1.09%. IWM opende op -0.73% en bleef dalen, met een slotkoers van -0.92%. SPY opende op -0.6%, herstelde gedurende de dag, maar sloot nog steeds op -0.31% — het herstel vanaf de opening was kleiner dan de gap. QQQ opende op -0.64% en steeg naar +0.25% bij de close, de enige van de vier in positief gebied.

Was de dag ongewoon?

De SPY open-to-close beweging van 0.29% rangschikte op 16 van de 22 voorgaande sessies — een gemiddelde dag voor de index, geen extreme uitschieter. De QQQ close-over-close beweging van +0.25% rangschikte op 21 van de 22 — een van de kleinste bewegingen van de afgelopen maand voor QQQ, wat consistent is met de ingetogen resultaten van de index.

QuerySPY / QQQ dagbeweging in trailing context (close-over-close, ~22 sessions)
De exacte SQL achter elk getal
SELECT
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-08'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ') AS qqq_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-08'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    toString(min(d)) AS first_session
FROM (
    SELECT ticker, d,
           (close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct,
           oc_pct
    FROM (
        SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS close_px,
               (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'QQQ')
          AND window_start >= toDateTime('2026-06-05 13:30:00')
          AND window_start < toDateTime('2026-07-09 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, d
    )
)

Breedte: nog meer twee-op-één negatief dan de dag ervoor

QueryLiquid-tape breadth: aandeel advancers 8 juli vs 7 juli, $1M-traded filter
De exacte SQL achter elk getal
SELECT
    countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS advancers,
    countIf(close_8 < close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS decliners,
    countIf(close_8 = close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS unchanged,
    countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS liquid_tickers,
    countIf(close_7 > 0 AND close_8 > 0) AS traded_both_sessions,
    countIf(close_7 > 0 AND close_8 > 0) - countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) / countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000), 1) AS advancer_pct,
    round(100.0 * countIf(close_7 > close_6 AND close_6 > 0 AND dv_7 >= 1000000) / countIf(close_7 > 0 AND close_6 > 0 AND dv_7 >= 1000000), 1) AS jul7_advancer_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 close_6,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8,
           sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS dv_8,
           sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS dv_7
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-08 20:00:00'
    GROUP BY ticker
)

Het verschil tussen advancers (1821) en decliners (4260) bracht het aandeel van de advancers naar 29.6%, een daling ten opzichte van 33.8% de vorige sessie — dezelfde berekening met dezelfde liquidity filter, toegepast op beide dagen. Van de 11439 namen met een slotkoers op beide dagen, vielen 5284 onder de handelsfilter van $1M en zijn zij uit de telling weggelaten. De door tech-aandelen geleide bounce en de gemengde slotkoers van de index maskeerden een nog uniformer negatieve brede markt.

The chip complex bounced — hard, and on heavy volume

Rows are alphabetical, so each name keeps a fixed position; the Tuesday comparison is computed fresh from the July 7 and July 6 closes in the receipts block below the table.

QueryVeertien chip names: prior close, dagsluiting, dagrange, dollar volume, low/high minute ET
De exacte SQL achter elk getal
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-08 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-08 00:00:00') AS day_low,
        argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS low_bar,
        argMaxIf(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 00:00:00') / 1e9, 2) AS day_dollar_bn
    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-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
        OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 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 - day_low) / prior_close) * 100, 2) AS range_pct,
    round(toFloat64(day_low), 2) AS day_low,
    round(toFloat64(day_high), 2) AS day_high,
    toUInt32(toHour(toTimeZone(low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(low_bar, 'America/New_York'))) AS low_minute_et,
    toUInt32(toHour(toTimeZone(high_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(high_bar, 'America/New_York'))) AS high_minute_et,
    day_dollar_bn
FROM per_name
ORDER BY ticker

12 of the fourteen chip names closed green — the reverse of Tuesday's session, when 12 of the fourteen closed red. SNDK led the complex at +6.8% on 16.82B of dollars traded, with AVGO close behind at +4.82%; the other storage names followed — STX +3.9%, WDC +3.45%. The 3x wrapper SOXL ran +5.79% and the inverse SOXS -6.22% — consistent with a one-day recovery in the underlying complex. MU rose a more modest +1.11% but printed 32.02B of dollars — the heaviest dollar-volume name in the panel. NVDA closed +3.66% for a second straight green day: it was one of only 2 names in this panel that closed green through Tuesday's rout (+0.67% that day).

QueryReceipts: green/red counts 8 juli en 7 juli voor dezelfde veertien names
De exacte SQL achter elk getal
SELECT
    countIf(close_8 > close_7) AS jul8_green,
    countIf(close_8 < close_7) AS jul8_red,
    countIf(close_7 > close_6) AS jul7_green,
    countIf(close_7 < close_6) AS jul7_red,
    round(anyIf((close_7 / close_6 - 1) * 100, ticker = 'NVDA'), 2) AS nvda_jul7_pct,
    count() AS names_counted
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 close_6,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8
    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-06 13:30:00' AND window_start < '2026-07-08 20:00:00'
    GROUP BY ticker
)

De andere kant: defensieve waarden en growth mega-caps volgden niet

QueryRotation check: acht names — defensives, mega-caps, biotech
De exacte SQL achter elk getal
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close_raw,
        toFloat64(argMinIf(open, window_start, window_start >= '2026-07-08 00:00:00')) AS day_open_raw,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close_raw,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('CRNX', 'CVX', 'JNJ', 'LLY', 'META', 'TSLA', 'UNH', 'XOM')
      AND ((window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
        OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close_raw, 2) AS prior_close,
    round(day_open_raw, 2) AS day_open,
    round(day_close_raw, 2) AS day_close,
    round((day_open_raw / prior_close_raw - 1) * 100, 2) AS gap_pct,
    round((day_close_raw / day_open_raw - 1) * 100, 2) AS intraday_pct,
    round((day_close_raw / prior_close_raw - 1) * 100, 2) AS pct_chg,
    day_dollar_bn
FROM per_name
ORDER BY ticker

De growth mega-caps bewogen in de tegenovergestelde richting van de chipsector: TSLA -2.22%, META -2.04%, LLY -1.6%. CVX was de enige groene afsluiting in het panel, met een stijging van +1.12% na een vroege gap, terwijl XOM met +1.26% opende en naar -0.49% zakte voor de sluiting. De handel op woensdag was hiermee verdeeld in twee groepen — chipaandelen omhoog, growth en defensieve waarden omlaag — waarbij de indexes tussen beide groepen stilstonden. (Rijen zijn alfabetisch: CRNX, CVX, JNJ, LLY, META, TSLA, UNH, XOM.)

Waar de handel plaatsvond

QueryTop 6 naar dollars traded, top 4 naar shares traded — 8 juli regular hours
De exacte SQL achter elk getal
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
    round(1000 * dollar_volume_bn / shares_m, 2) AS implied_avg_price,
    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(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY dollar_volume_bn DESC
    LIMIT 6
    UNION ALL
    SELECT
        'by shares traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard, pct_of_board_leader DESC

MU verhandelde 32.02B dollars — de meest verhandelde naam op de tape en de enige boven de grens van $30B. SPY (26.49B), NVDA (24.17B) en QQQ (20.9B) volgden, met SNDK op 16.82B en TSLA op 11.71B als afsluiters van het dollarboard. Het aandelenboard liet een ander beeld zien: de 3x inverse semiconductor ETF SOXS verhandelde 636.5M aandelen tegen een impliciete gemiddelde prijs van $4.67 — de mechanica van een goedkope 3x wrapper tijdens een zware dag voor de chipsector.

Het verloop van de sessie

QueryShares per 30-minuten ET bucket, regular hours, incl. % van de grootste bucket van de dag
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-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY et_time
ORDER BY et_time

Het volume vertoonde een klassieke U-vorm: de eerste handelsperiode bedroeg 89.9% van de grootste handelsperiode van de dag en nam gedurende de ochtend af, met een dieptepunt van 34.1% in het tijdsbestek van 13:00–13:30 ET. De laatste halfuur (15:30 ET) was de grootste handelsperiode van de dag met 2.2B shares — groter dan de 1.98B van de opening, wat het standaardpatroon is voor een reguliere sessie.

De options tape

QueryOptions tape: prints, contracts, call %, 0DTE share vs dinsdag, top contract
De exacte SQL achter elk getal
WITH
    (
        SELECT (groupArray(und), groupArray(strike), groupArray(typ), groupArray(vol), groupArray(avg_px), groupArray(is_0dte))
        FROM (
            SELECT any(underlying_symbol) AS und, any(toFloat64(strike_price)) AS strike, any(option_type) AS typ,
                   sum(size) AS vol, round(avg(toFloat64(price)), 3) AS avg_px,
                   if(substring(ticker, length(ticker) - 14, 6) = '260708', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'
            GROUP BY ticker
            ORDER BY vol DESC
            LIMIT 2
        )
    ) AS top2,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
    ) AS jul7_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
    ) AS jul7_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul7_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) = '260708') / sum(size), 1) AS pct_0dte,
    jul7_pct_0dte,
    spy_regular_close,
    top2.1[1] AS top1_und, top2.2[1] AS top1_strike, top2.3[1] AS top1_type, top2.4[1] AS top1_contracts, top2.5[1] AS top1_avg_px, top2.6[1] AS top1_is_0dte,
    round(toFloat64(top2.2[1]) - spy_regular_close, 2) AS top1_moneyness
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'

De geconsolideerde options tape registreerde 10.44M prints en 63.26M contracts — hoger dan de 61.13M van dinsdag, berekend op basis van dezelfde tape over de periode van dinsdag. Calls vormden 55.4% van het totale volume, een matige call lean. 0DTE contracts (expiratie op dezelfde dag, 260708) namen 38.7% van het contractvolume, een stijging ten opzichte van 31.2% op dinsdag. Het meest verhandelde individuele contract was SPY 745C677981 contracts tegen een gemiddelde prijs van $0.875, een same-day expiry die nagenoeg at the money staat ten opzichte van de regular close van SPY op $745.31.

De quote tape

QueryStocks NBBO update count: 8 juli vs 7 juli, incl. named-ticker updates (miljoenen)
De exacte SQL achter elk getal
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / 1e6, 2) AS jul8_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / 1e6, 2) AS jul7_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / countIf(toDate(sip_timestamp) = toDate('2026-07-07')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'SPY') / 1e6, 2) AS jul8_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'QQQ') / 1e6, 2) AS jul8_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'NVDA') / 1e6, 2) AS jul8_nvda_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'TSLA') / 1e6, 2) AS jul8_tsla_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'MU') / 1e6, 2) AS jul8_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'

De stock-quote tape bevatte op 8 juli 530.55M NBBO updates — +7.7% ten opzichte van de vorige sessie. De 6.53M updates van QQQ leidden de genoemde tickers, gevolgd door de 4.93M van SPY. NVDA (1.8M), TSLA (0.72M) en MU (0.6M) maken de lijst van genoemde aantallen compleet.

QuerySPY / QQQ / NVDA / TSLA / MU / SNDK / AVGO: RTH median quoted spread in basis points
De exacte SQL achter elk getal
SELECT
    ticker,
    round(quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000), 2) AS median_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'NVDA', 'TSLA', 'MU', 'SNDK', 'AVGO')
  AND sip_timestamp >= '2026-07-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00'
  AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps ASC

Over de zeven genoemde tickers was de mediane quoted spread van de SPY RTH 0.27 bps — het laagste niveau van een normale sessie voor deze zeer liquide Amerikaanse ETF. QQQ werd gekoteerd op 0.71 bps en NVDA op 1.52 bps. De breedste uitschieters in de tabel horen bij de namen met een lagere liquiditeit: MU op 5.66 bps en SNDK op 12.21 bps.

QuerySPY's RTH average quoted spread in trailing-month context
De exacte SQL achter elk getal
SELECT
    round(anyIf(avg_spread_cents, d = toDate('2026-07-08')), 3) AS jul8_avg_spread_cents,
    arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-08')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-08'))) + 1 AS tightness_rank,
    count() AS sessions_compared,
    round(min(avg_spread_cents), 3) AS tightest_session_cents,
    round(max(avg_spread_cents), 3) AS widest_session_cents,
    toString(min(d)) AS first_session,
    sum(dropped_invalid) AS dropped_invalid_quotes
FROM (
    SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
           avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents,
           countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= toDateTime('2026-06-05 00:00:00')
      AND sip_timestamp < toDateTime('2026-07-09 00:00:00')
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
)

De gemiddelde quoted spread van de SPY RTH bedroeg 2.202 cents. Dit was de 11 van de afgelopen 22 sessies — een gemiddelde dag wat betreft de spread-tightness. De range van de afgelopen maand liep van 1.809 cents (de kleinste) tot 2.865 cents (de grootste). Er was geen sprake van een liquiditeitsgat of een specifieke liquidity event — een normale sessie voor de quoted spread van SPY.

QueryOptions NBBO tape: totale updates vs stock tape, plus SPY root slice
De exacte SQL achter elk getal
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_stock_quote_rows
SELECT
    round(jul8_options_rows / 1e9, 2) AS jul8_options_bn,
    round(jul8_options_rows / jul8_stock_quote_rows, 1) AS options_to_stock_ratio,
    round((SELECT count() FROM global_markets.cache_options_quotes WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27' AND sip_timestamp >= '2026-07-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00') / 1e6, 0) AS jul8_spy_options_m

De options tape bevatte 9.62 billion NBBO updates — 18.1× het aantal van de stock-quote tape. Alleen de SPY-opties registreerden 422 million updates tijdens de reguliere handelsuren.

Rentes: de curve bewoog nauwelijks

QueryTreasury yields: 8 juli vs 7 juli — looptijden + 2s10s
De exacte SQL achter elk getal
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul8_yield_pct,
    round((t.2 - t.3) * 100) AS session_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-08') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-07') AS p
)

De 5-year leidde de bewegingen tijdens de sessie met +4 bp; de 2-year eindigde +2 bp hoger, en geen andere looptijd bewoog meer dan 2 bp in welke richting dan ook. Hierdoor bleef de 2s10s spread op 0.35% (-1 bp tijdens de sessie), binnen de recente range. De beperkte beweging in de rentes verliep gelijktijdig met de beperkte beweging in de index.

De kalender van de dag

QueryEx-divs, splits, SEC filings, news attention
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-08'
    ) AS news,
    (
        SELECT (argMax(t, (n, t)), max(n), max(n) - arraySort(x -> -x, groupArray(n))[2])
        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-08'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-08') AS ex_dividend_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS splits_executed,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS forward_splits,
    (SELECT countIf(form_type = '424B2') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_424b2,
    (SELECT countIf(form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_form4,
    (SELECT countIf(form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_8k,
    (SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_total,
    news.1 AS news_articles, news.2 AS news_publishers,
    top_news.1 AS top_news_ticker, top_news.2 AS top_news_n, top_news.3 AS top_news_lead_over_next

De kalender was rustig vandaag: 81 ex-dividend records, 1 forward split uitgevoerd, en in totaal 3722 SEC filings (waaronder 775 Form 4 insider trades, 527 424B2 prospectussen en 163 8-K current reports). De nieuwsdekking bestond uit 192 artikelen verspreid over 3 uitgevers, waarbij MU een van de meest genoemde tickers was bij 17 artikelen. Geen bekende corporate action viel op in de handel van vandaag — het narratief van de tape was de chipsector zelf.

De sessie, geverifieerd

QuerySession verification: eerste/laatste SPY bar ET, regular-bar count, holiday receipts, volgende sluiting
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-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-08') AS jul8_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-08 00:00:00' AND window_start < '2026-07-09 00:00:00'

De sessie omvatte een volledige extended-hours periode — de eerste SPY bar om 04:00 ET, de laatste om 19:59 ET — met 390 minute bars tijdens de regular-hours en 1 trading session in de periode (geen half-day; de holiday table bevat geen rij voor deze datum). De volgende geplande sluiting is Labor Day op 2026-09-07.

Data notes

All timestamps are stored in UTC; regular hours on July 8, 2026 are filtered as sip_timestamp / window_start between 2026-07-08 13:30:00 and 2026-07-08 20:00:00, which corresponds to 9:30 am–4:00 pm New York time. Decimal prices are cast to Float64 before any division. Named per-ticker panels (scoreboard, chip complex, rotation) are ordered alphabetically by ticker so each prose reference points at a fixed row; leaderboards (volume, quote snapshot) are value-ordered, and every positional claim they make is encoded as a sanity bound on that position. Every Tuesday comparison on this page — breadth share, chip green/red counts, options contracts and 0DTE share, quote-update counts — is computed fresh from July 7 (and July 6 where a prior close is needed) in the same query block, never quoted from an earlier post.

Full data notes

The breadth panel counts names with a regular-hours close on both sessions and at least $1M traded on the measured day; the dropped count (5284 of 11439) makes the excluded tail visible. The chip complex's day_low/day_high timing columns use the argMin/argMaxIf(..., (value, timestamp)) pattern so ties resolve deterministically. The volume-smile bucket labels are ET (%H:%i), computed with toTimeZone in the SELECT list only. The options-tape panel detects same-day expiry with the OCC-ticker substring match (substring(ticker, length(ticker) - 14, 6)) rather than options_trades.expiration_date (that column is broken, per the standing preflight note). Symbols in KNOWN_AMBIGUOUS_TICKERS are excluded in the volume-leaders and news-attention SQL so "most X" callouts fall through to verifiable names. The top-news ticker uses a deterministic tie-break (argMax(t, (n, t))); top_news_lead_over_next = 0 marks a tie, which is why the prose says "among the most-mentioned". The treasury panel joins two daily snapshot rows; a missing snapshot for either date yields zero rows and the row_count bound holds the post. The stocks-quote and options-quote counts are whole-tape scans over day partitions; named-ticker counts are reported in millions to match their column units. Spread medians use quantileExact (deterministic); the trailing spread panel is an average (avgIf), labeled as such.

Methodologie

  • Marktgegevensbron: consolidated tape — delayed_stocks_minute_aggs voor index- en per-naam prijzen en volumes, cache_stocks_quotes voor NBBO-aantallen en quoted spreads, cache_options_quotes en options_trades voor de options tape.
  • Tijdzoneverwerking: alle opgeslagen timestamps zijn UTC; ET-tijdlabels worden alleen met toTimeZone(..., 'America/New_York') in SELECT-lijsten berekend; WHERE-clausules gebruiken ruwe UTC-literalen.
  • Venster voor reguliere handelsuren: 13:30–20:00 UTC, geverifieerd aan de hand van geobserveerde SPY minute bars (het paneel voor sessieverificatie) en niet via kalenderberekeningen.
  • Definitie van spread: (ask - bid) / midpoint × 10,000 in basis points op geldige two-sided quotes voor de snapshot; het paneel voor de voorgaande maand is een gemiddelde breedte in cents, aangeduid als een gemiddelde.
  • Vergelijkingen met de vorige sessie: berekend via de query vanaf 7 juli (en 6 juli voor de dag-tot-dag vergelijking van dinsdag) — nooit overgenomen uit een eerdere post.
  • Deterministische aggregaten: quantileExact, tuple-keyed argMin/argMax, en een deterministische news tie-break voor stabiele regeneraties.
  • Warehouse as-of datum: 10 juli 2026 (T+2 voor de periode); de tapes van beide sessies zijn volledig ingeladen op dit niveau.

Cross-links: recap van 7 juli 2026, options trading costs, basis van de bid-ask spread, 0DTE options, en relative volume.