Strasmore Research
Recap di mercato Matt ConnorDi Matt Connor · Aggiornato 2026-07-24

Recap mercato 8 luglio 2026

Il rimbalzo dei chip non ha aiutato gli indici. NVDA cresce mentre il mercato generale chiude con un rapporto tra rialzi e ribassi di due a uno verso il rosso.

Mercoledì 8 luglio 2026 ha visto un rimbalzo di un giorno dei chip che ha influenzato poco gli indici. SNDK ha chiuso a +6.8%, AVGO +4.82%, NVDA +3.66% — un netto ribaltamento rispetto al crollo dei chip di martedì — ma gli ETF degli indici sono rimasti invariati: SPY -0.31% e QQQ +0.25%. Il mercato generale ha registrato un rapporto tra rialzi e ribassi di due a uno più marcato rispetto al giorno precedente: 1821 rialzi contro 4260 ribassi, con una quota di rialzi del 29.6% dopo il 33.8% della sessione precedente. Ogni numero riportato di seguito è estratto da una query memorizzata — espandere ogni pannello per il relativo SQL.

Il tabellone

Ogni variazione confronta l'ultima barra di un minuto della sessione regolare dell'8 luglio con quella di martedì 7 luglio — sessioni di trading consecutive. Le righe sono in ordine alfabetico, quindi ogni ETF mantiene una posizione fissa.

QuerySPY / QQQ / DIA / IWM — 8 luglio vs chiusura 7 luglio, regular hours
L'esatto SQL dietro ogni numero
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

I quattro ETF hanno aperto con un gap negativo e hanno poi seguito direzioni diverse. DIA ha aperto la sessione a -0.97% rispetto alla chiusura precedente e ha continuato a scendere, chiudendo a -1.09%. IWM ha aperto a -0.73% ed è rimasto in calo, chiudendo a -0.92%. SPY ha aperto a -0.6%, ha recuperato gradualmente durante la giornata, ma ha chiuso comunque a -0.31% — il recupero rispetto all'apertura è stato inferiore al gap. QQQ ha aperto a -0.64% ed è salito fino a +0.25%** alla chiusura, l'unico dei quattro in territorio positivo.

La giornata è stata insolita?

Il movimento di SPY dall'apertura alla chiusura di 0.29% si è posizionato al 16 posto su 22 sessioni precedenti — una giornata media per l'indice, non estrema. Il movimento di QQQ dalla chiusura alla chiusura di +0.25% si è posizionato al 21 posto su 22 — uno dei movimenti mensili più contenuti per QQQ, in linea con il segnale debole dell'indice.

QueryVariazione giornaliera SPY / QQQ in contesto trailing (close-over-close, ~22 sessioni)
L'esatto SQL dietro ogni numero
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
    )
)

Breadth: un rapporto tra ribassisti e rialzisti ancora più sbilanciato verso il rosso rispetto al giorno precedente

QueryBreadth liquid-tape: quota advancer 8 luglio vs 7 luglio, filtro $1M-traded
L'esatto SQL dietro ogni numero
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
)

Il divario tra i titoli in rialzo (1821) e quelli in ribasso (4260) ha portato la quota di titoli in rialzo al 29.6%, in calo rispetto al 33.8% della sessione precedente — lo stesso calcolo applicato con lo stesso filtro di liquidità per entrambi i giorni. Dei 11439 titoli con una chiusura in entrambi i giorni, 5284 sono scesi sotto la soglia di scambio di un milione di dollari e sono esclusi dal conteggio. Il rimbalzo guidato dai chip e la chiusura mista dell'indice hanno mascherato un mercato generale ancora più uniformemente negativo.

Il settore dei chip è rimbalzato con forza e volumi elevati

Le righe sono in ordine alfabetico, quindi ogni nome mantiene una posizione fissa; il confronto con martedì è calcolato dai prezzi di chiusura del 7 luglio e del 6 luglio nel blocco delle ricevute sotto la tabella.

QueryQuattordici chip names: chiusura precedente, chiusura giornaliera, day range, dollar volume, low/high minute ET
L'esatto SQL dietro ogni numero
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 dei quattordici titoli del settore dei chip ha chiuso in rialzo — l'opposto della sessione di martedì, quando il 12 dei quattordici ha chiuso in calo. SNDK ha guidato il settore con un +6.8% su 16.82B di dollari scambiati, seguita da AVGO con un +4.82%; anche gli altri titoli del settore storage hanno seguito il trend — STX +3.9%, WDC +3.45%. L'ETF a leva 3x SOXL ha registrato un +5.79% e l'inverso SOXS un -6.22% — in linea con il rimbalzo di un giorno del settore sottostante. MU è salita in modo più modesto del +1.11% ma ha registrato 32.02B di dollari — il titolo con il maggior volume in dollari del panel. NVDA ha chiuso con un +3.66% per il secondo giorno consecutivo di rialzo: è stato uno dei soli 2 titoli di questo panel a chiudere in verde durante il crollo di martedì (+0.67% quel giorno).

