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

Mercati 28 luglio 2026: riepilogo e numeri

Riepilogo del 28 luglio 2026: indici, breadth, spread settoriale, options flow, quotazioni, tassi e calendario, con dati verificabili da query.

Questo riepilogo di mercato per martedì 28 luglio 2026 legge l’intera seduta sulla base di query archiviate: la variazione close-over-close di SPY è stata pari a 0.24%, la quota di titoli in rialzo sul liquid tape a 58.6% e l’options tape ha registrato 59.28 milioni di contratti. Ogni intervallo riportato di seguito è ancorato a date di inizio e fine esplicite, quindi rieseguendo l’SQL di qualsiasi pannello si ottengono gli stessi dati.

Il tabellone

Ogni variazione confronta l’ultima barra a un minuto della sessione regolare del 28 luglio con quella di lunedì 27 luglio, due sedute consecutive. Le righe sono in ordine alfabetico, quindi ogni ETF mantiene una posizione fissa.

QuerySPY / QQQ / DIA / IWM: 28 luglio vs chiusura del 27 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-27 13:30:00' AND window_start < '2026-07-27 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-28 13:30:00' AND window_start < '2026-07-28 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.07%, IWM di 0.15%, QQQ di -0.96% e SPY di 0.24%, chiudendo a $740.76. Ogni riga scompone la variazione nelle sue due componenti: SPY ha aperto a 0.02% rispetto alla chiusura di lunedì e si è mosso di 0.21% dall’apertura alla chiusura. La componente overnight e quella intraday non devono necessariamente coincidere; la loro suddivisione è la prima impronta della seduta.

La seduta è stata insolita?

Il dato di una sola seduta dice poco senza la distribuzione che lo sostiene. Per questo la seduta viene classificata all’interno del proprio mese mobile applicando la stessa logica.

QueryMovimento giornaliero di SPY nel contesto storico recente (apertura-chiusura, dal 29 giugno al 28 luglio)
L'esatto SQL dietro ogni numero
SELECT
    round(anyIf(oc_pct, d = toDate('2026-07-28')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-28'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-28'))) + 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-29 13:30:00')
      AND window_start < toDateTime('2026-07-29 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.21%, si è classificato al 14° posto su 21 sedute mobili in base all’ampiezza assoluta, in una finestra che risale fino a 2026-06-29. La classifica conta quante altre sedute nella finestra hanno registrato un movimento più ampio, aggiungendo uno. Il primo posto corrisponderebbe quindi al movimento più ampio del mese mobile.

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 titoli liquidi: chiusura del 28 luglio vs chiusura del 27 luglio, filtro da $1M di scambi
L'esatto SQL dietro ogni numero
SELECT
    countIf(c28 > c27 AND liquid) AS advancers,
    countIf(c28 < c27 AND liquid) AS decliners,
    countIf(c28 = c27 AND liquid) AS unchanged,
    countIf(liquid) AS liquid_tickers,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(c28 > c27 AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, c27, c28, dv28 >= 1000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 13:30:00') AS dv28
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0
    )
)
Run this yourself

Su 6008 titoli che hanno superato la soglia di un controvalore di un milione di dollari nelle contrattazioni regolari, 3519 hanno chiuso sopra la chiusura di lunedì e 2423 hanno chiuso sotto, con una quota di titoli in rialzo pari a 58.6%. Il filtro ha escluso 5346 titoli meno liquidi, conteggiati qui anziché eliminati senza indicazione.

Il paniere delle mega-cap

Gli stessi otto titoli mega-cap compaiono qui a ogni seduta, in ordine alfabetico, così ciascuno mantiene la propria riga. Il punto è avere un paniere fisso: il lettore impara a riconoscere le righe e nessun vincitore viene scelto a posteriori dalla redazione.

