Strasmore Research
Recaps de mercado Matt ConnorPor Matt Connor · Atualizado 2026-08-02

Fechamento do mercado em 28 de julho de 2026

Resumo de 28 de julho de 2026 com índices, breadth, spread setorial, fluxo de opções, cotações, juros e calendário, usando números de consultas armazenadas.

Este resumo de mercado da terça-feira, 28 de julho de 2026, lê toda a sessão a partir de consultas armazenadas: a variação de fechamento a fechamento do SPY foi de 0.24%, a participação das ações em alta no tape líquido foi de 58.6%, e o tape de opções registrou 59.28 milhões de contratos. Todas as janelas abaixo estão vinculadas a datas explícitas nos dois extremos. Assim, executar novamente o SQL de qualquer painel retorna esses mesmos números.

O placar

Cada variação compara a última barra de um minuto da sessão regular de 28 de julho com a da segunda-feira, 27 de julho, em sessões consecutivas. As linhas estão em ordem alfabética, para que cada ETF mantenha uma posição fixa.

QuerySPY / QQQ / DIA / IWM: 28 de julho vs. fechamento de 27 de julho, horário regular
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-07-27 13:30:00' AND window_start < '2026-07-27 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-07-28 13:30:00' AND window_start < '2026-07-28 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_open) / toFloat64(p.prior_close) - 1) * 100, 2) AS gap_pct,
    round((toFloat64(s.day_close) / toFloat64(s.day_open) - 1) * 100, 2) AS intraday_pct,
    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
FROM sess s LEFT JOIN prior p ON s.ticker = p.ticker
ORDER BY ticker
Run this yourself

O DIA variou 1.07%, o IWM 0.15%, o QQQ -0.96% e o SPY 0.24%, fechando a $740.76. Cada linha divide a variação em duas etapas: o SPY abriu 0.02% em relação ao fechamento de segunda-feira e variou 0.21% entre a abertura e o fechamento. A etapa overnight e a etapa intradiária não precisam coincidir, e essa divisão é a primeira impressão da sessão.

O dia foi incomum?

O número de uma única sessão diz pouco sem a distribuição por trás dele. Por isso, o dia é classificado dentro do próprio mês anterior, usando a mesma lógica.

QueryMovimento diário do SPY no contexto histórico (abertura ao fechamento, 29 de junho a 28 de julho)
O SQL exato por trás de cada número
SELECT
    round(anyIf(oc_pct, d = toDate('2026-07-28')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-28'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-28'))) + 1 AS spy_abs_move_rank,
    count() AS spy_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-29 13:30:00')
      AND window_start < toDateTime('2026-07-29 00:00:00')
      AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
    GROUP BY d
)
Run this yourself

O movimento de abertura ao fechamento do SPY, de 0.21%, ficou em 14 lugar entre 21 sessões anteriores, por tamanho absoluto, em uma janela que remonta a 2026-06-29. A classificação conta quantas outras sessões da janela tiveram movimentos maiores e soma um. Assim, o primeiro lugar corresponderia ao maior movimento do mês anterior.

Amplitude de mercado

O nível de um índice é um único número. A amplitude mostra quantas ações acompanharam esse movimento.

QueryAmplitude do mercado líquido: fechamento de 28 de julho vs. fechamento de 27 de julho, filtro de US$ 1 mi negociados
O SQL exato por trás de cada número
SELECT
    countIf(c28 > c27 AND liquid) AS advancers,
    countIf(c28 < c27 AND liquid) AS decliners,
    countIf(c28 = c27 AND liquid) AS unchanged,
    countIf(liquid) AS liquid_tickers,
    countIf(NOT liquid) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(c28 > c27 AND liquid) / countIf(liquid), 1) AS advancer_pct
FROM (
    SELECT ticker, c27, c28, dv28 >= 1000000 AS liquid
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 13:30:00') AS dv28
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0
    )
)
Run this yourself

