Strasmore Research

resumo semanal mercado 20 julho 2026

Primeira semana completa após vencimento de opções mensais de julho. Scoreboard dos índices, dispersão setorial, amplitude semanal e fluxo de capital no tape.

A semana de 20 de julho de 2026 foi a primeira semana completa após o vencimento das opções mensais de julho, e teve 5 pregões sem nenhum fechamento dentro dela. A variação de fechamento contra fechamento do SPY na semana foi de -0.59%, e medida de abertura a fechamento contra o trailing year de semanas, ficou em 43 de 53. Cada número abaixo é lido de uma consulta armazenada, e cada janela está fixada em datas explícitas, portanto, reexecutar o SQL retorna os mesmos valores.

A semana no quadro

As variações semanais vão do fechamento regular de sexta-feira, 17 de julho, ao de sexta-feira, 24 de julho. A última coluna traz a semana anterior, para que as duas fiquem lado a lado. As linhas estão em ordem alfabética.

QuerySPY / QQQ / DIA / IWM: semana de 20 de julho vs fechamento de 17 de julho, com a variação da semana anterior
O SQL exato por trás de cada número
SELECT ticker,
    round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00'), 2) AS prior_week_close,
    round(argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'), 2) AS week_close,
    round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00')
         / argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00') - 1) * 100, 2) AS week_change_pct,
    round((argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
         / argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00') - 1) * 100, 2) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND ((window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00')
    OR (window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
    OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
GROUP BY ticker
ORDER BY ticker

Na semana: DIA moveu -0.38%, IWM -0.98%, QQQ -1.59% e SPY -0.59% para um fechamento de $738.85. As leituras da semana anterior, na mesma ordem alfabética, foram -0.95%, -0.63%, -4.17% e -1.55%. A distância entre os quatro índices é a primeira coisa que um placar mede, e nem sempre é pequena.

A semana contra o ano anterior

O número de uma semana isolada significa pouco sem a distribuição subjacente. Este painel recalcula cada semana anterior com a mesma lógica, de abertura a fechamento durante a sessão regular, e classifica esta dentro desse conjunto.

QuerySemana do SPY no contexto do ano anterior (retornos semanais de abertura a fechamento)
O SQL exato por trás de cada número
SELECT round(anyIf(ret, wk = toDate('2026-07-20')), 2) AS week_open_to_close_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-07-20')), groupArrayIf(ret, wk != toDate('2026-07-20'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions_measured, wk = toDate('2026-07-20')) 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_measured,
           (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-07-21 00:00:00')
      AND window_start < toDateTime('2026-07-25 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_measured >= 3
)

Medido dessa forma, o SPY retornou -1.1% e ficou na 43 posição de 53 semanas desde 2025-07-21. Observe a diferença de definição: este número começa na primeira abertura da sessão regular da semana, enquanto o placar acima começa no fechamento da semana anterior. Ambos são identificados onde quer que apareçam.

Cinco sessões, um arco

QuerySPY por sessão: fechamento, variação e volume de ações, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT toString(d) AS date,
       round(c, 2) AS spy_close,
       round((c / prev_c - 1) * 100, 2) AS change_pct,
       round(shares_m, 1) AS spy_shares_m
FROM (
    SELECT d, c, shares_m,
           lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS c,
               toFloat64(sum(volume)) / 1e6 AS shares_m
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY d
    )
)
WHERE d >= '2026-07-20'
ORDER BY date

Sessão por sessão, a variação do SPY foi de -0.15% na segunda-feira, 0.84% na terça-feira, -0.12% na quarta-feira, -1.22% na quinta-feira e 0.08% na sexta-feira, fechando a $738.85 com 40.1 milhões de ações negociadas. O dado de segunda-feira é medido em relação ao fechamento de 17 de julho, a sessão imediatamente anterior ao período.

Abrangência, sessão por sessão

Um nível de índice é apenas um número. A abrangência conta quantas ações se moveram junto com ele, e é esse número que decide se uma semana verde foi ampla ou estreita.

QueryAltas e baixas por sessão, ativos com $5M+ negociados, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT toString(d) AS date, advancers, decliners, unchanged, measured_names
FROM (
    SELECT d,
           countIf(c > prev_c) AS advancers,
           countIf(c < prev_c) AS decliners,
           countIf(c = prev_c) AS unchanged,
           count() AS measured_names
    FROM (
        SELECT d, c, dv,
               lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_c
        FROM (
            SELECT ticker,
                   toDate(toTimeZone(window_start, 'America/New_York')) AS d,
                   argMax(toFloat64(close), window_start) AS c,
                   sum(toFloat64(close) * toFloat64(volume)) AS dv
            FROM global_markets.delayed_stocks_minute_aggs
            WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
                OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
              AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
            GROUP BY ticker, d
        )
    )
    WHERE d >= '2026-07-20' AND prev_c > 0 AND dv >= 5000000
    GROUP BY d
)
ORDER BY date

Na segunda-feira, 1268 dos 3945 nomes medidos subiram e 2632 caíram. Na sexta-feira, a divisão era de 2273 altas contra 1635 baixas, de um total de 3950. Nomes sem fechamento em ambos os lados de uma sessão são excluídos, e é por isso que a contagem medida oscila um pouco de um dia para o outro.

A mesma pergunta, feita uma vez, ao longo de toda a semana:

QueryBreadth semanal: fechamento regular de 24 de julho vs fechamento regular de 17 de julho, ativos com $5M+ negociados na semana
O SQL exato por trás de cada número
SELECT
    countIf(cw > cp AND liquid) AS advancers,
    countIf(cw < cp AND liquid) AS decliners,
    countIf(cw = cp AND liquid) AS unchanged,
    countIf(liquid) AS measured_names,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(cw > cp AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, cp, cw, dv >= 5000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0
    )
)

Dos 6100 nomes que superaram a barreira de volume de negócios de cinco milhões de dólares no horário regular, 2437 fecharam acima do fechamento de 17 de julho e 3630 fecharam abaixo, uma fatia de altas de 40%. O filtro de liquidez deixou de lado outros 5099 nomes que negociaram abaixo dessa barreira durante a semana. Eles são contabilizados aqui, em vez de serem descartados silenciosamente.

O placar setorial

Os onze ETFs setoriais da SPDR, do fechamento de 17 de julho ao de 24 de julho, ranqueados do melhor ao pior.

QueryETFs setoriais, variação da semana completa: fechamento de 24 de julho vs fechamento de 17 de julho
O SQL exato por trás de cada número
SELECT sector, week_pct, round(max(week_pct) OVER () - week_pct, 2) AS points_behind_best
FROM (
    SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
                   ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
                   ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
                   ticker = 'XLV', 'Health Care', 'Consumer Discretionary') AS sector,
           round((cw / cp - 1) * 100, 2) AS week_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-24 13:30:00' AND window_start < '2026-07-24 20:00:00'))
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0
    )
)
ORDER BY week_pct DESC