QueryOtto mega-cap: variazione vs 27 luglio e controvalore in dollari nell’orario regolare, 28 luglio
L'esatto SQL dietro ogni numero
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-28 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-28 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 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-27 13:30:00' AND window_start < '2026-07-27 20:00:00')
        OR (window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 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 0.97%, META di -0.05%, MSFT di 1.12% e NVDA di 0.23%, su un controvalore di 21.11 miliardi di dollari negli scambi della sessione regolare, mentre TSLA si è attestato a -0.57%. La colonna in dollari mostra quanto del flusso di scambi complessivo sia concentrato autonomamente in questi otto titoli; il pannello sull’ampiezza del mercato qui sopra verifica quanto il resto del mercato li abbia seguiti.

I titoli più movimentati della giornata

Entrambe le liste richiedono un controvalore di almeno cinque milioni di dollari negli orari regolari, escludono i titoli il cui split è stato eseguito tra le due chiusure considerate ed escludono un simbolo riutilizzato in base al filtro interno contro le ambiguità descritto nelle note.

QueryMaggiori rialzi e ribassi: chiusura del 28 luglio vs chiusura del 27 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((c28 / c27 - 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-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 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-27' AND execution_date <= '2026-07-28')
          AND window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct DESC
    LIMIT 8
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((c28 / c27 - 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-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 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-27' AND execution_date <= '2026-07-28')
          AND window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct ASC
    LIMIT 8
)
ORDER BY board DESC, abs(day_pct) DESC
Run this yourself

Il maggiore rialzo della lista, STKH, ha registrato una variazione di 166.7%, con 113.2 milioni di dollari di scambi. Il calo più marcato, YYAI, ha segnato -71%, con 18.3 milioni di dollari. Questa pagina riporta entità e dati di scambio, senza attribuire loro alcuna spiegazione.

Dispersione settoriale

Gli undici fondi SPDR Select Sector, con la chiusura del 28 luglio rapportata a quella del 27 luglio, sono ordinati dal migliore al peggiore. Il paniere è dichiarato e fisso; non si tratta di una classificazione del fornitore.

QueryETF settoriali, chiusura del 28 luglio vs chiusura del 27 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((c28 / c27 - 1) * 100, 2) AS day_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-28 00:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 00:00:00') AS c28
        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-27 13:30:00' AND window_start < '2026-07-27 20:00:00')
            OR (window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00'))
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0
    )
)
ORDER BY day_pct DESC
Run this yourself

Health Care ha guidato la classifica con 2.36%, mentre Technology è rimasto in fondo con -1.9%, a 4.26 punti percentuali di distanza. Questo spread rappresenta la dispersione settoriale della seduta: un mercato in cui tutti gli undici fondi chiudono entro un punto percentuale è molto diverso da uno in cui le performance si distribuiscono su diversi punti.

Dove sono stati scambiati i dollari

QueryPrimi 6 per controvalore scambiato, primi 4 per azioni scambiate: orario regolare del 28 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-28 13:30:00' AND window_start < '2026-07-28 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-28 13:30:00' AND window_start < '2026-07-28 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, con 39.21 miliardi di scambi nelle ore regolari, seguito da QQQ con 29.98 miliardi. La classifica per numero di azioni risponde a una domanda diversa: ONFO l’ha guidata con 182.4 milioni di azioni e un prezzo medio implicito di $0.16. Il controvalore degli scambi individua l’attenzione del mercato, mentre il volume in azioni ne misura la rotazione; la versione per singolo titolo di questa misura è il volume relativo.

Il flusso degli ordini sulle opzioni

QueryFlussi sul mercato delle opzioni: contratti, quota call, quota same-day vs lunedì, contratto SPY più attivo
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) = '260728', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 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-28 13:30:00' AND window_start < '2026-07-28 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-28 00:00:00'
    ) AS jul27_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260727') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-28 00:00:00'
    ) AS jul27_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul27_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) = '260728') / sum(size), 1) AS pct_0dte,
    jul27_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-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

Il flusso degli ordini sulle opzioni ha registrato 10.07 milioni di operazioni per 59.28 milioni di contratti, rispetto ai 64.69 milioni di lunedì. Le call hanno rappresentato 55% del volume dei contratti. I contratti in scadenza nella stessa seduta, quelli della categoria zero-days-to-expiry, hanno raggiunto 29%, contro 39.3% lunedì, con un ritmo determinato dal timing delle scadenze. Il contratto SPY più scambiato è stato il 742 C, con 0.72 milioni di contratti; il suo strike si trovava a 1.24 dollari dalla chiusura ufficiale di SPY a $740.76, calcolati 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 sulle azioni: 28 luglio vs 27 luglio, con aggiornamenti sui ticker indicati (milioni)
L'esatto SQL dietro ogni numero
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / 1e6, 2) AS jul28_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-27')) / 1e6, 2) AS jul27_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / countIf(toDate(sip_timestamp) = toDate('2026-07-27')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'SPY') / 1e6, 2) AS jul28_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'QQQ') / 1e6, 2) AS jul28_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'NVDA') / 1e6, 2) AS jul28_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

Il flusso delle quotazioni azionarie ha registrato 536.07 milioni di aggiornamenti NBBO, contro 553.53 milioni di lunedì, con una variazione giornaliera di -3.2%. SPY ha registrato 4.72 milioni di aggiornamenti, QQQ 5.94 milioni e NVDA 3.01 milioni.

QuerySette titoli: spread quotato mediano RTH in punti base, con conteggi della qualità delle quotazioni, 28 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-28 13:30:00' AND sip_timestamp < '2026-07-28 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