QueryReceipts: conteggio green/red 8 luglio e 7 luglio su quattordici names
L'esatto SQL dietro ogni numero
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
)

L'altra faccia: i titoli defensives e le mega-cap growth non hanno seguito il trend

QueryCheck rotation: otto names — defensives, mega-caps, biotech
L'esatto SQL dietro ogni numero
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

Le mega-cap growth si sono mosse in direzione opposta rispetto al settore dei chip: TSLA -2.22%, META -2.04%, LLY -1.6%. CVX è stata l'unica chiusura in rialzo del panel, con un incremento del +1.12% dopo un gap iniziale, mentre XOM ha aperto con un rialzo del +1.26% per poi scendere a -0.49% alla chiusura. La sessione di mercoledì si è quindi divisa in due — titoli dei chip in rialzo, growth e defensives in ribasso — con gli indici fermi tra i due estremi. (Le righe sono in ordine alfabetico: CRNX, CVX, JNJ, LLY, META, TSLA, UNH, XOM.)

Dove sono stati scambiati i capitali

QueryTop 6 per dollars traded, top 4 per shares traded — 8 luglio regular hours
L'esatto SQL dietro ogni numero
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 ha registrato 32.02B dollari — il titolo con maggiore volume e l'unico sopra la soglia dei 30 miliardi di dollari. SPY (26.49B), NVDA (24.17B) e QQQ (20.9B) sono seguiti, con SNDK a 16.82B e TSLA a 11.71B a completare la classifica per volume monetario. La classifica delle azioni ha mostrato dati differenti: l'ETF 3x inverse sui semiconduttori SOXS ha scambiato 636.5M azioni a un prezzo medio implicito di $4.67 — la dinamica tipica di un wrapper 3x a basso prezzo durante una giornata intensa per il settore chip.

L'andamento della sessione

QueryShares per bucket 30-minute ET, regular hours, con % del bucket più grande della giornata
L'esatto SQL dietro ogni numero
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

Il volume ha seguito una classica forma a U: il primo segmento di apertura ha registrato il 89.9% del volume massimo giornaliero e ha diminuito progressivamente durante la mattinata, toccando il minimo del 34.1% nella fascia oraria 13:00–13:30 ET. L'ultima mezz'ora di negoziazione (15:30 ET) ha rappresentato il picco giornaliero con 2.2B azioni — un valore superiore al 1.98B dell'apertura, seguendo il pattern standard di una sessione regolare.

Il tape delle opzioni

QueryOptions tape: prints, contracts, call %, quota 0DTE vs martedì, top contract
L'esatto SQL dietro ogni numero
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'

Il tape consolidato delle opzioni ha registrato 10.44M operazioni e 63.26M contratti — un valore superiore ai 61.13M di martedì, calcolati dallo stesso tape durante la sessione di martedì. I Call hanno rappresentato il 55.4% del volume totale, indicando una moderata propensione per i Call. I contratti 0DTE (scadenza in giornata, 260708) hanno assorbito il 38.7% del volume dei contratti, in aumento rispetto al 31.2% di martedì. Il singolo contratto più scambiato è stato SPY 745C — con 677981 contratti a un prezzo medio di $0.875, una scadenza in giornata essenzialmente at the money rispetto alla chiusura regolare di SPY a $745.31.

Il nastro delle quotazioni

QueryConteggio update NBBO stocks: 8 luglio vs 7 luglio, con update per ticker (milioni)
L'esatto SQL dietro ogni numero
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'

Il nastro delle quotazioni azionarie ha registrato 530.55M aggiornamenti NBBO l'8 luglio — +7.7% rispetto alla sessione precedente. Gli 6.53M aggiornamenti di QQQ hanno guidato i ticker menzionati, superando i 4.93M di SPY. NVDA (1.8M), TSLA (0.72M) e MU (0.6M) completano il conteggio dei titoli citati.

QuerySPY / QQQ / NVDA / TSLA / MU / SNDK / AVGO: median quoted spread RTH in basis points
L'esatto SQL dietro ogni numero
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

