Strasmore Research
Recap di mercato Matt ConnorDi Matt Connor · Aggiornato 2026-08-02

Riepilogo mercato 30 luglio 2026: i numeri della seduta

Dati del 30 luglio 2026: indici, breadth, spread settoriale, flussi sulle opzioni, quotazioni, tassi e calendario, tutti basati su query archiviate.

Questo riepilogo di mercato per giovedì 30 luglio 2026 ricostruisce l’intera seduta a partire da query archiviate: la variazione close-over-close di SPY è stata pari a 1.68%, la quota di titoli in rialzo sul mercato più liquido è stata 63.5% e il mercato delle opzioni ha registrato 67.06 milioni di contratti. Ogni intervallo riportato di seguito è ancorato a date esplicite per entrambe le estremità; rieseguendo la query SQL di qualsiasi pannello si ottengono quindi gli stessi dati.

Il tabellone

Ogni variazione confronta l'ultima barra minuto della sessione regolare del 30 luglio con quella di mercoledì 29 luglio, in due sessioni consecutive. Le righe sono in ordine alfabetico, quindi ogni ETF mantiene una posizione fissa.

QuerySPY / QQQ / DIA / IWM: 30 luglio rispetto alla chiusura del 29 luglio, orario regolare
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-29 13:30:00' AND window_start < '2026-07-29 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-30 13:30:00' AND window_start < '2026-07-30 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
Run this yourself

DIA si è mosso di 1.19%, IWM di 1.37%, QQQ di 3.34% e SPY di 1.68%, chiudendo a $741.73. Ogni riga scompone la variazione nelle sue due componenti: SPY ha aperto a 0.9% rispetto alla chiusura di mercoledì e si è mosso di 0.77% dall'apertura alla chiusura. La componente overnight e quella intraday non devono necessariamente essere concordi, e la loro scomposizione è la prima impronta della sessione.

La giornata è stata insolita?

Il dato di una sola sessione dice poco senza conoscere la distribuzione di riferimento. Per questo la giornata viene classificata all’interno del mese mobile precedente, applicando la stessa logica.

QueryMovimento giornaliero di SPY nel contesto storico recente (apertura-chiusura, dal 30 giugno al 30 luglio)
L'esatto SQL dietro ogni numero
SELECT
    round(anyIf(oc_pct, d = toDate('2026-07-30')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-30'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-30'))) + 1 AS spy_abs_move_rank,
    count() AS spy_sessions_compared,
    toString(min(d)) AS first_session
FROM (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-06-30 13:30:00')
      AND window_start < toDateTime('2026-07-31 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY d
)
Run this yourself

Il movimento di SPY dall’apertura alla chiusura, pari a 0.77%, si è collocato al 3 posto su 22 sessioni mobili precedenti in termini di ampiezza assoluta, in una finestra che risale fino a 2026-06-30. La posizione indica quante altre sessioni della finestra hanno registrato un movimento più ampio, più uno. Il primo posto corrisponderebbe quindi al maggiore movimento del mese mobile precedente.

Ampiezza di mercato

Il livello di un indice è un solo numero. L’ampiezza di mercato conta quanti titoli si sono mossi nella stessa direzione.

QueryAmpiezza del mercato su strumenti liquidi: chiusura del 30 luglio rispetto alla chiusura del 29 luglio, filtro da $1M scambiati
L'esatto SQL dietro ogni numero
SELECT
    countIf(c30 > c29 AND liquid) AS advancers,
    countIf(c30 < c29 AND liquid) AS decliners,
    countIf(c30 = c29 AND liquid) AS unchanged,
    countIf(liquid) AS liquid_tickers,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(c30 > c29 AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, c29, c30, dv30 >= 1000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00') AS c30,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-30 13:30:00') AS dv30
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-30 20:00:00'
        GROUP BY ticker
        HAVING c29 > 0 AND c30 > 0
    )
)
Run this yourself

