Strasmore Research
Market Recap

Resumo do mercado semana de 29 de junho de 2026

Matt ConnorBy Matt Connor Updated 2026-07-23

A última semana de junho teve quatro sessões: o mercado operou de segunda-feira, 29 de junho, até quinta-feira, 2 de julho, e fechou na sexta-feira, 3 de julho, devido ao feriado de Independence Day — como 4 de julho caiu em um sábado, o feriado foi observado na sexta-feira anterior. Os dados desse fechamento, e de todos os outros itens aqui, estão nos painéis. O fato mais relevante da semana está na tabela de volume: um fabricante de chips de memória movimentou $190.2 bilhões em quatro dias — um valor cinquenta por cento maior que o do próprio SPY. Cada número nesta página é o resultado de uma consulta armazenada; expanda qualquer painel para ver o SQL exato.

O desempenho da semana

O mercado recuperou a queda da semana anterior ou a estendeu? O painel indica recuperação: este quadro calcula a variação semanal de cada ETF de índice e, para comparação, a semana anterior — ambos os dados extraídos da mesma consulta.

QuerySemana a semana: os quatro ETFs de índice contra o fechamento da sexta anterior
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-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS prior_friday_close,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS week_close,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS week_change_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-18') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND window_start >= toDateTime('2026-06-15 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY ticker
ORDER BY ticker

O SPY encerrou a semana em $744.8, uma alta de 2.2% em relação à sexta-feira anterior — após uma semana de -2.3%. O QQQ subiu 1% após uma semana anterior de -4.6%, o DIA ganhou 2%, e o IWM fechou em 297.530% na semana, estável enquanto os índices de large-cap subiram.

A semana em comparação ao último ano