Entre 6008 papéis que superaram o limite de turnover de um milhão de dólares no horário regular, 3519 fecharam acima do fechamento de segunda-feira e 2423 fecharam abaixo, o que representa uma participação de altas de 58.6%. O filtro deixou de fora 5346 papéis com menor liquidez; eles foram contabilizados aqui, em vez de simplesmente descartados.

A prateleira de mega caps

Os mesmos oito nomes de mega caps aparecem em todas as sessões, em ordem alfabética para que cada um mantenha sua linha. A ideia é usar uma cesta fixa: o leitor aprende as linhas, e nenhuma seleção editorial escolhe vencedores depois do fato.

QueryOito megacaps: variação vs. 27 de julho e dólares negociados no horário regular, 28 de julho
O SQL exato por trás de cada número
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-28 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-28 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL', 'AMZN', 'AVGO', 'GOOGL', 'META', 'MSFT', 'NVDA', 'TSLA')
      AND ((window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-27 20:00:00')
        OR (window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 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,
    day_dollar_bn
FROM per_name
ORDER BY ticker
Run this yourself

AAPL oscilou 0.97%, META -0.05%, MSFT 1.12% e NVDA 0.23%, em um giro de 21.11 bilhões de dólares no horário regular, enquanto a TSLA ficou em -0.57%. A coluna em dólares mostra quanto do fluxo esses oito nomes movimentam por conta própria; o painel de breadth acima verifica até que ponto o restante do mercado acompanhou esse movimento.

As maiores variações do dia

Ambos os painéis exigem cinco milhões de dólares em volume financeiro no horário regular, excluem qualquer ativo cujo desdobramento tenha sido executado entre os dois fechamentos considerados e excluem um ticker reutilizado conforme o controle de ambiguidade da casa descrito nas notas.

QueryMaiores altas e baixas: fechamento de 28 de julho vs. fechamento de 27 de julho, US$ 5 mi+ negociados, excluídos desdobramentos
O SQL exato por trás de cada número
SELECT ticker, board, day_pct, day_dollar_m
FROM (
    SELECT 'gainers' AS board, ticker, round((c28 / c27 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 13:30:00') AS dv
        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-27' AND execution_date <= '2026-07-28')
          AND window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct DESC
    LIMIT 8
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((c28 / c27 - 1) * 100, 1) AS day_pct, round(dv / 1e6, 1) AS day_dollar_m
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-27 20:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-28 13:30:00') AS dv
        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-27' AND execution_date <= '2026-07-28')
          AND window_start >= '2026-07-27 13:30:00' AND window_start < '2026-07-28 20:00:00'
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct ASC
    LIMIT 8
)
ORDER BY board DESC, abs(day_pct) DESC
Run this yourself

A maior alta do painel, STKH, avançou 166.7%, com 113.2 milhões de dólares negociados. A maior queda, YYAI, recuou -71%, com 18.3 milhões. Esta página registra os tamanhos e os comprovantes, sem atribuir uma narrativa a eles.

Dispersão entre setores

Os onze fundos SPDR de setores selecionados, com o fechamento de 28 de julho sobre o de 27 de julho, classificados do melhor ao pior. A cesta é definida e fixa, e não uma classificação de provedor.

QueryETFs setoriais, fechamento de 28 de julho vs. fechamento de 27 de julho, por ranking
O SQL exato por trás de cada número
SELECT sector, day_pct, round(max(day_pct) OVER () - day_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((c28 / c27 - 1) * 100, 2) AS day_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-28 00:00:00') AS c27,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-28 00:00:00') AS c28
        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-27 13:30:00' AND window_start < '2026-07-27 20:00:00')
            OR (window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00'))
        GROUP BY ticker
        HAVING c27 > 0 AND c28 > 0
    )
)
ORDER BY day_pct DESC
Run this yourself

Health Care liderou o ranking, com 2.36%, enquanto Technology ficou na última posição, em -1.9%, 4.26 pontos percentuais atrás. Esse spread representa a dispersão entre setores do dia: um pregão em que todos os onze ficam dentro de um ponto percentual é muito diferente de outro em que os resultados se espalham por vários pontos.

Onde os dólares foram negociados

QueryTop 6 por dólares negociados, top 4 por ações negociadas: horário regular de 28 de julho
O SQL exato por trás de cada número
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
    round(1000 * dollar_volume_bn / shares_m, 2) AS implied_avg_price
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 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(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard, if(leaderboard = 'by shares traded', shares_m, dollar_volume_bn) DESC
Run this yourself

MU liderou o ranking em dólares, com 39.21 bilhões negociados no horário regular, seguido por QQQ, com 29.98 bilhões. O ranking por ações responde a uma pergunta diferente: ONFO ficou no topo, com 182.4 milhões de ações e um preço médio implícito de US$0.16. O volume em dólares mostra onde está a atenção do mercado; o volume de ações mostra a rotatividade. A versão dessa medida por ativo é volume relativo.

O fluxo de opções

QueryFluxo de opções: contratos, participação de calls, participação no mesmo dia vs. segunda-feira, contrato mais ativo do SPY
O SQL exato por trás de cada número
WITH
    (
        SELECT (strike, typ, vol_m, is_0dte)
        FROM (
            SELECT toFloat64(any(strike_price)) AS strike, any(option_type) AS typ,
                   round(toFloat64(sum(size)) / 1e6, 2) AS vol_m,
                   if(substring(ticker, length(ticker) - 14, 6) = '260728', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
              AND underlying_symbol = 'SPY'
            GROUP BY ticker
            ORDER BY vol_m DESC, strike ASC
            LIMIT 1
        )
    ) AS top_spy,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-28 00:00:00'
    ) AS jul27_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260727') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-28 00:00:00'
    ) AS jul27_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul27_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) = '260728') / sum(size), 1) AS pct_0dte,
    jul27_pct_0dte,
    spy_regular_close,
    top_spy.1 AS top_spy_strike,
    top_spy.2 AS top_spy_type,
    top_spy.3 AS top_spy_contracts_m,
    top_spy.4 AS top_spy_is_0dte,
    round(top_spy.1 - spy_regular_close, 2) AS top_spy_strike_minus_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

O fluxo de opções registrou 10.07 milhões de negócios, envolvendo 59.28 milhões de contratos, ante 64.69 milhões na segunda-feira. As calls representaram 55% do volume de contratos. Os contratos que vencem no mesmo pregão, o grupo de opções com vencimento no mesmo dia, representaram 29%, contra 39.3% na segunda-feira, em um ritmo definido pelo momento do vencimento. O contrato mais negociado de SPY foi o 742 C, com 0.72 milhões de contratos. Seu strike estava 1.24 dólares distante do fechamento regular de SPY em US$740.76, medido como strike menos fechamento.

O fluxo de cotações

Os dados de cotações são o conjunto de dados mais escasso desta mesa, e são medidos em todas as sessões. Os dias comuns também entram no registro.

QueryContagem de atualizações do NBBO de ações: 28 de julho vs. 27 de julho, com atualizações por ticker nomeado (milhões)
O SQL exato por trás de cada número
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / 1e6, 2) AS jul28_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-27')) / 1e6, 2) AS jul27_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / countIf(toDate(sip_timestamp) = toDate('2026-07-27')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'SPY') / 1e6, 2) AS jul28_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'QQQ') / 1e6, 2) AS jul28_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28') AND ticker = 'NVDA') / 1e6, 2) AS jul28_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-27 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