Energy ficou no topo da tabela com 3.33%. Consumer Discretionary ficou na base com -5.2%, 8.53 pontos percentuais atrás. Essa diferença é a dispersão setorial da semana, e vale a pena interpretá-la por si só: uma semana em que todos os onze ficam dentro de um ponto percentual um do outro é um mercado muito diferente daquele em que o spread chega a dois dígitos.

Para onde os dólares foram

QueryPrincipais ativos por volume em dólar no horário regular, semana completa de 20 a 24 de julho
O SQL exato por trás de cada número
SELECT ticker, week_dollar_bn, round(100 * week_dollar_bn / max(week_dollar_bn) OVER (), 1) AS pct_of_leader
FROM (
    SELECT ticker,
           round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS week_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY week_dollar_bn DESC
    LIMIT 8
)
ORDER BY week_dollar_bn DESC

MU registrou 158.1 bilhões de dólares em volume de negociação no horário regular ao longo das cinco sessões, superando SPY com 133.9 bilhões e QQQ com 101.5 bilhões. Em oitavo lugar no ranking, AAPL negociou 34.5% dos dólares do líder. Os recordes de volume mostram onde o mercado passou a semana discutindo, e isso não precisa coincidir com o preço. A versão por ativo dessa medida é o volume relativo.

Os maiores movimentos da semana