Durante le ore regolari, il spread mediano quotato su SPY, misurato in punti base del mid, è stato pari a 0.27; quello di QQQ a 0.74 e quello di NVDA a 1.52. Le ultime due colonne riportano l’informazione completa: le quotazioni a un solo lato e quelle incrociate vengono conteggiate per ciascun nome e tenute separate dalla mediana, anziché essere eliminate senza indicazione. Una quotazione incrociata, con il bid superiore all’ask, è un normale effetto di una consolidated feed costruita integrando molte venue alla risoluzione del nanosecondo.

QuerySpread mediano di SPY in classifica rispetto a tutte le sessioni di luglio, dal più stretto
L'esatto SQL dietro ogni numero
SELECT round(anyIf(spread_bps, d = toDate('2026-07-28')), 2) AS jul28_median_spread_bps,
       arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-28')), groupArrayIf(spread_bps, d != toDate('2026-07-28'))) + 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-28 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

Confrontata con tutte le sedute di luglio secondo la stessa logica, la mediana dello spread di SPY, pari a 0.27 punti base, si è collocata in posizione 16 su 19, contando dalla più stretta, in una finestra iniziata il 2026-07-01. Su un flusso di quotazioni tranquillo, questo è il punto del pannello: una giornata ordinaria per la liquidità è un dato rilevato, pubblicato e delimitato.

QueryFlusso NBBO delle opzioni: aggiornamenti totali vs mercato azionario, più segmento sul root SPY, 28 luglio
L'esatto SQL dietro ogni numero
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00') AS jul28_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00') AS jul28_stock_quote_rows
SELECT
    round(jul28_options_rows / 1e9, 2) AS jul28_options_bn,
    round(jul28_options_rows / jul28_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-28 13:30:00' AND sip_timestamp < '2026-07-28 20:00:00') / 1e6, 0) AS jul28_spy_options_m
Run this yourself

Il flusso NBBO delle opzioni ha registrato 10.23 miliardi di aggiornamenti, 19.1 volte il flusso delle quotazioni azionarie, con il solo root di SPY a quota 382 milioni di aggiornamenti durante le ore regolari.

Tassi

QueryQuotazioni della curva Treasury registrate, dal 23 al 28 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-23' AND date <= '2026-07-28'
ORDER BY date
Run this yourself

I dati del Treasury hanno circa una seduta di ritardo rispetto al mercato in tempo reale, quindi questo pannello riporta le operazioni eseguite disponibili: 4 righe datate nella finestra. L’ultima, datata 2026-07-28, indicava il biennale a 4.26%, il decennale a 4.61% e il trentennale a 5.09%, con uno spread tra il biennale e il decennale di 35 punti base.

Il calendario alla base della giornata

QueryStacchi dividendo, frazionamenti, quotazioni, notizie e mix dei filing SEC del 28 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-28 04:00:00' AND published_utc < '2026-07-29 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-28'
    ) AS fil
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-28') AS ex_dividend_records,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-28') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-28') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-28') AS listings,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-28 04:00:00' AND published_utc < '2026-07-29 04:00:00') AS news_articles,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-28 04:00:00' AND published_utc < '2026-07-29 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

147 record di dividendi sono passati ex-dividend il 28 luglio; sono stati eseguiti 3 split inversi e 0 split, mentre 2 nuove quotazioni hanno debuttato sul mercato. Il news feed conteneva 161 articoli di 2 editori, con MSFT, il ticker più seguito nella finestra di questo feed, a quota 9 articoli. L’indice giornaliero EDGAR contiene 5915 filing relativi alla data, presentati da 2898 soggetti distinti: 856 report degli insider Form 4, 315 current report 8-K, 900 pricing supplement 424B2 e 100 report trimestrali 10-Q. L’indice viene aggiornato secondo un calendario proprio e questo pannello mostra i dati disponibili al momento della generazione.

In programma

Per il resto della settimana, la lettura delle stesse tabelle guarda deliberatamente oltre il periodo.

Query29–31 luglio in calendario: chiusure, stacchi dividendo, frazionamenti, scadenza di venerdì e ritardo nei dati short interest
L'esatto SQL dietro ogni numero
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-29' AND date <= '2026-07-31' AND status != 'open') AS closures_rest_of_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-29' AND ex_dividend_date <= '2026-07-31') AS exdiv_records_rest_of_week,
    (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-29' AND ex_dividend_date <= '2026-07-31') AS household_exdivs,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-29' AND execution_date <= '2026-07-31') AS splits_rest_of_week,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) AS jul31_expiry_pct_of_tue_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-28') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

La tabella delle festività indica 0 chiusure tra mercoledì 29 luglio, giovedì 30 luglio e venerdì 31 luglio. I record relativi ai dividendi con data ex-dividend in una di queste tre sedute sono 696; 0 riguardano dieci società dei consumi analizzate. Sono inoltre programmati 15 frazionamenti. Del volume di opzioni di martedì, 17.5% riguardava già contratti con scadenza venerdì 31 luglio. L’ultimo dato disponibile sullo short interest è 2026-07-15, una pubblicazione con un ritardo sufficiente a richiedere un approfondimento dedicato.

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-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-28') AS jul28_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-28' 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-28' 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-28 00:00:00' AND window_start < '2026-07-29 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 in orario regolare, 1 sessione nella finestra e 0 righe relative a festività per la data indicata. La prossima chiusura programmata è Labor Day il 2026-09-07.