O fluxo de cotações de ações registrou 536.07 milhões de atualizações de NBBO, contra 553.53 milhões na segunda-feira, uma variação diária de -3.2%. O SPY registrou 4.72 milhões de atualizações, o QQQ 5.94 milhões e a NVDA 3.01 milhões.

QuerySete nomes: spread mediano cotado no RTH em pontos-base, com contagens de qualidade das cotações, 28 de julho
O SQL exato por trás de cada número
SELECT ticker,
       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 IN ('AAPL', 'DIA', 'IWM', 'NVDA', 'QQQ', 'SPY', 'TSLA')
  AND sip_timestamp >= '2026-07-28 13:30:00' AND sip_timestamp < '2026-07-28 20:00:00'
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
ORDER BY ticker
Run this yourself

O spread mediano das cotações do SPY no horário regular mediu 0.27 pontos-base do preço médio; o do QQQ, 0.74; e o da NVDA, 1.52. As duas últimas colunas mostram a divulgação: cotações unilaterais e cruzadas são contabilizadas por ativo e separadas da mediana, em vez de serem descartadas silenciosamente. Uma cotação cruzada, com o bid acima do ask, é um artefato comum de um feed consolidado formado por várias plataformas de negociação com resolução de nanossegundos.

QuerySpread mediano do SPY comparado a todas as sessões de julho, do mais estreito ao mais amplo
O SQL exato por trás de cada número
SELECT round(anyIf(spread_bps, d = toDate('2026-07-28')), 2) AS jul28_median_spread_bps,
       arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-28')), groupArrayIf(spread_bps, d != toDate('2026-07-28'))) + 1 AS rank_tightest,
       count() AS sessions_compared,
       toString(min(d)) AS first_session