Desdobramentos movimentam o preço sem alterar o valor: um grupamento fabrica um ganho artificial de quatro dígitos, um desdobramento uma queda artificial do mesmo tamanho. A semana teve 25 grupamentos e 11 desdobramentos, e ambas as tabelas abaixo excluem qualquer ativo cujo desdobramento tenha ocorrido entre o fechamento de 17 de julho e o de 24 de julho, o intervalo exato em que a variação é medida. Ambas também exigem cinco milhões de dólares em volume no horário regular.

QueryDestaques semanais: dez maiores altas e baixas, fechamentos no horário regular, $5M+ negociados, excluindo desdobramentos
O SQL exato por trás de cada número
SELECT ticker, board, week_pct, week_dollar_m, sessions_traded,
       round(100 * week_dollar_m / max(week_dollar_m) OVER (), 1) AS pct_of_dollar_max
FROM (
    SELECT 'gainers' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
           round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
               uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct DESC
    LIMIT 10
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((cw / cp - 1) * 100, 1) AS week_pct,
           round(dv / 1e6, 1) AS week_dollar_m, sessions_traded
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-18 00:00:00') AS cp,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-24 13:30:00') AS cw,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-20 13:30:00') AS dv,
               uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-20 13:30:00') AS sessions_traded
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker NOT IN ('SPCX')
          AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date > '2026-07-17' AND execution_date <= '2026-07-24')
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-25 00:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker
        HAVING cp > 0 AND cw > 0 AND dv >= 5000000
    )
    ORDER BY week_pct ASC
    LIMIT 10
)
ORDER BY board DESC, abs(week_pct) DESC

Para entrar em qualquer uma das tabelas foi necessário um movimento real. O ganhador mais moderado mostrado subiu 92.3%, e o perdedor mais moderado registrou -47.8%. Nos extremos, STAK moveu 383.7% com 251.6 milhões de dólares negociados, e LBGJ moveu -98.8% com 47.7 milhões. Essa queda se aproxima do valor total cotado do ativo, então a tabela traz seu próprio recibo: LBGJ registrou barras no horário regular em 5 das cinco sessões, e nenhum desdobramento foi executado contra ele entre os dois fechamentos que a tabela mede.

O spread cotado, sessão a sessão

O preço é o destaque. O custo de executar a operação é o spread cotado, medido aqui no SPY uma sessão de cada vez, diretamente da fita NBBO bruta, e não de qualquer resumo.

QuerySpread mediano cotado do SPY e atualizações NBBO por sessão, horário regular, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT toString(toDate(sip_timestamp)) AS date,
       round(quantileExactIf(0.5)(
           10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2),
           bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price), 2) AS median_spread_bps,
       round(count() / 1e6, 2) AS quote_updates_m,
       countIf(bid_price <= 0 OR ask_price <= 0) AS one_sided_quote_count,
       countIf(bid_price > ask_price AND bid_price > 0 AND ask_price > 0) AS crossed_quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
  AND sip_timestamp >= '2026-07-20 13:30:00'
  AND sip_timestamp < '2026-07-24 20:00:00'
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY toDate(sip_timestamp)
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY toDate(sip_timestamp)

O spread cotado mediano do SPY foi de 0.27 pontos-base do preço médio na segunda-feira e 0.27 na sexta-feira, com 3.89 milhões e 4.4 milhões de atualizações NBBO. As duas últimas colunas são a divulgação, e não a conclusão: 0 cotações unilaterais e 1084 cotações cruzadas foram contadas fora da mediana de segunda-feira, em vez de serem descartadas silenciosamente. Uma cotação cruzada, com a oferta de compra acima da oferta de venda, é um artefato comum de um feed consolidado montado a partir de várias plataformas com resolução de nanossegundos.

A semana de opções após o vencimento mensal

O vencimento mensal de julho ocorreu na sexta-feira anterior à abertura desta semana, portanto todo contrato negociado nestas cinco sessões sobreviveu a ele. O momento do vencimento define o ritmo ao qual o público do mesmo dia opera.