QueryEsta semana contra o trailing year: SPY, abertura ao fechamento de cada semana (rank 1 = melhor; semanas curtas excluídas)
O SQL exato por trás de cada número
SELECT round(anyIf(ret, wk = toDate('2026-06-29')), 2) AS week_2026_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-06-29')), groupArrayIf(ret, wk != toDate('2026-06-29'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions, wk = toDate('2026-06-29')) AS sessions_this_week
FROM (
    SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
           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 = 'SPY'
      AND window_start >= toDateTime('2025-06-29 00:00:00')
      AND window_start < toDateTime('2026-07-03 00:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY wk
    HAVING sessions >= 3
)

A variação do preço de abertura ao fechamento durante a semana — da primeira barra do pregão de segunda-feira à última de quinta-feira — oferece uma perspectiva diferente do placar de fechamento de sexta-feira acima. O resultado mostra que a semana do SPY ocupa a posição 14 das últimas 53 semanas (rank 1 = melhor): desempenho mediano, em um período de doze meses que incluiu tanto a liquidação quanto a recuperação. Semanas com menos de três sessões são excluídas por uma regra de segurança; esta semana teve 4. O contexto histórico varia conforme o período — os resumos do mês, trimestre e semestre comparam seus períodos contra todos os anos registrados no histórico.

Quatro sessões, depois um feriado

Uma semana de negociação de cinco dias é uma suposição, não um fato — esta teve quatro sessões. O painel de registros verifica o fechamento a partir do próprio tape: zero barras de SPY registradas em 3 de julho contra 1560 barras de sessão regular ao longo dos quatro dias negociados.

QueryOcorrência das sessões: quatro dias de negociação, um fechamento de sexta, verificado via tape
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-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS sessions_in_week,
    (SELECT countIf((toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS regular_bars_week,
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-03 00:00:00') AND window_start < toDateTime('2026-07-04 00:00:00')) AS jul3_spy_bars
QuerySessão a sessão: fechamento, variação e volume diário do SPY
O SQL exato por trás de cada número
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
    round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS spy_close,
    round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / any(prev) - 1) * 100, 1) AS change_pct,
    round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
INNER JOIN (
    SELECT d, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
        GROUP BY d
    )
) AS p ON toDate(toTimeZone(window_start, 'America/New_York')) = p.d
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY et_date
ORDER BY et_date

Todas as quatro sessões seguiram o cronograma regular completo — as 1560 barras regulares equivalem a exatamente quatro sessões de 390 minutos. A semana fechou praticamente estável (-0.1%) em 2026-07-02, antes do feriado — os ganhos da semana ocorreram em suas três primeiras sessões.

Amplitude: quanto do mercado subiu

A alta de apenas um índice pode esconder uma queda generalizada do mercado. Este painel contabiliza cada ticker com fechamento em ambos os lados da semana, divulgando o conjunto de ativos excluídos em vez de apenas omiti-los.

QueryAvanços e declínios na semana, com o filtro de liquidez detalhado
O SQL exato por trás de cada número
SELECT
    countIf(chg > 0 AND NOT dropped) AS advancers,
    countIf(chg < 0 AND NOT dropped) AS decliners,
    countIf(chg = 0 AND NOT dropped) AS unchanged,
    countIf(dropped) AS dropped_by_liquidity_filter,
    count() AS tickers_with_both_closes
FROM (
    SELECT ticker,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
      - argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS chg,
        sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29')) < 1e6 AS dropped
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
    GROUP BY ticker
    HAVING countIf(toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
       AND countIf(toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
)

5047 tickers subiram na semana contra 3525 que caíram (39 estáveis) — a alta foi ampla, não restrita apenas ao nível do índice. O filtro de liquidez separou 3163 tickers que negociaram menos de $1M durante toda a semana; eles são contabilizados aqui, sem serem ocultados.

Os líderes do pregão: uma ação acima dos ETFs

QueryVolume financeiro em horário regular, semana de 29 de junho (um ticker duplicado excluído aguardando verificação)
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-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 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 8

MU liderou todo o pregão com $190.2 bilhões em volume financeiro em horário regular — o SPY, o maior ETF, registrou 66.4% desse valor. Uma única empresa negociando mais que o fundo de índice padrão do mercado durante uma semana inteira é o fato mensurável de destaque da semana; esta página relata o tamanho do fluxo, não o motivo. Base: 29 de junho a 2 de julho em horário regular; uma listagem de junho com símbolo reutilizado foi excluída aguardando verificação da entidade — os dados detalhados estão em seu próprio relatório detalhado.

O feriado alterou os vencimentos semanais

Para onde vai o vencimento semanal de uma sexta-feira quando a sexta é feriado? O tape de opções responde diretamente: este painel extrai a data de vencimento de cada contrato negociado durante a semana e os classifica.

QueryContratos negociados durante a semana, por data de vencimento (scan de passagem única; gerado em lote)
O SQL exato por trás de cada número
SELECT concat('20', substring(expiry_raw, 1, 2), '-', substring(expiry_raw, 3, 2), '-', substring(expiry_raw, 5, 2)) AS expiry,
    round(sum(size) / 1e6, 1) AS contracts_m,
    round(100 * sum(size) / max(sum(size)) OVER (), 1) AS pct_of_biggest
FROM (
    SELECT substring(ticker, length(ticker) - 14, 6) AS expiry_raw, size
    FROM global_markets.options_trades
    WHERE sip_timestamp >= toDateTime64('2026-06-29 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-03 00:00:00', 9)
)
GROUP BY expiry
ORDER BY contracts_m DESC
LIMIT 6

O vencimento mais movimentado da semana foi o de 2026-07-02 — uma quinta-feira — com 74.1 milhões de contratos, 42.2% à frente da próxima data. Com o fechamento de 3 de julho, o vencimento de "sexta-feira" da semana ocorreu na quinta-feira; os vencimentos diários de segunda a quarta e o mensal de 17 de julho completam a tabela. As datas de vencimento são extraídas do símbolo OCC de cada contrato (a coluna de vencimento do próprio tape não é confiável); a mecânica de semanas de vencimento como esta está em o explicador de feriados.

Taxas: o título de 10 anos subiu

QueryYields dos Treasuries durante a semana (print de 2 de julho ainda não processado)
O SQL exato por trás de cada número
SELECT toString(date) AS d,
    round(yield_10_year, 2) AS y10,
    round(yield_2_year, 2) AS y2,
    round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-06-26') AND date <= toDate('2026-07-02')
ORDER BY date

O título de 10 anos subiu de 4.38% na sexta-feira anterior para 4.48% até 2026-07-01, enquanto o spread 2s10s manteve-se próximo de 31 pontos de base. Uma observação: o dado de rendimento de 2 anos de julho ainda não havia sido processado quando esta página foi gerada (4 linhas até 1º de julho) — o painel incluirá essa informação na próxima atualização.

O calendário: um trimestre termina, um dia de registro desaparece

QueryCalendário corporativo da semana — com o gap do índice de filings de 30 de junho em exibição
O SQL exato por trás de cada número
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-06-29') AND ex_dividend_date <= toDate('2026-07-02')) AS ex_div_events,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-06-29') AND execution_date <= toDate('2026-07-02')) AS splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-06-29') AND listing_date <= toDate('2026-07-02')) AS ipos,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_jun29,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-01')) AS filings_jul1,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-02')) AS filings_jul2,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= toDateTime('2026-06-29 00:00:00') AND published_utc < toDateTime('2026-07-03 00:00:00')) AS news_articles