Domande frequenti

Come si è comportato il mercato azionario martedì 28 luglio 2026?

SPY ha registrato una variazione 0.24% tra la chiusura precedente e quella odierna, a $740.76, mentre QQQ si è attestato a -0.96%, DIA a 1.07% e IWM a 0.15%. Tra i titoli più liquidi, 3519 è salito e 2423 è sceso.

Quale settore ha guidato il mercato il 28 luglio 2026?

Health Care, a 2.36%, sulla base degli undici fondi SPDR dei singoli settori. Il peggiore degli undici, Technology, ha registrato -1.9%.

Quanto è stato intenso il mercato delle opzioni il 28 luglio 2026?

Sono stati scambiati 59.28 milioni di contratti, rispetto ai 64.69 milioni della seduta precedente. I contratti con scadenza nella stessa giornata hanno rappresentato 29% del volume e le call 55%.

Quale titolo ha registrato il maggiore controvalore degli scambi il 28 luglio 2026?

MU, con un controvalore di 39.21 miliardi di dollari negli scambi durante l’orario regolare, davanti a QQQ, a 29.98 miliardi.

Note sui dati

Questa edizione colma il vuoto del 28 luglio nella serie giornaliera: la serie giornaliera del 27 luglio copre la seduta precedente, la serie giornaliera del 29 luglio quella successiva, mentre il riepilogo settimanale copre la settimana precedente a entrambe. I pannelli denominati per ticker sono ordinati alfabeticamente, così i riferimenti nel testo puntano a righe fisse; le classifiche e le tabelle dei titoli in movimento sono ordinate per valore e ogni indicazione di posizione che contengono è codificata come limite di controllo. Il paniere dei mega-cap e il paniere settoriale composto da eleven fondi sono insiemi dichiarati e fissi, non classificazioni del vendor. Le tabelle dei titoli in movimento applicano una soglia di turnover di cinque milioni di dollari durante gli orari regolari, escludono ogni titolo il cui split sia stato eseguito tra le due chiusure considerate ed escludono un simbolo riutilizzato in base al controllo interno sulle ambiguità; in questo modo ogni richiamo rimanda sempre a un titolo verificabile. I pannelli delle quotazioni conteggiano per ciascun titolo le quotazioni unidirezionali e crossed, invece di eliminarle senza indicarlo. Il file del Treasury e l’indice giornaliero EDGAR arrivano secondo calendari propri; per questo i relativi pannelli riportano i dati disponibili, senza presumere che siano già arrivati. Qui non compare alcun indice di volatilità implicita: queste serie non sono concesse in licenza a questo warehouse, quindi la volatilità viene rilevata dai dati di mercato attraverso i range, la quota di opzioni scambiate nella stessa 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 options tape, cache_stocks_quotes e cache_options_quotes per i pannelli NBBO.
  • Chiusura: l’ultima barra a un minuto della sessione regolare, mai un print delle 16:00 dato per scontato e mai un print delle contrattazioni fuori orario.
  • Gestione del fuso orario: tutti i timestamp memorizzati sono in UTC; le clausole WHERE usano valori letterali UTC grezzi e toTimeZone compare solo nelle liste SELECT per le etichette ET.
  • Verifica della sessione: effettuata sulla base della tabella delle festività e delle barre osservate, mai ricavata dal calendario.
  • Confronti con la sessione precedente: calcolati nella query a partire dal 27 luglio, mai riportati da un post precedente.
  • Decimali: le colonne relative a prezzo, size e volume vengono convertite in Float64 prima di qualsiasi divisione o prodotto.
  • Aggregazioni deterministiche: quantili esatti e criteri di spareggio basati su chiavi-tuple in tutto il processo; ogni affermazione sull’ordine o sul segno nel testo è codificata come limite di controllo.
  • Data as-of del warehouse: 1° agosto 2026, quattro giorni dopo la sessione e oltre il consueto ritardo di ingestione di uno-due giorni del tape; le ricevute vincolate riportate sopra mantengono il post se durante la generazione risulta mancante un dataset.

Collegamenti interni: il recap giornaliero del 27 luglio, il recap giornaliero del 29 luglio, quando scadono le opzioni, che cos’è uno spread bid-ask e lo spread tra due e dieci anni.

Ogni query riportata sopra viene eseguita senza modifiche sul terminale Strasmore, se vuoi reindirizzare una finestra a una sessione diversa.