Tra i sette ticker menzionati, lo spread mediano quotato di SPY durante la RTH era di 0.27 bps — al limite inferiore della normalità per il più liquido ETF statunitense. QQQ ha quotato a 0.71 bps, NVDA a 1.52 bps. La parte più ampia della tabella riguarda i titoli con minore attività di quotazione: MU a 5.66 bps e SNDK a 12.21 bps.

QueryMedia quoted spread RTH di SPY in contesto trailing-month
L'esatto SQL dietro ogni numero
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
)

Lo spread quotato medio di SPY durante la RTH, pari a 2.202 cents, si è posizionato al 11 delle 22 sessioni precedenti — una giornata con spread di media ampiezza, con il range dell'ultimo mese che va da 1.809 cents (il più stretto) a 2.865 cents (il più ampio). Nessun calo improvviso di liquidità, nessun evento di liquidità — una sessione ordinaria per lo spread quotato di SPY.

QueryOptions NBBO tape: total updates vs stock tape, più SPY root slice
L'esatto SQL dietro ogni numero
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

Il nastro delle opzioni ha registrato 9.62 miliardi di aggiornamenti NBBO — 18.1× il conteggio del nastro delle quotazioni azionarie. La sola sezione delle opzioni su SPY ha generato 422 milioni di aggiornamenti durante l'orario regolare.

Tassi: la curva si è mossa appena

QueryTreasury yields: 8 luglio vs 7 luglio — maturities + 2s10s
L'esatto SQL dietro ogni numero
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
)

Il 5-year ha guidato i movimenti della sessione con +4 bp; il 2-year è chiuso con un aumento di +2 bp, e nessuna altra scadenza ha registrato variazioni superiori a 2 bp in qualsiasi direzione. Ciò ha mantenuto lo 2s10s spread a 0.35% (-1 bp nella sessione), all'interno del suo recente range. Il contenuto movimento dei tassi si è accompagnato al contenuto movimento dell'indice.

Il calendario della giornata

QueryEx-divs, splits, SEC filings, news attention
L'esatto SQL dietro ogni numero
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

Il calendario della giornata è stato poco denso: 81 record ex-dividend, 1 forward split eseguiti e 3722 SEC filings totali (con 775 Form 4 insider trades, 527 prospetti 424B2 e 163 report 8-K). La copertura news ha registrato 192 articoli su 3 editori, con MU tra i ticker più menzionati in 17 articoli. Nessuna corporate action di aziende famose è emersa nel flusso della giornata: la narrazione del mercato è stata concentrata esclusivamente sul settore dei chip.

La sessione, verificata

QuerySession verification: prima/ultima bar SPY ET, count regular-bar, holiday receipts, next closure
L'esatto SQL dietro ogni numero
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'

La sessione ha coperto l'intero intervallo di trading esteso — la prima barra SPY alle 04:00 ET, l'ultima alle 19:59 ET — con 390 barre minute durante l'orario regolare e 1 sessioni di trading nell'intervallo (nessun half-day; la tabella delle festività non riporta righe per questa data). La prossima chiusura prevista è alle Labor Day del 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.

Metodologia

  • Fonte dei dati di mercato: consolidated tape — delayed_stocks_minute_aggs per prezzi e volumi di indici e singoli titoli, cache_stocks_quotes per i conteggi NBBO e gli spread quotati, cache_options_quotes e options_trades per l'options tape.
  • Gestione fuso orario: tutti i timestamp memorizzati sono in UTC; le etichette orarie ET sono calcolate con toTimeZone(..., 'America/New_York') solo nelle liste SELECT; le clausole WHERE utilizzano i letterali UTC grezzi.
  • Finestra oraria sessione regolare: 13:30–20:00 UTC, verificata tramite le minute bars osservate di SPY (il pannello di session-verification) e non tramite calcoli sul calendario.
  • Definizione dello spread: (ask - bid) / midpoint × 10,000 in basis points su quotazioni bid-ask valide per lo snapshot; il pannello dell'ultimo mese è una larghezza media in cents, indicata come media.
  • Confronti con la sessione precedente: calcolati tramite query a partire dal 7 luglio (e il 6 luglio per il confronto day-over-day del martedì) — mai riportati da un post precedente.
  • Aggregati deterministici: quantileExact, argMin/argMax con chiave a tupla, e un tie-break deterministico sulle news per garantire rigenerazioni stabili.
  • Data di riferimento del warehouse: 10 luglio 2026 (T+2 per il periodo); le tape di entrambe le sessioni sono completamente ingerite a questo livello.

Link correlati: riepilogo del 7 luglio 2026, costi di trading sulle opzioni, basi sullo spread bid-ask, opzioni 0DTE e volume relativo.