FROM (
    SELECT toDate(sip_timestamp) AS d,
           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) AS spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= '2026-07-01 13:30:00' AND sip_timestamp < '2026-07-28 20:00:00'
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
    HAVING countIf(bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price) > 0
)
Run this yourself

Comparado com todas as sessões de julho usando a mesma lógica, o spread mediano do SPY no dia, de 0.27 pontos-base, ficou em 16 de 19, contado a partir do spread mais estreito, em uma janela iniciada em 2026-07-01. Em um fluxo de cotações tranquilo, essa frase é o objetivo do painel: um dia comum para a liquidez é uma constatação publicada e delimitada.

QueryTape de NBBO de opções: total de atualizações vs. tape de ações, mais o recorte da raiz do SPY, 28 de julho
O SQL exato por trás de cada número
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00') AS jul28_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00') AS jul28_stock_quote_rows
SELECT
    round(jul28_options_rows / 1e9, 2) AS jul28_options_bn,
    round(jul28_options_rows / jul28_stock_quote_rows, 1) AS options_to_stock_ratio,
    round((SELECT count() FROM global_markets.cache_options_quotes WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27' AND sip_timestamp >= '2026-07-28 13:30:00' AND sip_timestamp < '2026-07-28 20:00:00') / 1e6, 0) AS jul28_spy_options_m
Run this yourself

O fluxo de NBBO de opções registrou 10.23 bilhões de atualizações, 19.1 vezes o volume do fluxo de cotações de ações, sendo que apenas a raiz do SPY respondeu por 382 milhões de atualizações no horário regular.

Taxas

QueryRegistros da curva do Treasury, de 23 a 28 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
FROM global_markets.treasury_yields
WHERE date >= '2026-07-23' AND date <= '2026-07-28'
ORDER BY date
Run this yourself

O arquivo do Treasury fica cerca de uma sessão atrasado em relação ao mercado. Por isso, este painel mostra os negócios registrados no arquivo: 4 linhas datadas na janela. A mais recente, datada de 2026-07-28, colocou a taxa de dois anos em 4.26%, a de dez anos em 4.61% e a de trinta anos em 5.09%, com um spread de dois a dez anos de 35 pontos-base.

O calendário por trás do dia

QueryEx-dividendos, desdobramentos, listagens, notícias e composição dos filings da SEC de 28 de julho
O SQL exato por trás de cada número
WITH
    (
        SELECT (argMax(t, (n, t)), max(n))
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE published_utc >= '2026-07-28 04:00:00' AND published_utc < '2026-07-29 04:00:00'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news,
    (
        SELECT (count(), uniqExact(cik), countIf(form_type = '4'), countIf(form_type = '8-K'), countIf(form_type = '424B2'), countIf(form_type = '10-Q'))
        FROM global_markets.stocks_sec_edgar_index
        WHERE filing_date = '2026-07-28'
    ) AS fil
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-28') AS ex_dividend_records,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-28') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-28') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-28') AS listings,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-28 04:00:00' AND published_utc < '2026-07-29 04:00:00') AS news_articles,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-28 04:00:00' AND published_utc < '2026-07-29 04:00:00') AS news_publishers,
    top_news.1 AS top_news_ticker,
    top_news.2 AS top_news_n,
    fil.1 AS fil_total,
    fil.2 AS fil_filers,
    fil.3 AS fil_form4,
    fil.4 AS fil_8k,
    fil.5 AS fil_424b2,
    fil.6 AS fil_10q
