O segundo trimestre de 2026 foi o período de recuperação: após um primeiro trimestre negativo, todos os principais ETFs de índices subiram dois dígitos, liderados pelo QQQ a 26.5%. Os painéis abaixo apresentam o cenário do trimestre — a escada mensal, o contexto das taxas de juros, o calendário — e suas duas ressalvas de dados, divulgadas no texto. Cada número é o resultado de uma consulta armazenada; expanda qualquer painel para ver o SQL exato.
O desempenho do trimestre
Qual foi a magnitude da oscilação em relação ao Q1? Este painel calcula os retornos de ambos os trimestres em uma única consulta — a referência do Q1 é recalculada em tempo real sob as mesmas definições, não sendo lida de outra fonte.
O SQL exato por trás de cada número
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 tickerO QQQ subiu 26.5% no trimestre após um -6.9% no Q1; o SPY subiu 14.1% após -5.2%; o IWM subiu 20.2%. Todos os índices que caíram no primeiro trimestre recuperaram-se amplamente no segundo. Os quatro apresentam três histórias diferentes: o índice de crescimento teve o maior drawdown no Q1 e registrou a maior recuperação; o DIA — o índice industrial ponderado por preço — oscilou de -3.9% para 12.1%; e o IWM nunca caiu de fato (0.1% no Q1), portanto seu trimestre de 20.2% potencializou um início estável em vez de reparar um drawdown. Recuperação e momentum parecem idênticos em uma coluna de retorno trimestral; a coluna do Q1 é o que os diferencia.
O trimestre comparado a todos os outros segundos trimestres do histórico
Trimestres de recuperação parecem históricos enquanto ocorrem; o histórico de dados pode confirmar se este será o caso. Os painéis recalculam o MESMO retorno de abril a junho para cada ano de histórico detalhado em uma única consulta, utilizando a mesma aritmética para cada ano, e então classificam este trimestre em relação aos demais.
O SQL exato por trás de cada número
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 ASCO SQL exato por trás de cada número
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 ASCA medição é próxima do histórico: o 26.5% do QQQ ocupa a posição 2 de 17 segundos trimestres comparáveis (rank 1 = melhor) — exatamente um segundo trimestre anterior terminou com resultado superior, conforme detalhado na tabela acima. O 14.1% do SPY ocupa a posição 3 de 23 desde 2004. Duas observações: a série do QQQ é mais curta (o fundo operou sob um ticker diferente por um período — uma trava por contagem de sessões exclui esses anos visivelmente, com contagens anuais na tabela), e cada consulta de histórico define seu limite superior no fechamento deste trimestre, portanto o conjunto de comparação não cresce silenciosamente quando anos futuros forem adicionados. Base para cada rank nesta página: abertura ao fechamento em horário regular dentro do trimestre civil.
A escada mensal
O SQL exato por trás de cada número
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, tickerO trimestre teve um início forte: abril concentrou os principais ganhos (SPY 9.9%, QQQ 14.8%), maio somou mais alta (4.9% e 10.3%), e junho apresentou uma leve retração — SPY -1.2%. O resumo de junho detalha o mês, incluindo a análise de amplitude abaixo.
Líderes do volume, escala trimestral
O SQL exato por trás de cada número
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 8Durante todo o trimestre, MU ($2047.5 bilhões) superou o SPY ($2032 bilhões) no topo do volume — uma única ação com maior negociação que o principal ETF de índice ao longo de três meses, com 99.2% do total do líder. Atrás deles: QQQ ($1658.5 bilhões), seguida por NVDA com $1591.8 bilhões — cujo mês de junho é analisado tick por tick aqui — e TSLA com $1198.8 bilhões. Note o critério da lista: volume de negociação em horário regular, não performance — um ativo pode dominar o volume mesmo em um mês de queda. O mês de junho do líder é analisado tick por tick em sua análise detalhada. Base: 1 de abril a 30 de junho em horário regular; uma listagem de junho com símbolo reutilizado foi excluída aguardando verificação da entidade (seus comprovantes).
Amplitude: o grão do dia
O SQL exato por trás de cada número
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 das sessões do 62 fecharam com alta no SPY contra 26 de baixa — uma dominância de dias de alta que condiz com um trimestre de dois dígitos. A contagem de grãos por ticker (cada alta e baixa) é limitada na escala trimestral: o escaneamento de todo o mercado excede o orçamento de consulta que esta página gera (medido na autoria), portanto a amplitude de contagem igual reside na escala mensal — a divisão de altas/baixas de junho, onde mais ativos caíram do que subiram, está no resumo de junho — e o limite é divulgado aqui em vez de ser reduzido silenciosamente.
O fluxo de opções, mês a mês
A história da microestrutura do trimestre, contada na única escala possível — mês a mês, através de todo o registro de opções listadas. O volume aumentou até o fim do trimestre: de 1386.9 milhões de contratos em abril para 1477.9 milhões em junho, o mês mais movimentado do período. A participação de opções com vencimento no mesmo dia (0DTE) também cresceu, de 30.3% para 34.3% — a fatia de junho é a maior do primeiro semestre, e a evolução desde janeiro está no resumo do H1.
O SQL exato por trás de cada número
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')O SQL exato por trás de cada número
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')O SQL exato por trás de cada número
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')O custo para negociar, amostra mensal
O SQL exato por trás de cada número
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 ASCO spread mediano cotado do SPY nas sessões mensais da amostra do trimestre: 0.286 bps na amostra de abril, 0.27 na de maio, 0.409 na de junho — a amostra de junho apresenta o maior spread. Basis, divulgado: sessões de amostra única rotuladas (a segunda quarta-feira de cada mês), não medianas de todo o mês; cotações inválidas são contadas no painel, não descartadas.
Taxas: o trimestre em que a curva achatou
O SQL exato por trás de cada número
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 dateO spread 2s10s iniciou o trimestre em 52 pontos de base e encerrou em 30 — um trimestre de achatamento, com o título de 10 anos terminando em 4.44%. O cenário equivalente para o prazo de seis meses está no resumo do H1. Mecanicamente, um achatamento significa que a ponta curta reduziu a distância em relação à ponta longa; se essa tendência continuará não pode ser respondida por esta tabela, e esta página não tenta responder.
O calendário, escala trimestral
O SQL exato por trás de cada número
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 empresas listadas no trimestre, 435 desdobramentos executados e 15402 eventos de dividendos pagos. A contagem de registros (235075) reflete a lacuna divulgada: o índice contém apenas 31 registros em 30 de junho — o último dia do trimestre — e 34 em 30 de abril, contra milhares em dias adjacentes; portanto, o total do trimestre perde DOIS dias de fechamento de mês e fica subestimado até que o feed realize o backfill. A lacuna de fechamento de mês possui sua própria nota diagnóstica.
O calendário de rampa para o fim do trimestre
O SQL exato por trás de cada número
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 oO calendário corporativo acelerou conforme o trimestre avançava: eventos ex-dividend cresceram mês a mês, de 3947 em abril a 6651 em junho, e os desdobramentos de ações também aumentaram (129 a 164). O volume de listagens permaneceu estável nos três meses — a metáfora de onda aplica-se aos dividendos, não aos IPOs, neste trimestre.
O resumo da sessão
O SQL exato por trás de cada número
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 sessões, verificadas a partir de barras observadas em vez de assumidas pelo calendário: 21 em abril, 20 em maio (Memorial Day), 21 em junho (Juneteenth). Os resumos mensais e as evidências de fechamento estão no resumo de junho e explicação sobre feriados.
Notas de dados
Notas completas de dados
- O short interest termina no fechamento de 15 de junho conforme a geração — o registro de fim de junho ainda está pendente; o resumo de junho contém a divulgação completa. Este post é atualizado quando o dado chega.
- O gap entre o índice e o registro de fim de mês é detalhado no texto: 30 de junho E 30 de abril estão dentro deste trimestre, e 31 de março apresenta a mesma assinatura — todos os fins de mês de 2026 cujo último dia do calendário foi um dia útil estão quase vazios. A nota de diagnóstico contém as evidências e o diagnóstico delimitado.
- Microestrutura (infraestrutura de tick) foi deliberadamente omitida aqui — o mergulho profundo de 29 de junho contém a anatomia completa da fita de uma sessão.
- Exclusão de líder de volume: uma listagem de junho com símbolo reutilizado foi excluída aguardando verificação da entidade.
Metodologia
- O período compreende de 1º de abril a 30 de junho de 2026 — 62 sessões, verificadas conforme as barras observadas. Os retornos trimestrais são calculados do abertura ao fechamento do horário regular dentro do período; o contraste do Q1 é recalculado em tempo real sob as mesmas definições.
- Os timestamps são armazenados em UTC e filtrados com limites UTC brutos; o horário regular é das 13:30 às 20:00 UTC durante o trimestre (EDT). O volume em dólar é o produto do fechamento minuto a minuto pelo volume minuto durante o horário regular. Os blocos de histórico plurianual filtram o horário regular pelo relógio da costa leste (convertido por linha — a convenção segura para o DST ao longo das décadas) e fixam seu limite superior no encerramento deste trimestre; a verificação de profundidade (histórico minuto a minuto até setembro de 2003) está na metodologia do recap H1.
- A geração ocorre via caminho de leitura restrito; a página pública nunca consulta dados em tempo real. Estado do warehouse em 5 de julho de 2026.
Esta é a primeira edição do recap trimestral fixo; a edição do Q3 terá um link de retorno para cá. Detalhe mensal: Junho. O primeiro semestre deste trimestre concluído: H1 2026.