Su 5960 titoli che hanno superato la soglia di un milione di dollari di controvalore negli orari regolari, 3782 hanno chiuso sopra la chiusura di mercoledì e 2122 hanno chiuso sotto, per una quota di titoli in rialzo pari a 63.5%. Il filtro ha escluso 5492 titoli meno liquidi, conteggiati qui invece di essere semplicemente scartati.

Il paniere delle mega-cap

Gli stessi otto nomi mega-cap compaiono in ogni sessione, in ordine alfabetico, così ciascuno mantiene la propria riga. Il punto è avere un paniere fisso: il lettore impara a riconoscere le righe e nessuna scelta editoriale individua a posteriori i vincitori.

QueryOtto mega-cap: variazione rispetto al 29 luglio e controvalore in dollari nell’orario regolare, 30 luglio
L'esatto SQL dietro ogni numero
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-30 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-30 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-30 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'AMZN', 'AVGO', 'GOOGL', 'META', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00')
        OR (window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 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,
    day_dollar_bn
FROM per_name
ORDER BY ticker
Run this yourself

AAPL si è mosso di -1.24%, META di -8.17%, MSFT di 15.06% e NVDA di 2.67%, su un controvalore di 19.63 miliardi di dollari nelle ore regolari di mercato, mentre TSLA ha registrato 3.53%. La colonna in dollari mostra quanto del flusso degli scambi sia rappresentato autonomamente da questi otto nomi; il pannello sull’ampiezza del mercato qui sopra verifica fino a che punto il resto del mercato li abbia seguiti.

I titoli più movimentati della giornata

Entrambe le liste richiedono un controvalore di cinque milioni di dollari nelle ore regolari, escludono qualsiasi titolo il cui split sia stato eseguito tra le due chiusure considerate ed escludono un simbolo riutilizzato in base al filtro di ambiguità interno descritto nelle note.

QueryMaggiori rialzi e ribassi: chiusura del 30 luglio rispetto alla chiusura del 29 luglio, scambi da $5M+, frazionamenti esclusi
L'esatto SQL dietro ogni numero
SELECT ticker, board, day_pct, day_dollar_m
FROM (
    SELECT 'gainers' AS board, ticker, round((c30 / c29 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00') AS c30,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-30 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-29' AND execution_date <= '2026-07-30')
          AND window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-30 20:00:00'
        GROUP BY ticker
        HAVING c29 > 0 AND c30 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct DESC
    LIMIT 8
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((c30 / c29 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00') AS c30,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-30 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-29' AND execution_date <= '2026-07-30')
          AND window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-30 20:00:00'
        GROUP BY ticker
        HAVING c29 > 0 AND c30 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct ASC
    LIMIT 8
)
ORDER BY board DESC, abs(day_pct) DESC
Run this yourself

Il maggior rialzo della lista, CYCU, ha guadagnato 489.5% con scambi per 474.4 milioni di dollari. Il calo più marcato, IREZ, ha registrato -61.2% con scambi per 90.8 milioni. Questa pagina riporta le variazioni e i controvalori, senza attribuire loro alcuna spiegazione.

Dispersione tra i settori

Gli undici fondi SPDR dei settori selezionati, in base alla chiusura del 30 luglio rispetto a quella del 29 luglio, dal migliore al peggiore. Il paniere è definito e fisso; non si tratta di una classificazione del fornitore.

QueryETF settoriali, chiusura del 30 luglio rispetto alla chiusura del 29 luglio, in ordine di performance
L'esatto SQL dietro ogni numero
SELECT sector, day_pct, round(max(day_pct) OVER () - day_pct, 2) AS points_behind_best
FROM (
    SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
                   ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
                   ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
                   ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
           round((c30 / c29 - 1) * 100, 2) AS day_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-30 00:00:00') AS c29,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-30 00:00:00') AS c30
        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-29 13:30:00' AND window_start < '2026-07-29 20:00:00')
            OR (window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00'))
        GROUP BY ticker
        HAVING c29 > 0 AND c30 > 0
    )
)
ORDER BY day_pct DESC
Run this yourself

Technology è risultato in testa con 5.52%, mentre Communications ha chiuso in coda a -2.69%, con un ritardo di 8.21 punti percentuali. Questo spread rappresenta la dispersione settoriale della giornata: un mercato in cui tutti gli undici settori si muovono entro un punto percentuale è molto diverso da uno in cui la performance si distribuisce su diversi punti.

Dove sono stati scambiati i dollari

QueryPrimi 6 per controvalore scambiato, primi 4 per azioni scambiate: orario regolare del 30 luglio
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
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-30 13:30:00' AND window_start < '2026-07-30 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-30 13:30:00' AND window_start < '2026-07-30 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard, if(leaderboard = 'by shares traded', shares_m, dollar_volume_bn) DESC
Run this yourself

MU ha guidato la classifica per controvalore in dollari, con 43.29 miliardi di controvalore negli orari regolari di negoziazione; MSFT lo ha seguito con 42.56 miliardi. La classifica per numero di azioni risponde a una domanda diversa: CYCU è stato in testa con 544 milioni di azioni, a un prezzo medio implicito di $0.86. Il controvalore in dollari individua l'attenzione del mercato, mentre il volume di azioni mostra l'intensità degli scambi; la versione per singolo titolo di questa misura è il volume relativo.

Il flusso degli ordini in opzioni

QueryFlusso delle opzioni: contratti, quota call, quota same-day rispetto a mercoledì, contratto SPY più scambiato
L'esatto SQL dietro ogni numero
WITH
    (
        SELECT (strike, typ, vol_m, is_0dte)
        FROM (
            SELECT toFloat64(any(strike_price)) AS strike, any(option_type) AS typ,
                   round(toFloat64(sum(size)) / 1e6, 2) AS vol_m,
                   if(substring(ticker, length(ticker) - 14, 6) = '260730', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-30 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00'
              AND underlying_symbol = 'SPY'
            GROUP BY ticker
            ORDER BY vol_m DESC, strike ASC
            LIMIT 1
        )
    ) AS top_spy,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
    ) AS jul29_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260729') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
    ) AS jul29_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul29_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) = '260730') / sum(size), 1) AS pct_0dte,
    jul29_pct_0dte,
    spy_regular_close,
    top_spy.1 AS top_spy_strike,
    top_spy.2 AS top_spy_type,
    top_spy.3 AS top_spy_contracts_m,
    top_spy.4 AS top_spy_is_0dte,
    round(top_spy.1 - spy_regular_close, 2) AS top_spy_strike_minus_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-30 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00'