A semana apresentou eventos ex-dividendos 2217, splits 48 e novas listagens 7 na virada do trimestre. As colunas de registros mostram uma falha de qualidade de dados da semana: o índice de registros da SEC mostra 4439 registros em 29 de junho e 4282 em 1º de julho, mas apenas 31 em 30 de junho — o último dia do trimestre. Os dias de fechamento de trimestre do ano anterior somam milhares. A lacuna está no feed de dados, não no que as empresas registraram; qualquer contagem de registros de junho ou do Q2 que inclua 30 de junho estará subestimada até que o índice atualize os dados retroativamente. Isso faz parte de um padrão de fechamento de mês de 2026 — a nota de diagnóstico apresenta as evidências — divulgado aqui e nos resumos de junho e Q2.

Os shorts: um arquivo truncado, três completos

QueryShort volume off-exchange da FINRA por sessão: cobertura e shares marked-short
O SQL exato por trás de cada número
SELECT toString(date) AS d,
    uniqExact(ticker) AS tickers_on_file,
    max(ticker) AS alphabetical_end,
    round(100 * sum(toFloat64(short_volume)) / sum(toFloat64(total_volume)), 1) AS marked_short_pct
FROM (
    SELECT date, ticker, any(short_volume) AS short_volume, any(total_volume) AS total_volume
    FROM global_markets.stocks_short_volume
    WHERE date >= toDate('2026-06-29') AND date <= toDate('2026-07-02')
    GROUP BY date, ticker
)
GROUP BY date
ORDER BY date

O volume fora de bolsa foi baixo, em torno de 48.8% no meio da semana — apenas o fluxo rotineiro de market-maker plumbing, sem sinal de squeeze. As colunas de cobertura trazem uma ressalva: o arquivo de 29 de junho está truncado em todo o mercado (5489 tickers terminando em "SSUS" contra cerca de 15.000 terminando em "ZYME" em dias completos), portanto o 45.8% de 29 de junho é calculado a partir de um arquivo parcial. O análise detalhada de 29 de junho contém a investigação completa de todo o mercado.

Notas de dados

Notas completas de dados
  • 3 de julho foi um fechamento TOTAL, não um fechamento antecipado. O dia 4 de julho de 2026 caiu em um sábado; a NYSE e a Nasdaq observaram o feriado na sexta-feira, 3 de julho — o ticker 0 SPY registrou barras nesse dia. Uma nota de conjunto de dados descoberta durante a regeneração desta página: a tabela de calendário da bolsa é um feed de feriados futuros rotativo, e a linha de 3 de julho expirou após o feriado (estava presente na primeira edição desta página), portanto o registro de fechamento é o dia de barra zero da fita; os detalhes técnicos estão em a explicação sobre feriados.
  • O interesse a descoberto termina no settlement de 15 de junho. O settlement bimestral de fim de junho não havia sido publicado quando esta página foi gerada; nada aqui utiliza esses dados, e o resumo de junho contém a divulgação completa. Este post será regenerado quando os dados forem publicados.
  • O gap do índice de registros de 30 de junho é divulgado no texto acima; o relatório do tesouro de 2 de julho aguarda processamento.
  • O arquivo de short-volume da FINRA de 29 de junho está truncado em todo o mercado; sua razão é exibida junto com sua cobertura.
  • Exclusão de líder de volume: um ativo listado em junho negocia sob um símbolo reutilizado e está excluído do leaderboard enquanto aguarda verificação da entidade (seu próprio post contém os comprovantes).

Metodologia

  • O período compreende de 29 de junho a 2 de julho de 2026 — as quatro sessões negociadas da semana; o dia 3 de julho foi feriado no mercado. Os limites das sessões são verificados a partir de barras observadas, nunca presumidos (o conjunto de dados do calendário da bolsa contém apenas feriados futuros — veja a nota de dados).
  • Os timestamps são armazenados em UTC e filtrados com limites em UTC bruto; o horário regular nesta semana (EDT) é das 13:30 às 20:00 UTC. Os fechamentos correspondem à última barra de minuto do horário regular; o volume em dólares é o produto do fechamento do minuto pelo volume do minuto, somado durante o horário regular.
  • Os números semanais comparam-se com o fechamento da sexta-feira anterior, calculado do zero na mesma consulta desta semana — nunca lidos de um valor armazenado. O ranking do último ano é recalculado semanalmente de forma idêntica (horário regular do fuso Eastern, guarda de sessão mínima, limite superior fixado no encerramento desta semana).
  • 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 resumo semanal fixo — a edição da próxima semana cobrirá de 6 a 10 de julho e terá link de retorno para cá. O resumo diário de 29 de junho detalha o dia de segunda-feira.