QueryContratos de opções, ações no mesmo dia e parcela de calls por sessão, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT toString(toDate(sip_timestamp)) AS date,
       round(toFloat64(sum(size)) / 1e6, 1) AS contracts_m,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = formatDateTime(toDate(sip_timestamp), '%y%m%d')) / sum(size), 1) AS pct_0dte,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 8, 1) = 'C') / sum(size), 1) AS pct_call,
       round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260724') / sum(size), 1) AS pct_expiring_jul24
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-20 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00'
GROUP BY toDate(sip_timestamp)
ORDER BY toDate(sip_timestamp)

O volume de contratos atingiu 64 milhões na segunda-feira e 71.1 milhões na sexta-feira. A parcela do mesmo dia, ou seja, contratos com vencimento na própria sessão em que são negociados, registrou 40.2% na segunda contra 49% na sexta, a sessão de vencimento da semana. Calls representaram 53.5% do volume de contratos de sexta-feira. E a atração dessa sexta foi visível desde a sessão de abertura: 15.1% do volume de segunda-feira já estava em contratos com data de vencimento nela.

Taxas ao longo da semana

QueryCurva do Tesouro por sessão, do print de 17 de julho a 24 de julho
O SQL exato por trás de cada número
SELECT toString(date) AS date,
       round(toFloat64(yield_2_year), 2) AS yield_2y_pct,
       round(toFloat64(yield_10_year), 2) AS yield_10y_pct,
       round(toFloat64(yield_30_year), 2) AS yield_30y_pct,
       round((toFloat64(yield_10_year) - toFloat64(yield_2_year)) * 100) AS spread_2s10s_bp,
       round((toFloat64(yield_10_year) - (SELECT toFloat64(any(yield_10_year)) FROM global_markets.treasury_yields WHERE date = '2026-07-17')) * 100) AS chg_10y_from_prior_close_bp
FROM global_markets.treasury_yields
WHERE date >= '2026-07-17' AND date <= '2026-07-24'
ORDER BY date

Medido a partir do fechamento de 17 de julho, o título de dez anos moveu 16 pontos-base para 4.71% no último dado disponível, com o de dois anos em 4.37% e o de trinta anos em 5.17%. O spread entre dois e dez anos encerrou a série em 34 pontos-base. O arquivo do Tesouro americano tem aproximadamente uma sessão de defasagem em relação ao mercado, portanto este painel contém 5 cotações, cada uma com sua data na tabela.

Os vendidos: os arquivos diários

A FINRA publica um arquivo diário de volume de vendas a descoberto. O volume de vendido é um fluxo bruto diário, e não uma posição, e esses arquivos às vezes chegam truncados, portanto a cobertura é medida antes de qualquer índice ser extraído deles.

QueryCobertura do arquivo de volume vendido diário: tickers no arquivo e ações vendidas, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT date, tickers_on_file, short_shares_bn,
       round(100.0 * tickers_on_file / max(tickers_on_file) OVER (), 1) AS pct_of_fullest_file
FROM (
    SELECT toString(date) AS date,
           uniqExact(ticker) AS tickers_on_file,
           round(sum(short_shares) / 1e9, 2) AS short_shares_bn
    FROM (
        SELECT date, ticker, max(short_volume) AS short_shares
        FROM global_markets.stocks_short_volume
        WHERE date >= '2026-07-20' AND date <= '2026-07-24'
        GROUP BY date, ticker
    )
    GROUP BY date
)
ORDER BY date

5 arquivos diários disponíveis para a semana. O primeiro contém 15098 tickers e 4.71 bilhões de ações marcadas como vendidas; o último contém 15062 tickers, ou 99.7% da contagem de tickers do arquivo mais completo. Qualquer alegação de volume de vendido por nome extraída de um arquivo muito abaixo dos vizinhos permanece não verificável até que esse arquivo seja conferido.

O calendário por trás da semana

QueryArquivos SEC por sessão e tipo de formulário, 20 a 24 de julho
O SQL exato por trás de cada número
SELECT toString(filing_date) AS date,
       count() AS filings,
       countIf(form_type = '4') AS form4,
       countIf(form_type = '8-K') AS form8k,
       countIf(form_type = '424B2') AS f424b2
FROM global_markets.stocks_sec_edgar_index
WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24'
GROUP BY filing_date
ORDER BY date