Run this yourself

Il flusso degli ordini in opzioni ha registrato 10.93 milioni di operazioni per 67.06 milioni di contratti, rispetto ai 66.84 milioni di mercoledì. Le call hanno rappresentato 54.6% del volume dei contratti. I contratti in scadenza nella stessa sessione, il segmento a scadenza zero, hanno raggiunto 25.3%, contro 33.1% di mercoledì, con un ritmo determinato dalla tempistica delle scadenze. Il contratto SPY più scambiato era il 740 C, con 0.56 milioni di contratti; il suo strike era distante -1.73 dollari dalla chiusura regolare di SPY a $741.73, calcolata come strike meno chiusura.

Il flusso delle quotazioni

I dati sulle quotazioni sono il dataset più scarso di questo desk e vengono misurati a ogni seduta. Anche le giornate ordinarie entrano nel registro.

QueryNumero di aggiornamenti NBBO azionari: 30 luglio rispetto al 29 luglio, con aggiornamenti dei ticker indicati (milioni)
L'esatto SQL dietro ogni numero
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-30')) / 1e6, 2) AS jul30_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / 1e6, 2) AS jul29_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-30')) / countIf(toDate(sip_timestamp) = toDate('2026-07-29')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-30') AND ticker = 'SPY') / 1e6, 2) AS jul30_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-30') AND ticker = 'QQQ') / 1e6, 2) AS jul30_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-30') AND ticker = 'NVDA') / 1e6, 2) AS jul30_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00'
Run this yourself

Il flusso delle quotazioni azionarie ha registrato 560.75 milioni di aggiornamenti NBBO, contro 722.65 milioni mercoledì, con una variazione giorno su giorno pari a -22.4%. SPY ha registrato 5.55 milioni di aggiornamenti, QQQ 6.75 milioni e NVDA 2.39 milioni.

