Il secondo trimestre del 2026 è stato il trimestre della ripresa: dopo un primo trimestre negativo, ogni principale ETF di indice è cresciuto di due cifre, guidato da QQQ al 26.5%. I pannelli sottostanti mostrano l'andamento del trimestre — la scala mensile, il contesto dei tassi, il calendario — e le due avvertenze sui dati, riportate nel testo. Ogni numero è il risultato di una query memorizzata; espandere qualsiasi pannello per visualizzare la SQL esatta.
Il trimestre in borsa
Qual è stato l'ammontare del cambiamento rispetto al Q1? Questo pannello calcola i rendimenti di entrambi i trimestri in un'unica query; il riferimento per il Q1 viene ricalcolato in tempo reale con le stesse definizioni, senza essere letto da fonti esterne.
L'esatto SQL dietro ogni numero
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS q2_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerQQQ è salito del 26.5% nel trimestre dopo un -6.9% nel Q1; SPY del 14.1% dopo un -5.2%; IWM del 20.2%. Ogni indice che è sceso nel primo trimestre ha recuperato ampiamente nel secondo. I quattro indici raccontano tre storie diverse: l'indice growth ha subito il drawdown più profondo nel Q1 e ha registrato il maggior recupero; DIA — l'indice industriale ponderato per la capitalizzazione — è passato da -3.9% a 12.1%; e IWM non è mai sceso realmente (0.1% nel Q1), quindi il suo trimestre 20.2% ha incrementato un inizio piatto invece di riparare un drawdown. Il recupero e il momentum appaiono identici in una colonna di rendimento trimestrale; la colonna del Q1 è ciò che permette di distinguerli.
Il trimestre confrontato con ogni secondo trimestre registrato
I trimestri di ripresa sembrano storici mentre li si vive; i dati di mercato possono confermare se questo sia effettivamente tale. I pannelli ricalcolano lo STESSO rendimento da aprile a giugno per ogni anno della cronologia disponibile in un'unica query, con calcoli identici per ogni anno, per poi classificare questo trimestre rispetto agli altri.
L'esatto SQL dietro ogni numero
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS q2_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 4 AND 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 50
ORDER BY y ASC, ticker ASCL'esatto SQL dietro ogni numero
SELECT ticker,
round(anyIf(ret, y = 2026), 1) AS q2_2026_pct,
arrayCount(x -> x > anyIf(ret, y = 2026), groupArrayIf(ret, y != 2026)) + 1 AS rank_best,
count() AS q2s_compared,
min(y) AS first_year,
anyIf(sessions, y = 2026) AS sessions_2026
FROM (
SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,
ticker,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
(argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2003-01-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND toMonth(toTimeZone(window_start, 'America/New_York')) BETWEEN 4 AND 6
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY y, ticker
HAVING sessions >= 50
)
GROUP BY ticker
ORDER BY ticker ASCIl dato è vicino a livelli storici: il 26.5% di QQQ si posiziona al 2 di 17 secondi trimestri comparabili (il rango 1 è il migliore) — esattamente un precedente secondo trimestre ha chiuso con un rendimento superiore, come indicato nella tabella annuale sopra. Il 14.1% di SPY si posiziona al 3 di 23 dal 2004. Sono presenti due avvertenze: la serie di QQQ è più breve (il fondo ha scambiato sotto un ticker diverso per alcuni anni — un limite basato sul numero di sessioni esclude visibilmente quegli anni, con i conteggi annuali riportati nella tabella), e ogni query storica fissa il limite superiore alla fine di questo trimestre, quindi l'insieme del confronto non può espandersi silenziosamente con l'arrivo degli anni successivi. Base per ogni ranking su questa pagina: apertura e chiusura durante l'orario regolare all'interno del trimestre solare.
La scala mensile
L'esatto SQL dietro ogni numero
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS period_start, ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / argMinIf(toFloat64(open), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS month_return_pct,
round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS month_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ')
AND window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY period_start, ticker
ORDER BY period_start, tickerIl trimestre ha visto una forte crescita iniziale: aprile ha registrato i principali incrementi (SPY 9.9%, QQQ 14.8%), maggio ha continuato il trend (4.9% e 10.3%), mentre giugno ha registrato una lieve flessione — SPY -1.2%. Il riepilogo di giugno analizza il mese nel dettaglio, includendo la suddivisione della breadth sottostante.
I leader del mercato, scala trimestrale
L'esatto SQL dietro ogni numero
SELECT ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8Per l'intero trimestre, MU ($2047.5 miliardi) ha superato SPY ($2032 miliardi) in cima alla lista — un singolo titolo con volumi superiori rispetto al flagship index fund nell'arco di tre mesi, con uno scarto pari a 99.2% del totale del leader. Dietro di essi: QQQ ($1658.5 miliardi), poi NVDA con $1591.8 miliardi — il cui mese di giugno è analizzato tick by tick qui — e TSLA con $1198.8 miliardi. Si noti la natura dell'elenco: si tratta del turnover durante le sessioni regolari, non della performance — un titolo può dominare il mercato anche durante un mese di ribasso. Il mese di giugno del leader è analizzato tick by tick nel suo deep-dive. Base: 1 aprile–30 giugno sessioni regolari; esclusa una quotazione di giugno con simbolo riutilizzato in attesa di verifica dell'entità (i suoi ricevute).
Breadth: l'andamento giornaliero
L'esatto SQL dietro ogni numero
SELECT countIf(day_ret > 0) AS up_sessions,
countIf(day_ret < 0) AS down_sessions,
countIf(day_ret = 0) AS flat_sessions,
count() AS sessions_total
FROM (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 2) AS day_ret
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)36 delle sessioni del 62 si è chiusa con un rialzo di SPY rispetto a 26 sessioni in calo — una dominanza di rialzi che coincide con un trimestre a doppia cifra. Il conteggio dei ticker (ogni advancer e decliner) è limitato alla scala trimestrale: lo scan dell'intero mercato supera il budget di query generato da questa pagina (misurato in fase di redazione), pertanto la breadth a conteggio uguale è limitata alla scala mensile — la divisione advancer/decliner di giugno, dove sono scesi più titoli di quelli saliti, è disponibile nel riepilogo di giugno — e il limite è indicato qui invece di essere ridotto silenziosamente.
Il mercato delle opzioni, mese per mese
La dinamica della microstruttura del trimestre, analizzata con l'unico parametro possibile: il confronto mese su mese su tutto il mercato delle opzioni quotate. I volumi sono aumentati verso la fine del trimestre: da 1386.9 milioni di contratti ad aprile a 1477.9 milioni a giugno, il mese più attivo del trimestre. È aumentata anche la quota di opzioni a scadenza giornaliera (0DTE), passata da 30.3% a 34.3% — la quota di giugno è la più alta del semestre, e l'evoluzione da gennaio in poi è disponibile nel riepilogo del primo semestre.
L'esatto SQL dietro ogni numero
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-04-01 00:00:00')
AND window_start < toDateTime('2026-05-01 00:00:00')L'esatto SQL dietro ogni numero
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-05-01 00:00:00')
AND window_start < toDateTime('2026-06-01 00:00:00')L'esatto SQL dietro ogni numero
SELECT round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100.0 * sumIf(toFloat64(volume), toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) = toDate(toTimeZone(window_start, 'America/New_York'))) / sum(toFloat64(volume)), 1) AS zero_dte_pct,
uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-01 00:00:00')
AND window_start < toDateTime('2026-07-01 00:00:00')Il costo di negoziazione, rilevato mensilmente
L'esatto SQL dietro ogni numero
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS session,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 3) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND ((sip_timestamp >= toDateTime64('2026-04-15 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-04-15 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-05-13 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-05-13 20:00:00', 9))
OR (sip_timestamp >= toDateTime64('2026-06-10 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-10 20:00:00', 9)))
GROUP BY session
ORDER BY session ASCLo spread mediano quotato di SPY sulle sessioni mensili del trimestre: 0.286 bps nel campione di aprile, 0.27 in quello di maggio, 0.409 in quello di giugno — il campione di giugno presenta lo spread più ampio. Basis, dichiarato: sessioni campionarie singole (il secondo mercoledì di ogni mese), non mediane dell'intero mese; le quotazioni non valide sono incluse nel panel e non vengono scartate.
Tassi: il trimestre in cui la curva si è appiattita
L'esatto SQL dietro ogni numero
SELECT toString(date) AS d,
round(yield_10_year, 2) AS y10,
round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-04-01') AND date <= toDate('2026-06-30')
AND isNotNull(yield_10_year) AND isNotNull(yield_2_year)
ORDER BY dateLo spread 2s10s ha aperto il trimestre a 52 punti base ed è terminato a 30 — un trimestre di appiattimento, con il decennale che ha chiuso al 4.44%. La versione semestrale di questo scenario è nel riepilogo H1. Meccanicamente, un appiattimento significa che la parte breve della curva ha ridotto il divario rispetto alla parte lunga; non è possibile determinare se questo trend continuerà da questa tabella, e questa pagina non intende farlo.
Il calendario, scala trimestrale
L'esatto SQL dietro ogni numero
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-04-01') AND ex_dividend_date <= toDate('2026-06-30')) AS ex_div_events,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-04-01') AND execution_date <= toDate('2026-06-30')) AS splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-04-01') AND listing_date <= toDate('2026-06-30')) AS ipos,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= toDate('2026-04-01') AND filing_date <= toDate('2026-06-30')) AS q2_filings,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-04-30')) AS filings_apr30,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30105 società quotate nel trimestre, 435 split eseguiti e 15402 eventi ex-dividend pagati. Il numero di filing (235075) riflette il gap rilevato: l'indice contiene solo 31 filing al 30 giugno — l'ultimo giorno del trimestre — e 34 al 30 aprile, a fronte di migliaia nei giorni limitrofi; pertanto, il totale trimestrale esclude DUE giorni di fine mese ed è sottostimato finché il feed non effettua il backfill. Il gap di fine mese ha la sua nota diagnostica dedicata.
L'avvicinamento alla fine del trimestre
L'esatto SQL dietro ogni numero
SELECT m, ipos, splits, ex_divs FROM (
SELECT '2026-04' AS m,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-04-01') AND listing_date <= toDate('2026-04-30')) AS ipos,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-04-01') AND execution_date <= toDate('2026-04-30')) AS splits,
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-04-01') AND ex_dividend_date <= toDate('2026-04-30')) AS ex_divs, 1 AS o
UNION ALL SELECT '2026-05',
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-05-01') AND listing_date <= toDate('2026-05-31')),
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-05-01') AND execution_date <= toDate('2026-05-31')),
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-05-01') AND ex_dividend_date <= toDate('2026-05-31')), 2
UNION ALL SELECT '2026-06',
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-06-01') AND listing_date <= toDate('2026-06-30')),
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-06-01') AND execution_date <= toDate('2026-06-30')),
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-06-01') AND ex_dividend_date <= toDate('2026-06-30')), 3
) ORDER BY oIl calendario aziendale si è intensificato con il passare del trimestre: gli eventi ex-dividend sono aumentati ogni mese, passando da 3947 in aprile a 6651 in giugno, con un contestuale aumento dei frazionamenti azionari (129 a 164). Le quotazioni sono rimaste stabili durante i tre mesi — la metafora dell'ondata si applica ai dividendi, non alle IPO, in questo trimestre.
Il riepilogo della sessione
L'esatto SQL dietro ogni numero
SELECT
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS q2_sessions,
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-04-01 00:00:00') AND window_start < toDateTime('2026-05-01 00:00:00')) AS april_sessions,
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-05-01 00:00:00') AND window_start < toDateTime('2026-06-01 00:00:00')) AS may_sessions,
(SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')) AS june_sessions62 sessioni, verificate tramite le barre osservate anziché assunte dal calendario: 21 ad aprile, 20 a maggio (Memorial Day), 21 a giugno (Juneteenth). I riepiloghi mensili e le prove di chiusura sono disponibili nel riepilogo di giugno e nella spiegazione delle festività.
Note sui dati
Note complete sui dati
- Lo short interest si ferma alla settlement del 15 giugno rispetto alla generazione attuale — il dato di fine giugno è in attesa; il riepilogo di giugno contiene l'informativa completa. Questo post viene rigenerato al momento della pubblicazione.
- Il gap tra l'indice e le scadenze di fine mese è indicato nel testo: il 30 giugno e il 30 aprile rientrano in questo trimestre, e il 31 marzo presenta la stessa firma — ogni fine mese del 2026 il cui ultimo giorno di calendario è un giorno lavorativo risulta quasi vuoto. La nota diagnostica contiene le prove e la diagnosi delimitata.
- Microstructure (gestione dei tick) è deliberatamente assente qui — il deep-dive del 29 giugno contiene l'anatomia completa del tape di una sessione.
- Esclusione dei leader di volume: una quotazione di giugno con simbolo riutilizzato è stata esclusa in attesa della verifica dell'entità.
Metodologia
- Il periodo va dall'1 aprile al 30 giugno 2026 — 62 sessioni, verificate tramite le candele osservate. I rendimenti trimestrali sono calcolati dall'apertura alla chiusura delle ore ordinarie all'interno del periodo; il confronto con il Q1 è ricalcolato in tempo reale con definizioni identiche.
- Gli timestamp sono memorizzati in UTC e filtrati con limiti UTC grezzi; le ore ordinarie sono dalle 13:30 alle 20:00 UTC durante il trimestre (EDT). Il volume in dollari è calcolato come il prodotto tra la chiusura della candela al minuto e il volume al minuto durante le ore ordinarie. I blocchi storici pluriennali filtrano le ore ordinarie secondo l'orario Eastern (convertito per riga — la convenzione sicura per il DST attraverso i decenni) e fissano il limite superiore alla fine di questo trimestre; la verifica della profondità (storia al minuto fino a settembre 2003) è contenuta nella metodologia del riepilogo H1.
- La generazione avviene tramite il percorso di sola lettura protetto; la pagina pubblica non interroga mai i dati live. Stato del warehouse al 5 luglio 2026.
Questa è la prima edizione del riepilogo trimestrale standard; l'edizione del Q3 conterrà un link a questa pagina. Dettaglio mensile: Giugno. La prima metà di questo trimestre è completata: H1 2026.