Resumo de mercado 30 de junho de 2026
A última sessão do trimestre teve alta liderada pelo setor de tecnologia em um mercado em queda. O QQQ subiu e o índice de opções fechou o dia com spread.
Terça-feira, 30 de junho de 2026 — a última sessão do trimestre — foi um dia de alta liderada pelo setor de tecnologia em um mercado majoritariamente em queda: o QQQ subiu 1.63% e o SPY 0.73%, mas apenas 4 dos fundos do setor S&P 10 fecharam em alta (3,349 ativos líquidos em alta, 3,033 em baixa). A sessão anterior: o resumo de 29 de junho. Cada número abaixo é extraído de uma consulta armazenada — expanda qualquer painel para ver o SQL.
O placar
Cada variação compara o último candle de sessão regular de 30 de junho com o de segunda-feira, 29 de junho.
O SQL exato por trás de cada número
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-06-29 13:30:00' AND window_start < '2026-06-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-06-30 13:30:00' AND window_start < '2026-06-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_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 AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.tickerO SPY abriu a $741.29 e fechou a $746.32, próximo à sua máxima de $748.02. O 1.63% do QQQ contra o 0.12% do DIA define o dia: o crescimento avançou, as blue chips mal se moveram e o IWM 0.49%.
O fechamento do trimestre
O dia 30 de junho encerrou a última das 62 sessões do segundo trimestre, e o movimento do dia refletiu o comportamento do trimestre.
O SQL exato por trás de cada número
WITH q2 AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS d_open,
argMax(toFloat64(close), window_start) AS d_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
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 ticker, d
)
SELECT
ticker,
toString(min(d)) AS quarter_first_session,
count() AS quarter_sessions,
round(argMin(d_open, d), 2) AS quarter_open,
round(argMax(d_close, d), 2) AS quarter_close,
round((argMax(d_close, d) / argMin(d_open, d) - 1) * 100, 2) AS quarter_pct,
countIf(d_close > d_open) AS up_sessions
FROM q2
GROUP BY ticker
ORDER BY quarter_pct DESC, ticker ASCDe 1º de abril ao fechamento de 30 de junho: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08%. O QQQ teve o melhor desempenho no trimestre e no dia 30 de junho, embora a ordem tenha mudado no meio do caminho: o SPY superou o IWM no dia, mas o IWM liderou o SPY durante o trimestre. O QQQ fechou em alta em 38 das 62 sessões (o resumo do Q2 apresenta os dados detalhados).
O dia foi atípico?
O SQL exato por trás de cada número
SELECT round(anyIf(oc_pct, d = toDate('2026-06-30')), 2) AS day_move_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-06-30'))), groupArrayIf(abs(oc_pct), d != toDate('2026-06-30'))) + 1 AS abs_move_rank,
count() AS 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-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
)A variação do SPY entre a abertura e o fechamento — uma perspectiva diferente do placar de fechamento sobre fechamento — foi de 0.68%, ocupando a posição 7 de 21 sessões anteriores em termos de magnitude absoluta. O índice apresentou calma, mas o fluxo de ordens não.
Amplitude: uma vantagem positiva estreita
O SQL exato por trás de cada número
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00')
GROUP BY ticker
)
SELECT
countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
count() AS tickers_traded_both_sessions,
count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
/ countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct,
countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')) AS sector_funds_counted,
countIf(ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND day_close > prior_close) AS sector_funds_up
FROM per_ticker
WHERE prior_close > 0 AND day_close > 03,349 altas, 3,033 baixas, 88 estáveis: 51.8% do volume líquido subiu — um resultado incerto sob um índice de crescimento de 1.63%. O filtro de liquidez remove 5,055 de 11,525 tickers de duas sessões (com menos de um milhão de dólares negociados), contabilizados aqui, sem omissões.
Setor por setor: para onde o dinheiro realmente foi
Contar o número de ativos com uma única cotação esconde a real distribuição do capital. Os dez fundos abaixo representam fatias do S&P 500, e o spread entre o melhor e o pior desempenho mede o quão desigual foi a sessão.
O SQL exato por trás de cada número
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-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,
if(day_close > prior_close, 1, 0) AS is_up,
round(max((day_close / prior_close - 1) * 100) OVER () - (day_close / prior_close - 1) * 100, 2) AS pts_behind_leader,
day_dollar_bn
FROM per_name
ORDER BY pct_chg DESC, ticker ASCTecnologia (XLK) subiu 2.69% e operou de forma isolada: industriais 1.34%, materiais 0.36% e discricionários 0.15% foram os únicos outros no campo positivo, enquanto o restante do painel ficou no vermelho, desde o setor financeiro (-0.17%) até o de utilidades (-1.48%), bens de consumo (-1.53%) e o setor imobiliário por último, em -2%. Diferença entre o melhor e o pior: 4.69 pontos percentuais, com 4 de 10 fundos no positivo. Um índice com alta inferior a um por cento e um spread de quatro pontos: um único setor liderou o movimento.
Maiores altas e baixas do dia, mercado geral
A amplitude mede quantos ativos subiram; este gráfico mostra quais tiveram maior variação — os cinco maiores ganhos e perdas percentuais entre ativos com volume superior a $10 milhões.
O SQL exato por trás de cada número
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') AS day_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00')
GROUP BY ticker
HAVING prior_close > 1 AND day_close > 0 AND day_dollar_volume >= 10000000 AND ticker NOT IN ('SPCX')
)
SELECT
board,
ticker,
prior_close,
day_close,
pct_chg,
round(abs(pct_chg), 2) AS abs_pct_chg,
dollar_volume_m,
if(ticker IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date >= '2026-06-29' AND execution_date <= '2026-06-30'), 1, 0) AS split_record_on_file
FROM (
SELECT 'top gainers' AS board, ticker, round(prior_close, 2) AS prior_close, round(day_close, 2) AS day_close,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg, round(day_dollar_volume / 1e6, 0) AS dollar_volume_m
FROM per_ticker
ORDER BY (day_close / prior_close) DESC, ticker ASC
LIMIT 5
UNION ALL
SELECT 'top decliners' AS board, ticker, round(prior_close, 2) AS prior_close, round(day_close, 2) AS day_close,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg, round(day_dollar_volume / 1e6, 0) AS dollar_volume_m
FROM per_ticker
ORDER BY (day_close / prior_close) ASC, ticker ASC
LIMIT 5
)
ORDER BY if(board = 'top gainers', 0, 1) ASC, pct_chg DESC, ticker ASCNenhum dos pregões seguiu o movimento do índice. JEM liderou com +256.76% em $141 milhões negociados; SOC caiu 55.89% com $306 milhões. ABVX subiu 38.56% com $942 milhões, o maior turnover de ambos os pregões; NVCT caiu 35.62% e UNCY 39.09%. A coluna de split evita distorções — um reverse split de um-para-dez aparece como um "ganho" de 900% em um tape não ajustado — e cada ativo aqui possui um 0: negociações reais.
Três linhas representam o mesmo ativo em dois pregões: CRCA (-35.16%) e CRCG (-35.19%) caíram, enquanto CRCD subiu 35.47% — cada um próximo ao dobro do movimento de -17.53% do ativo ligado a cripto abaixo: wrappers de ações individuais alavancados.
O destaque do dia: semicondutores em virada trimestral
Seis nomes, um tema, resultados muito distintos — apenas co-movimento e magnitude; os dados não indicam o motivo.
O SQL exato por trás de cada número
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AMD', 'INTC', 'MU', 'SNDK', 'TSM', 'WDC')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-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,
round(day_high, 2) AS day_high,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
round(day_low, 2) AS day_low,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
day_dollar_bn
FROM per_name
ORDER BY tickerSanDisk subiu 10.79%, AMD 7.7%, Intel 5.93%, TSMC 4.86% — enquanto a MU, com o maior volume do pregão de $37.41 bilhões, fechou apenas 0.52% acima e a Western Digital (-2.01%) não participou. Este é o componente por trás do resultado do setor de tecnologia de 2.69% (MU em junho, tick a tick).
A tendência contrária atingiu o setor financeiro ligado a cripto, contra o mercado em alta:
O SQL exato por trás de cada número
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-06-30 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-30 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-06-30 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-06-30 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-06-30 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-06-30 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-30 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('COIN', 'CRCL', 'HOOD', 'MSTR')
AND ((window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
OR (window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-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,
round(day_high, 2) AS day_high,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
round(day_low, 2) AS day_low,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
day_dollar_bn
FROM per_name
ORDER BY tickerCRCL registrou -17.53%, com sua mínima de $62.52 atingida às 15:59 ET — no último minuto da sessão — acompanhada por MSTR -6.2%, COIN -3.61% e HOOD -1.53%. Co-movimento observado; causa não declarada.
O que o feed de notícias trouxe
Um resumo que evita afirmar causas deve ao leitor o que foi realmente publicado no dia.
O SQL exato por trás de cada número
SELECT
names.n AS ticker,
countIf(has(tickers, names.n)) AS articles_today,
if(countIf(has(tickers, names.n)) = 0, 'none',
formatDateTime(toTimeZone(argMaxIf(published_utc, (published_utc, id), has(tickers, names.n)), 'America/New_York'), '%H:%i')) AS latest_et,
if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
JSONExtractString(argMaxIf(publisher, (published_utc, id), has(tickers, names.n)), 'name')) AS publisher_name,
if(countIf(has(tickers, names.n)) = 0, 'no article in our feed this session',
argMaxIf(title, (published_utc, id), has(tickers, names.n))) AS latest_headline
FROM global_markets.stocks_news
CROSS JOIN (SELECT arrayJoin(['NVDA', 'MU', 'SNDK', 'CRCL', 'SOC', 'ABVX', 'JEM']) AS n) AS names
WHERE published_utc >= '2026-06-30 04:00:00' AND published_utc < '2026-07-01 04:00:00'
GROUP BY names.n
ORDER BY articles_today DESC, ticker ASCO nome mais coberto foi NVDA, com 21 artigos — sem estar entre os destaques de movimentação do dia — seu último texto da sessão (16:28 ET, Investing.com) intitulado "These Stocks Could Benefit as the Robotaxi Race Heats Up". MU teve 7; o único artigo da SanDisk (The Motley Fool) é a única manchete do dia que cita uma movimentação real: "Why Sandisk Stock Is Skyrocketing Today".
A lacuna é o achado: a maior queda do dia, a maior alta e o nome ligado ao setor de cripto que mais caiu registraram 0, 0 e 0 artigos — zero para cada um, em um feed de 211 peças. A cobertura não é um indicador do price action.
Onde o dinheiro foi negociado
O SQL exato por trás de cada número
SELECT ticker, leaderboard, dollar_volume_bn, if(dollar_volume_bn < 1, dollar_volume_m, NULL) AS dollar_value_m, shares_m,
round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
/ max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
SELECT
'by dollars traded' AS leaderboard,
ticker,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
round(sum(toFloat64(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-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(close) * toFloat64(volume)) / 1e6, 0) AS dollar_volume_m,
round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY shares_m DESC
LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESCEm volume financeiro, a MU superou todos os outros ativos, inclusive fundos de índice: $37.41 bilhões contra os $31.84 bilhões do SPY — foi a segunda sessão consecutiva em que superou o principal ETF de índice (resumo de segunda-feira contém o primeiro). O painel de ações mostra um cenário diferente: o SOXS, um ETF inverso de semicondutores com alavancagem de 3x (515.5 milhões de ações), e dois ativos abaixo de um dólar que representam um valor desprezível perto do volume da MU — o volume apresenta duas interpretações.
Um nome é excluído de ambos os painéis propositalmente: uma listagem de junho cujo ticker pertencia anteriormente a uma empresa diferente e não relacionada, fazendo com que os feeds de dados identifiquem duas entidades com as mesmas três letras (registros aqui).
O SQL exato por trás de cada número
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
GROUP BY et_time
ORDER BY et_time2.05 bilhões de ações na primeira meia hora, um ponto baixo de 0.78 bilhões às 13:30, e o maior volume do dia — 2.69 bilhões — até o fechamento do trimestre, onde o leilão de fechamento e seus fluxos de rebalanceamento aparecem (análise detalhada de 29 de junho detalha o processo).
O fluxo de opções
O SQL exato por trás de cada número
WITH
(
SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
sum(size), count(), round(avg(toFloat64(price)), 3))
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'
GROUP BY ticker
ORDER BY sum(size) DESC
LIMIT 1
) AS top_contract,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00'
) AS spy_close
SELECT
round(count() / 1e6, 2) AS option_prints_m,
round(toFloat64(sum(size)) / 1e6, 2) AS 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) = '260630') / sum(size), 1) AS same_day_expiry_pct,
round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260702')) / 1e6, 2) AS thu_jul2_expiry_contracts_m,
countIf(substring(ticker, length(ticker) - 14, 6) = '260703') AS fri_jul3_expiry_prints,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'))
/ toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C')), 2) AS spy_put_call_ratio,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) > spy_close)) / 1e6, 2) AS spy_0dte_otm_calls_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'C'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) <= spy_close)) / 1e6, 2) AS spy_0dte_itm_calls_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) < spy_close)) / 1e6, 2) AS spy_0dte_otm_puts_m,
round(toFloat64(sumIf(size, underlying_symbol = 'SPY' AND option_type = 'P'
AND substring(ticker, length(ticker) - 14, 6) = '260630' AND toFloat64(strike_price) >= spy_close)) / 1e6, 2) AS spy_0dte_itm_puts_m,
top_contract.1 AS top_contract_underlying,
top_contract.2 AS top_contract_strike,
top_contract.3 AS top_contract_type,
top_contract.4 AS top_contract_expiry,
top_contract.5 AS top_contract_volume,
round(top_contract.7, 3) AS top_contract_avg_price,
round(top_contract.2 - spy_close, 2) AS top_strike_minus_spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'Foram negociados 61.95 milhões de contratos de opções em 10.06 milhões de registros; as calls representaram 57.3% do volume total, e 28% desse volume expirou naquela terça-feira. O SPY seguiu a direção oposta: 12.04 milhões de contratos com um put/call ratio de 1.09 — mais puts do que calls, em um dia de alta do fundo.
Ao comparar os vencimentos no mesmo dia do SPY com seu fechamento de $746.32, o skew fica evidente: 3.33 milhões de puts out-of-the-money (strikes abaixo do fechamento) e 2.28 milhões de calls out-of-the-money, contra 1.77 milhões de calls in-the-money e 0.63 milhões de puts in-the-money — os strikes de baixa que expiraram sem valor foram o grupo mais movimentado no dia de 0DTE do SPY. Nada com código de vencimento para sexta-feira, 3 de julho, foi registrado (0 registros — o mercado estará fechado nessa sexta-feira); a semanal de quinta-feira registrou 10.52 milhões.
O SQL exato por trás de cada número
SELECT
concat(underlying, ' $', toString(strike), ' ', if(typ = 'C', 'call', 'put')) AS contract,
toString(expiry) AS expires,
formatDateTimeInJodaSyntax(expiry, 'MMMM d, yyyy') AS expires_label,
if(expiry = toDate('2026-06-30'), 1, 0) AS is_same_day,
contracts,
round(avg_px, 3) AS avg_premium,
round(100 * contracts / max(contracts) OVER (), 1) AS pct_of_busiest
FROM (
SELECT any(underlying_symbol) AS underlying,
any(toFloat64(strike_price)) AS strike,
any(option_type) AS typ,
any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))) AS expiry,
sum(size) AS contracts,
avg(toFloat64(price)) AS avg_px,
any(ticker) AS occ
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-06-30 00:00:00' AND sip_timestamp < '2026-07-01 00:00:00'
GROUP BY ticker
ORDER BY contracts DESC, occ ASC
LIMIT 6
)
ORDER BY contracts DESC, contract ASCO contrato mais negociado foi a call do SPY de $747 com vencimento no mesmo dia — 821,361 contratos com prêmio médio de $0.641, fechando $0.68 acima da última barra regular do SPY, e sem valor. O quadro por trás disso serve de lição: cinco dos seis contratos mais negociados no tape foram strikes do SPY com vencimento no mesmo dia, separados por um dólar em torno do fechamento (SPY $748 call o próximo), cada um negociado por centavos. A exceção, com 65.1% do volume do líder, foi a KWEB $29 call vencendo em December 18, 2026, não um contrato de mesmo dia: uma posição de seis meses entre cinco bilhetes de loteria de tarde.
Juros: o longo prazo subiu no fechamento do primeiro semestre
O SQL exato por trás de cada número
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jun30_yield_pct,
round((t.2 - t.3) * 100) AS one_day_change_bp
FROM (
SELECT arrayJoin([
('1 month', toFloat64(d.yield_1_month), toFloat64(p.yield_1_month)),
('3 month', toFloat64(d.yield_3_month), toFloat64(p.yield_3_month)),
('1 year', toFloat64(d.yield_1_year), toFloat64(p.yield_1_year)),
('2 year', toFloat64(d.yield_2_year), toFloat64(p.yield_2_year)),
('5 year', toFloat64(d.yield_5_year), toFloat64(p.yield_5_year)),
('10 year', toFloat64(d.yield_10_year), toFloat64(p.yield_10_year)),
('30 year', toFloat64(d.yield_30_year), toFloat64(p.yield_30_year)),
('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
]) AS t
FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-30') AS d,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-06-29') AS p
)O longo prazo subiu no último dia do semestre: o título de 10 anos subiu 6 bp para 4.44%, o de 2 anos subiu 4 bp para 4.14%, e o spread 2s10s inclinou 2 bp para 0.3 pontos. Os yields de longo prazo subiram em uma sessão cujo setor mais fraco, o imobiliário (-2%), e o terceiro mais fraco, o de utilidades (-1.48%), são ambos classicamente sensíveis aos juros: uma coincidência digna de nota, mas não um mecanismo que estes dados possam provar (o resumo do H1 reflete a curva do semestre).
O calendário por trás do dia
O SQL exato por trás de cada número
WITH
(
SELECT (count(), uniqExact(publisher))
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-30'
) AS news,
(
SELECT (argMax(t, n), max(n))
FROM (
SELECT t, count() AS n
FROM (
SELECT arrayJoin(tickers) AS t
FROM global_markets.stocks_news
WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-06-30'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-06-30') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-06-30') AS splits_executed,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30') AS ipos_listed,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS sec_filings,
(SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS insider_form4_filings,
(SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-06-30') AS filings_8k,
(SELECT arrayStringConcat(groupArray(concat(ticker, ' — ', issuer_name)), '; ') FROM (
SELECT ticker, issuer_name FROM global_markets.stocks_ipos WHERE listing_date = '2026-06-30' ORDER BY ticker
)) AS ipo_names,
news.1 AS news_articles,
news.2 AS news_publishers,
top_news.1 AS most_covered_ticker,
top_news.2 AS most_covered_articles,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_prior_session704 registros de dividendos ficaram ex-dividend no último dia do trimestre — uma onda de fechamento de trimestre, com a maioria das empresas dos EUA pagando trimestralmente — com 7 splits e 2 novas listagens (AACU — Ares Acquisition Corp III; OSPRU — Osprey Acquisition Corp. III). A coluna de registros é o dado principal de qualidade: o índice da SEC contém 31 registros para 30 de junho — 0 Insider Form 4s, 0 8-Ks — contra 4439 da sessão anterior. Um padrão de fim de mês no feed, diagnosticado em nota sobre o gap de fim de mês; qualquer contagem que inclua este dia está subestimada até que ocorra o preenchimento retroativo.
A sessão, verificada
O SQL exato por trás de cada número
SELECT
formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
count() AS spy_minute_bars,
countIf(window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-06-30 13:30:00' AND window_start < '2026-06-30 20:00:00') AS day_sessions
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-30 00:00:00' AND window_start < '2026-07-01 00:00:00'As barras do SPY ocorrem de 04:00 a 19:59 no horário de Nova York, com exatamente 390 barras de janela regular — uma sessão completa, verificada pelo tape (o conjunto de dados do calendário da bolsa contém apenas os fechamentos futuros).
O que a sessão representa
Um fechamento do SPY com 0.73% de ativos em alta, 51.8% de fundos do setor 4 de 10 no verde e 4.69 pontos de diferença entre os melhores e piores não é um rali amplo — é o rali de um único setor disfarçado de índice, ocorrendo em seu período mais intenso em um leilão de fechamento de trimestre. Uma variação de índice é uma média, e este movimento foi puxado pela tecnologia enquanto a maioria dos setores caiu: analise a dispersão antes de confiar na direção.
FAQ
Como foi o desempenho do mercado de ações em 30 de junho de 2026?
O mercado fechou em alta: o SPY subiu 0.73% e o QQQ 1.63% em relação ao fechamento de 29 de junho. A amplitude foi menor — 51.8% das ações líquidas subiram, enquanto 4 dos 10 fundos setoriais do S&P ficaram no verde.
Qual setor liderou o mercado em 30 de junho de 2026?
Tecnologia: o XLK subiu 2.69%, contra 1.34% para industriais e -2% para o setor imobiliário — uma diferença de 4.69 pontos entre o melhor e o pior desempenho.
Quais foram as maiores variações de ações em 30 de junho de 2026?
Entre os ativos com volume de negociação de US$ 10 milhões ou mais, a JEM teve o maior ganho (+256.76%) e a SOC a maior queda (55.89%). Nenhuma delas registrou desdobramento de ações: ambos são movimentos reais de preço, não efeitos de eventos corporativos.
Como foi o desempenho do mercado de ações no Q2 2026?
Do início de 1º de abril ao fechamento de 30 de junho, ao longo de 62 sessões: QQQ +26.53%, IWM 20.21%, SPY 14.13%, DIA 12.08% — um trimestre liderado por ações de crescimento, encerrado por um dia de alta para o setor de growth.
Por que há tanto volume de negociação na última meia hora?
A última meia hora registrou 2.69 bilhões de ações, contra 2.05 bilhões na abertura. O leilão de fechamento define o preço oficial de fechamento de cada ação em um único cruzamento, e os fundos de índice negociam nesse período para acompanhá-lo; o rebalanceamento de fim de trimestre concentra o fluxo.
Notas de dados e metodologia
- As cestas. O painel do setor compreende os dez fundos setoriais da SPDR listados em seu painel — a mesma cesta em todas as sessões, permitindo a comparação da dispersão entre dias. Os painéis de movimentação exigem um turnover de $10 milhões e fechamento anterior acima de $1, excluem a listagem de símbolos reutilizados acima e incluem uma coluna de registro de split.
- As ressalvas. O volume financeiro é uma estimativa por minuto (fechamento × volume por barra). O índice de registros de 30 de junho está quase vazio (a nota sobre o gap de fim de mês explica o motivo). A contagem de notícias utiliza apenas um feed de fornecedor: a ausência de um artigo aqui não prova que nada foi publicado em outro lugar.
- A metodologia. Uma sessão (1, verificada a partir das barras observadas); timestamps armazenados em UTC, convertidos para o horário de Nova York nas consultas; "close" refere-se à última barra regular de um minuto, não ao print do leilão. Os vencimentos de opções são reprocessados a partir do ticker da OCC (a coluna da própria tabela apresenta erro); o moneyness é medido em relação à última barra regular do SPY. Os painéis são executados uma única vez, no momento da autoria, através do caminho de leitura restrito. Armazenamento atualizado em 13 de julho de 2026.
Cada painel é o resultado de uma consulta armazenada — gráfico, tabela e SQL em um único objeto. Cole qualquer um deles no terminal Strasmore. Próxima sessão: 1 de julho.