QuerySette titoli: spread mediano quotato in RTH in punti base, con conteggi sulla qualità delle quotazioni, 30 luglio
L'esatto SQL dietro ogni numero
SELECT ticker,
       round(quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
       round(count() / 1e6, 2) AS quote_updates_m,
       countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
       countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'DIA', 'IWM', 'NVDA', 'QQQ', 'SPY', 'TSLA')
  AND sip_timestamp >= '2026-07-30 13:30:00' AND sip_timestamp < '2026-07-30 20:00:00'
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY ticker
Run this yourself

Lo spread mediano quotato di SPY nelle ore regolari è stato pari a 0.27 punti base del mid, quello di QQQ a 0.59 e quello di NVDA a 1.03. Le ultime due colonne mostrano l'informazione completa: le quotazioni unilaterali e crossed vengono conteggiate per ciascun nome e tenute separate dalla mediana, anziché essere eliminate senza indicazione. Una quotazione crossed, con il bid superiore all'ask, è un normale effetto di un feed consolidato ottenuto dall'unione di molti venue con risoluzione al nanosecondo.

QuerySpread mediano di SPY confrontato con tutte le sessioni di luglio, dal più stretto
L'esatto SQL dietro ogni numero
SELECT round(anyIf(spread_bps, d = toDate('2026-07-30')), 2) AS jul30_median_spread_bps,
       arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-30')), groupArrayIf(spread_bps, d != toDate('2026-07-30'))) + 1 AS rank_tightest,
       count() AS sessions_compared,
       toString(min(d)) AS first_session
FROM (
    SELECT toDate(sip_timestamp) AS d,
           quantileExactIf(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-07-01 13:30:00' AND sip_timestamp < '2026-07-30 20:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
    HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
)
Run this yourself

Confrontato con ogni seduta di luglio sulla base della stessa logica, lo spread mediano di SPY, pari a 0.27 punti base, si è collocato in 19 posizione su 21, contando dal più stretto, in una finestra iniziata il 2026-07-01. Su un tape tranquillo, questo è il punto del pannello: una giornata ordinaria per la liquidità è un dato, pubblicato e delimitato.

QueryFlusso NBBO delle opzioni: aggiornamenti totali rispetto al flusso azionario, più il segmento relativo al root SPY, 30 luglio
L'esatto SQL dietro ogni numero
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-30 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00') AS jul30_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-30 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00') AS jul30_stock_quote_rows
SELECT
    round(jul30_options_rows / 1e9, 2) AS jul30_options_bn,
    round(jul30_options_rows / jul30_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-30 13:30:00' AND sip_timestamp < '2026-07-30 20:00:00') / 1e6, 0) AS jul30_spy_options_m
Run this yourself

Il flusso NBBO delle opzioni ha registrato 10.32 miliardi di aggiornamenti, 18.4 volte il flusso delle quotazioni azionarie, con il solo root SPY a 441 milioni di aggiornamenti nelle ore regolari.

Tassi

QueryQuotazioni della curva Treasury disponibili, dal 27 al 30 luglio
L'esatto SQL dietro ogni numero
SELECT toString(date) AS date,
       round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
       round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
       round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
       round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-27' AND date <= '2026-07-30'
ORDER BY date
Run this yourself

L'archivio del Treasury è in ritardo di circa una sessione rispetto al mercato, quindi questo pannello riporta le transazioni eseguite che contiene: 4 righe datate nella finestra. L'ultima, datata 2026-07-30, indicava il biennale a 4.23%, il decennale a 4.68% e il trentennale a 5.21%, con uno spread tra il biennale e il decennale di 45 punti base.

Il calendario dietro la giornata

QueryEx-dividendi, frazionamenti, quotazioni, notizie e composizione dei filing SEC del 30 luglio
L'esatto SQL dietro ogni numero
WITH
    (
        SELECT (argMax(t, (n, t)), max(n))
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE published_utc >= '2026-07-30 04:00:00' AND published_utc < '2026-07-31 04:00:00'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), uniqExact(cik), countIf(form_type = '4'), countIf(form_type = '8-K'), countIf(form_type = '424B2'), countIf(form_type = '10-Q'))
        FROM global_markets.stocks_sec_edgar_index
        WHERE filing_date = '2026-07-30'
    ) AS fil
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-30') AS ex_dividend_records,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-30') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-30') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-30') AS listings,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-30 04:00:00' AND published_utc < '2026-07-31 04:00:00') AS news_articles,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-30 04:00:00' AND published_utc < '2026-07-31 04:00:00') AS news_publishers,
    top_news.1 AS top_news_ticker,
    top_news.2 AS top_news_n,
    fil.1 AS fil_total,
    fil.2 AS fil_filers,
    fil.3 AS fil_form4,
    fil.4 AS fil_8k,
    fil.5 AS fil_424b2,
    fil.6 AS fil_10q