Run this yourself

147 registros de dividendos passaram a ser negociados ex-dividend em 28 de julho, foram executados 3 reverse splits e 0 forward splits, e 2 novas listagens chegaram ao tape. O feed de notícias trouxe 161 artigos de 2 publishers, com MSFT sendo o ticker mais coberto nessa janela deste feed, em 9 artigos. O índice diário da EDGAR contém 5915 filings da data, enviados por 2898 filers distintos: 856 relatórios de insider Form 4, 315 relatórios correntes 8-K, 900 suplementos de preço 424B2 e 100 relatórios trimestrais 10-Q. Esse índice segue seu próprio cronograma, e este painel informa o conteúdo disponível no momento da geração.

Em pauta

No restante da semana, leia as mesmas tabelas, deliberadamente olhando além do período.

Query29 a 31 de julho no calendário: fechamentos, ex-dividendos, desdobramentos, vencimento de sexta-feira e defasagem do short interest
O SQL exato por trás de cada número
SELECT
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date >= '2026-07-29' AND date <= '2026-07-31' AND status != 'open') AS closures_rest_of_week,
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= '2026-07-29' AND ex_dividend_date <= '2026-07-31') AS exdiv_records_rest_of_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-29' AND ex_dividend_date <= '2026-07-31') AS household_exdivs,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-29' AND execution_date <= '2026-07-31') AS splits_rest_of_week,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260731') / sum(size), 1) AS jul31_expiry_pct_of_tue_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-28') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
Run this yourself

A tabela de feriados mostra 0 fechamentos na quarta-feira, 29 de julho, na quinta-feira, 30 de julho, e na sexta-feira, 31 de julho. 696 registros de dividendos ficam ex-dividend nessas três sessões; 0 deles estão entre dez empresas conhecidas do setor de consumo analisadas, e 15 desdobramentos estão programados para ser executados. Do volume de opções de terça-feira, 17.5% já estava em contratos com vencimento na sexta-feira, 31 de julho. A liquidação mais recente de posições vendidas a descoberto disponível nos arquivos é 2026-07-15, um arquivo divulgado com atraso suficiente para ter seu próprio explicador.

A sessão, verificada