A primeira sessão registrada trouxe 3012 arquivamentos, sendo 632 deles relatórios insider Formulário 4 e 166 deles 8-Ks. A última trouxe 3814, com 644 Formulários 4 e 223 8-Ks. 5 das sessões da semana têm um índice diário da EDGAR registrado; esse índice segue seu próprio cronograma, que ocasionalmente fica atrás da fita.

QueryCalendário corporativo da semana: dividendos, desdobramentos, listagens, notícias
O SQL exato por trás de cada número
SELECT
    (SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filings_week,
    (SELECT uniqExact(filing_date) FROM global_markets.stocks_sec_edgar_index WHERE filing_date >= '2026-07-20' AND filing_date <= '2026-07-24') AS filing_days_on_file,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS ex_dividends_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-20' AND ex_dividend_date <= '2026-07-24') AS household_ex_dividends_week,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS reverse_splits_week,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-20' AND execution_date <= '2026-07-24') AS forward_splits_week,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= '2026-07-20' AND listing_date <= '2026-07-24') AS listings_week,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_week,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-20 04:00:00' AND published_utc < '2026-07-25 04:00:00') AS news_publishers_week

O restante da papelada da semana: 17106 arquivamentos na SEC ao longo de 5 dias indexados, 592 registros ex-dividendo, 1 deles das dez empresas de grande porte que este painel acompanha, 25 desdobramentos reversos e 11 desdobramentos normais, 4 novas listagens e 1704 artigos de 2 editoras. Esse último par mede a atenção de um único feed, não a da mídia mundial.

As sessões, verificadas

QueryVerificação de sessões: sessões, barras, linhas de feriado, fechamentos em alta e baixa, próximo fechamento
O SQL exato por trás de cada número
WITH spy AS (
    SELECT d, c, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS p
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND ((window_start >= '2026-07-17 13:30:00' AND window_start < '2026-07-17 20:00:00')
            OR (window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'))
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY d
    )
)
SELECT
    uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions_in_week,
    toString(min(toDate(toTimeZone(window_start, 'America/New_York')))) AS first_session,
    toString(max(toDate(toTimeZone(window_start, 'America/New_York')))) AS last_session,
    count() AS regular_bars_in_week,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-20' AND date <= '2026-07-24') AS holiday_rows_in_week,
    (SELECT countIf(c > p) FROM spy WHERE d >= '2026-07-20') AS up_sessions,
    (SELECT countIf(c < p) FROM spy WHERE d >= '2026-07-20') AS down_sessions,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-24' AND date <= '2026-12-31' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
  AND window_start >= '2026-07-20 13:30:00' AND window_start < '2026-07-24 20:00:00'
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199

5 sessões, 2026-07-20 a 2026-07-24, com 0 linhas de feriado em qualquer parte da janela. O SPY imprimiu 1950 barras de minuto da sessão regular entre elas. 2 sessões fecharam acima do fechamento anterior e 3 fecharam abaixo. O próximo fechamento programado é Labor Day em 2026-09-07.

Na pauta

Na semana seguinte, leia em nossas próprias tabelas:

QueryPróxima semana no calendário: fechamentos, ex-dividendos, desdobramentos e o vencimento
O SQL exato por trás de cada número
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-27' AND date <= '2026-07-31' AND status != 'open') AS closures_next_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS ex_dividends_next_week,
    (SELECT countIf(ticker IN ('AAPL', 'MSFT', 'JPM', 'KO', 'JNJ', 'XOM', 'CVX', 'PG', 'WMT', 'HD')) FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-27' AND ex_dividend_date <= '2026-07-31') AS household_ex_div_next_week,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-27' AND execution_date <= '2026-07-31') AS splits_next_week,
    (SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) FROM global_markets.options_trades WHERE sip_timestamp >= '2026-07-24 00:00:00' AND sip_timestamp < '2026-07-25 00:00:00') AS jul31_expiry_pct_of_friday_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-24') AS latest_short_interest_settlement

A tabela de feriados mostra 0 fechamentos na semana seguinte. 368 registros de ex-dividendo caem dentro dela, 0 do conjunto doméstico, junto com 15 desdobramentos programados. Do volume de opções de sexta-feira, 14.2% já estava em contratos com vencimento na sexta-feira seguinte. A data de liquidação de juros curtos mais recente no arquivo é 2026-07-15, um arquivo que é publicado com um atraso longo o suficiente para ter sua própria explicação.