Run this yourself

200 registrazioni di dividendi sono andate ex-dividend il 30 luglio; sono stati eseguiti 3 split inversi e 3 split ordinari, mentre 3 nuove quotazioni hanno fatto il loro ingresso sul mercato. Il feed delle notizie conteneva 173 articoli di 2 editori, con NVDA, il ticker più seguito nella finestra di questo feed, a quota 11 articoli. L’indice giornaliero EDGAR contiene 5544 filing relativi alla data, provenienti da 2743 filer distinti: 745 report degli insider Form 4, 460 current report 8-K, 1426 supplementi di pricing 424B2 e 252 report trimestrali 10-Q. L’indice viene pubblicato secondo una propria tempistica e questo pannello riporta i dati disponibili al momento della generazione.

In agenda

Le prossime due sessioni vanno lette nelle stesse tabelle, guardando deliberatamente oltre il periodo. Venerdì 31 luglio è l’ultima data di trading del mese in calendario.

Query30 luglio e 3 agosto in calendario: chiusure, ex-dividendi, frazionamenti, scadenza di venerdì e ritardo sugli short interest
L'esatto SQL dietro ogni numero
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-31' AND date <= '2026-08-03' AND status != 'open') AS closures_next_two_sessions,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-31' AND ex_dividend_date <= '2026-08-03') AS exdiv_records_next_two_sessions,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-31' AND ex_dividend_date <= '2026-08-03') AS household_exdivs,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-31' AND execution_date <= '2026-08-03') AS splits_next_two_sessions,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) AS jul31_expiry_pct_of_thu_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-30') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-30 00:00:00' AND sip_timestamp < '2026-07-31 00:00:00'
Run this yourself

La tabella delle festività mostra 0 chiusure tra venerdì 31 luglio e lunedì 3 agosto. I titoli con stacco del dividendo registrano la data ex-dividend nelle due sessioni, 544 in totale, di cui 0 tra i dieci nomi del comparto dei beni di consumo verificati; sono inoltre programmati 14 split. Del volume di opzioni di giovedì, 26.7% era già concentrato in contratti con scadenza venerdì 31 luglio. L’ultimo dato disponibile sullo short interest è 2026-07-15, un file pubblicato con un ritardo sufficiente a richiedere una spiegazione dedicata.

La sessione verificata