QueryVerificação da sessão: primeira/última barra do SPY em ET, contagem de barras regulares, registros de feriado, próximo fechamento
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,
    countIf(window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-28') AS jul28_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-28' 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-28' 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-28 00:00:00' AND window_start < '2026-07-29 00:00:00'
Run this yourself

Uma sessão regular completa: primeiro candle do SPY às 04:00 ET, último às 19:59 ET, 390 candles no horário regular, 1 sessão na janela e 0 linhas de feriado para a data. O próximo fechamento programado é Labor Day em 2026-09-07.

Perguntas frequentes

Como o mercado acionário se comportou na terça-feira, 28 de julho de 2026?

O SPY variou 0.24% no fechamento contra o fechamento anterior, para US$740.76, com o QQQ em -0.96%, o DIA em 1.07% e o IWM em 0.15%. Entre os papéis com alta liquidez, 3519 subiu e 2423 caiu.

Qual setor liderou o pregão em 28 de julho de 2026?

Health Care, em 2.36%, considerando os onze fundos setoriais selecionados da SPDR. O pior desempenho entre os onze foi de Technology, que registrou -1.9%.

Qual foi o nível de atividade do mercado de opções em 28 de julho de 2026?

Foram negociados 59.28 milhões de contratos, ante 64.69 milhões no pregão anterior. Os contratos com vencimento no mesmo dia representaram 29% do volume, e as calls, 55%.

Qual ação movimentou o maior volume financeiro em 28 de julho de 2026?

MU, com volume financeiro de 39.21 bilhões no horário regular, à frente de QQQ, com 29.98 bilhões.

Notas sobre os dados

Esta edição preenche a lacuna de 28 de julho na série diária: o diário de 27 de julho cobre o pregão anterior, o diário de 29 de julho cobre o pregão seguinte, e o resumo semanal abrange a semana anterior aos dois. Os painéis identificados por ticker são ordenados alfabeticamente, para que as referências no texto apontem para linhas fixas; as classificações e as tabelas de maiores variações são ordenadas por valor, e toda afirmação de posição nelas é codificada como um limite de verificação. A cesta de mega caps e a cesta setorial de eleven fundos são conjuntos definidos e fixos, não classificações de fornecedores. As tabelas de maiores variações aplicam um limite de turnover de cinco milhões de dólares no horário regular, excluem qualquer ativo cujo desdobramento tenha sido executado entre os dois fechamentos medidos e excluem um símbolo reutilizado sob a regra interna de ambiguidade, para que cada destaque recaia sobre um nome verificável. Os painéis de cotações contabilizam cotações unilaterais e cruzadas por ativo, em vez de descartá-las silenciosamente. O arquivo do Treasury e o índice diário da EDGAR chegam em cronogramas próprios; por isso, esses painéis informam o que contêm, sem presumir que os dados já tenham chegado. Não há nenhum índice de volatilidade implícita aqui: essas séries não são licenciadas para este warehouse, portanto a volatilidade é observada no tape por meio das amplitudes, da participação das opções no mesmo dia e do comportamento das cotações.

Metodologia

  • Fonte dos dados de mercado: fita consolidada. delayed_stocks_minute_aggs para preços e volumes, options_trades para a fita de opções, cache_stocks_quotes e cache_options_quotes para os painéis de NBBO.
  • Fechamento: a barra de um minuto da última minuto da sessão regular, nunca um print presumido das 16h e nunca um print do horário estendido.
  • Tratamento do fuso horário: todos os timestamps armazenados estão em UTC; as cláusulas WHERE usam literais UTC brutos, e toTimeZone aparece apenas nas listas SELECT para rótulos em ET.
  • Verificação da sessão: feita a partir da tabela de feriados e das barras observadas, nunca presumida com base no calendário.
  • Comparações com a sessão anterior: calculadas na própria query a partir de 27 de julho, nunca reaproveitadas de uma publicação anterior.
  • Casas decimais: as colunas de preço, tamanho e volume são convertidas para Float64 antes de qualquer divisão ou produto.
  • Agregações determinísticas: quantis exatos e critérios de desempate baseados em chaves de tupla em toda a análise; toda afirmação de ordenação ou sinal no texto é codificada como um limite de consistência.
  • Data de referência do data warehouse: 1º de agosto de 2026, quatro dias após a sessão, além do atraso usual de ingestão da fita, de um a dois dias; os comprovantes delimitados acima mantêm a publicação disponível se algum dataset for identificado como ausente no momento da geração.

Links cruzados: o resumo diário de 27 de julho, o resumo diário de 29 de julho, quando as opções vencem, o que é um bid-ask spread e o spread de dois a dez anos.

Todas as queries acima são executadas sem alterações no terminal Strasmore se você quiser redirecionar uma janela para outra sessão.