FAQ

Como o mercado de ações se comportou na semana de 20 de julho de 2026?

O SPY variou -0.59% de fechamento para fechamento entre 17 e 24 de julho, com o QQQ em -1.59%, o DIA em -0.38% e o IWM em -0.98%. Entre os nomes líquidos, 2437 subiu e 3630 caiu.

Qual setor liderou na semana de 20 de julho de 2026?

Energy, com 3.33%. O mais fraco dos onze ETFs setoriais da SPDR foi Consumer Discretionary, com -5.2%, 8.53 pontos percentuais atrás.

Quantas sessões de negociação houve na semana de 20 de julho de 2026?

5, de 2026-07-20 a 2026-07-24, com 0 linhas de feriado na janela. O próximo fechamento programado é Labor Day.

Qual ticker negociou o maior volume em dólares na semana de 20 de julho de 2026?

MU, com 158.1 bilhões de dólares em volume no horário regular, à frente de SPY, com 133.9 bilhões.

Notas sobre os dados

Todos os timestamps armazenados estão em UTC; o horário regular é de 13:30-20:00 UTC por sessão, e os limites da semana vão do fechamento regular de 17 de julho até 24 de julho. Cada painel de fechamento sobre fechamento aqui lê a última barra de minuto do horário regular de cada lado da comparação, portanto uma cotação fora do horário regular nunca pode definir um fechamento semanal. O ranking de trailing-year usa retornos semanais de abertura a fechamento, portanto não coincidirá com o placar de fechamento sobre fechamento; ambas as definições estão identificadas onde aparecem. A amplitude semanal e os quadros de movimentação aplicam um filtro de volume negociado de cinco milhões de dólares no horário regular, e a amplitude publica a quantidade de nomes descartados por esse filtro. Os quadros de movimentação excluem qualquer nome cujo desdobramento tenha ocorrido após o fechamento de 17 de julho e até 24 de julho, o intervalo exato sobre o qual a variação é medida, o que captura tanto um desdobramento registrado no fim de semana intermediário quanto um registrado em uma sessão; eles não excluem ETFs alavancados e inversos, que podem dominar um quadro em uma semana direcional. A parte inferior do quadro de quedas pode ficar próxima de uma perda total do valor cotado na semana, e esse quadro publica em quantas das cinco sessões cada nome apareceu. O painel de spread do SPY conta cotações unilaterais e cruzadas em vez de descartá-las silenciosamente, e a mediana é calculada sobre as cotações válidas restantes. O arquivo do Tesouro fica cerca de uma sessão atrás da fita e o índice diário da EDGAR segue seu próprio cronograma, portanto os painéis de taxas e arquivamentos informam quantos dias eles efetivamente cobrem. Nenhum índice de volatilidade implícita aparece aqui: essas séries não estão licenciadas para este repositório, portanto a volatilidade é lida da fita por meio de faixas, participação de opções no mesmo dia e comportamento das cotações.

Metodologia

  • Fonte dos dados de mercado: tape consolidado. delayed_stocks_minute_aggs para preços e volumes, cache_stocks_quotes para o painel NBBO, options_trades para a semana de opções.
  • Fechamento: a última barra de minuto da sessão regular, nunca um print assumido das 16h e nunca um print do after-market.
  • Sessões: verificadas a partir da tabela de feriados mais as barras observadas, nunca assumidas a partir do calendário.
  • Tratamento de fuso horário: cláusulas WHERE usam literais UTC brutos, e toTimeZone aparece apenas nas listas SELECT para rótulos ET.
  • Decimais: colunas de preço, tamanho e volume são convertidas para Float64 antes de qualquer divisão ou produto.
  • Agregados determinísticos: quantis exatos em todo o texto, e toda afirmação de ordenação ou sinal na prosa é codificada como um limite de sanidade.
  • Data do warehouse: 26 de julho de 2026.

Links cruzados: a edição anterior desta série semanal, o que é um spread de compra e venda, quando opções expiram, juros curtos versus volume curto e o spread de dois para dez anos.

Toda consulta acima é executada sem alterações no terminal Strasmore, caso você queira redirecionar uma janela para uma semana diferente.