QueryVerifica della sessione: prima/ultima barra SPY ET, numero di barre regolari, registrazioni delle festività, prossima chiusura
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,
    countIf(window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-30 13:30:00' AND window_start < '2026-07-30 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-30') AS jul30_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-30' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-30' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-30 00:00:00' AND window_start < '2026-07-31 00:00:00'
Run this yourself

Una sessione regolare completa: prima barra di SPY alle 04:00 ET, ultima alle 19:59 ET, 390 barre nell’orario regolare, 1 sessione nella finestra e 0 righe relative alle festività per la data. La prossima chiusura programmata è Labor Day il 2026-09-07.

Domande frequenti

Come si è mosso il mercato azionario giovedì 30 luglio 2026?

SPY ha registrato una variazione 1.68% tra la chiusura precedente e quella del giorno, a $741.73, mentre QQQ si è attestato a 3.34%, DIA a 1.19% e IWM a 1.37%. Tra i titoli più liquidi, 3782 è salito e 2122 è sceso.

Quale settore ha guidato la seduta del 30 luglio 2026?

Technology, a 5.52%, misurato sul paniere degli undici fondi SPDR select-sector. Il più debole degli undici, Communications, ha registrato -2.69%.

Quanto è stata intensa l’attività sul mercato delle opzioni il 30 luglio 2026?

Sono stati scambiati 67.06 milioni di contratti, rispetto ai 66.84 milioni della seduta precedente. I contratti con scadenza in giornata hanno rappresentato 25.3% dei volumi e le call 54.6%.

Quale titolo ha registrato il maggior controvalore degli scambi il 30 luglio 2026?

MU, con 43.29 miliardi di dollari di controvalore durante le ore regolari, davanti a MSFT con 42.56 miliardi.

Note sui dati

L’edizione giornaliera precedente è 29 luglio 2026, mentre il riepilogo settimanale riguarda la settimana precedente a questa. I pannelli nominativi per ticker sono ordinati alfabeticamente, così i riferimenti nel testo puntano a righe fisse; le classifiche e i pannelli dei titoli in movimento sono ordinati per valore, e ogni indicazione di posizione che riportano è codificata come limite di controllo. Il paniere mega-cap e il paniere settoriale di undici fondi sono insiemi dichiarati e fissi, non classificazioni del vendor. I pannelli dei titoli in movimento applicano una soglia di turnover di cinque milioni di dollari nelle ore regolari, escludono i titoli il cui split è stato eseguito tra le due chiusure considerate ed escludono un simbolo riutilizzato secondo il controllo interno sulle ambiguità; in questo modo ogni richiamo rimanda sempre a un titolo verificabile. I pannelli delle quotazioni contano le quotazioni unilaterali e crossed per ciascun titolo, invece di eliminarle senza indicarlo. Il file del Treasury e l’indice giornaliero EDGAR arrivano secondo calendari propri; pertanto questi pannelli riportano i dati disponibili, senza presumere che i file siano già arrivati. Qui non compare alcun indice di volatilità implicita: queste serie non sono autorizzate in questo warehouse, quindi la volatilità viene letta dal tape attraverso i range, la quota di opzioni nella seduta e il comportamento delle quotazioni.

Metodologia

  • Fonte dei dati di mercato: consolidated tape. delayed_stocks_minute_aggs per prezzi e volumi, options_trades per il flusso degli ordini sulle opzioni, cache_stocks_quotes e cache_options_quotes per i pannelli NBBO.
  • Chiusura: l’ultima barra al minuto della sessione regolare, mai un print assunto alle 16:00 e mai un print di extended hours.
  • Gestione del fuso orario: tutti i timestamp archiviati sono in UTC; le clausole WHERE usano literal UTC grezzi e toTimeZone compare solo negli elenchi SELECT per le etichette ET.
  • Verifica della sessione: effettuata tramite la tabella delle festività e le barre osservate, mai presunta dal calendario.
  • Confronti con la sessione precedente: calcolati nella query a partire dal 29 luglio, mai riportati da un articolo precedente.
  • Decimali: le colonne di prezzo, size e volume vengono convertite in Float64 prima di qualsiasi divisione o prodotto.
  • Aggregazioni deterministiche: quantili esatti e criteri di spareggio basati su tuple in ogni passaggio; ogni indicazione di ordine o segno nel testo è codificata come limite di controllo.
  • Data as-of del warehouse: 1° agosto 2026, due giorni dopo la sessione, al limite del consueto ritardo di ingestione del tape, pari a uno-due giorni; le ricevute vincolate riportate sopra mantengono pubblicato l’articolo se, al momento della generazione, manca un dataset.

Collegamenti: il precedente riepilogo giornaliero, il riepilogo settimanale, quando scadono le opzioni, che cos’è uno spread denaro-lettera e lo spread tra i Treasury a due e dieci anni.

Ogni query riportata sopra viene eseguita senza modifiche sul terminale Strasmore, se si desidera spostare la finestra su una sessione diversa.