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

Resumo do mercado em 29 de julho de 2026

O dia em números: placar dos índices, breadth, spread setorial, fluxo de opções, cotações, juros e calendário, com dados baseados em consultas armazenadas.

Este resumo de mercado da quarta-feira, 29 de julho de 2026, lê toda a sessão a partir de consultas armazenadas: a variação do SPY no fechamento em relação ao fechamento anterior foi de -1.52%, a participação das ações em alta no mercado líquido foi de 27.2%, e o mercado de opções registrou 66.84 milhões de contratos. Cada janela abaixo está vinculada a datas explícitas nos dois extremos. Assim, executar novamente o SQL de qualquer painel retorna os mesmos números.

O placar

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

QuerySPY / QQQ / DIA / IWM: 29 de julho vs fechamento de 28 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-28 13:30:00' AND window_start < '2026-07-28 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-29 13:30:00' AND window_start < '2026-07-29 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

DIA variou -2.19%, IWM -1.63%, QQQ -2.07% e SPY -1.52%, fechando a $729.51. Cada linha divide a variação em duas etapas: SPY abriu -0.11% em relação ao fechamento de terça-feira e variou -1.41% da abertura ao fechamento. A etapa overnight e a etapa intradiária não precisam coincidir, e essa divisão é a primeira impressão digital da sessão.

O dia foi incomum?

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

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

A variação de abertura ao fechamento do SPY, de -1.41%, ficou em 1 entre 22 sessões móveis, por magnitude absoluta, em uma janela que remonta a 2026-06-29. A classificação conta quantas outras sessões na janela tiveram uma variação maior e soma um. Assim, o primeiro lugar corresponderia à maior variação do mês móvel.

Amplitude de mercado

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

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

Entre 6066 ações que superaram o limite de um milhão de dólares em volume financeiro no horário regular, 1652 fecharam acima do fechamento de terça-feira e 4342 fecharam abaixo, o que representa uma participação de altas de 27.2%. O filtro deixou de fora 5363 ações com menor liquidez, contabilizadas aqui em vez de serem descartadas silenciosamente.

A prateleira das mega caps

Os mesmos oito nomes de mega caps aparecem aqui em todas as sessões, em ordem alfabética, para que cada um mantenha sua linha. O objetivo é ter uma cesta fixa: o leitor aprende as linhas, e nenhuma escolha editorial seleciona vencedores depois do fato.

QueryOito megacaps: variação vs 28 de julho e dólares no horário regular, 29 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-29 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-29 00:00:00')) AS day_close,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 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-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
        OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 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

A AAPL variou -0.63%, a META -1.12%, a MSFT -0.27% e a NVDA -3.51%, com 22.26 bilhões de dólares em volume negociado no horário regular. A TSLA ficou em -2.97%. A coluna em dólares mostra quanto do fluxo esses oito nomes concentram por conta própria; o painel de amplitude acima verifica até que ponto o restante do mercado acompanhou esse movimento.

As ações que mais se movimentaram no dia

Ambos os painéis exigem cinco milhões de dólares em volume negociado no horário regular, excluem qualquer ativo cujo desdobramento tenha sido efetivado entre os dois fechamentos considerados e excluem um ticker reutilizado sob a regra interna de ambiguidade descrita nas notas.

QueryMaiores altas e baixas: fechamento de 29 de julho vs fechamento de 28 de julho, US$ 5M+ 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((c29 / c28 - 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-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 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-28' AND execution_date <= '2026-07-29')
          AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0 AND dv >= 5000000
    )
    ORDER BY day_pct DESC
    LIMIT 8
    UNION ALL
    SELECT 'decliners' AS board, ticker, round((c29 / c28 - 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-28 13:30:00' AND window_start < '2026-07-28 20:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS c29,
               sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-29 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-28' AND execution_date <= '2026-07-29')
          AND window_start >= '2026-07-28 13:30:00' AND window_start < '2026-07-29 20:00:00'
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 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 foi de DFNS, que avançou 119.8% com 544.9 milhões de dólares negociados. A maior queda foi de YYAI, que registrou -68.1% com 8.5 milhões de dólares. Esta página registra os tamanhos e os comprovantes das operações. Não atribui nenhuma explicação a esses movimentos.

Dispersão entre setores

Os onze fundos SPDR de setores selecionados, pelo fechamento de 29 de julho em relação ao de 28 de julho, classificados do melhor ao pior. A cesta é definida e fixa, não uma classificação de fornecedor.

QueryETFs setoriais, fechamento de 29 de julho vs fechamento de 28 de julho, ordenados
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((c29 / c28 - 1) * 100, 2) AS day_pct
    FROM (
        SELECT ticker,
               argMaxIf(toFloat64(close), window_start, window_start < '2026-07-29 00:00:00') AS c28,
               argMaxIf(toFloat64(close), window_start, window_start >= '2026-07-29 00:00:00') AS c29
        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-28 13:30:00' AND window_start < '2026-07-28 20:00:00')
            OR (window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00'))
        GROUP BY ticker
        HAVING c28 > 0 AND c29 > 0
    )
)
ORDER BY day_pct DESC
Run this yourself

Energy liderou a lista, com 1.89%, enquanto Industrials ficou na última posição, 5.1 pontos percentuais atrás, em -3.21%. Esse spread representa a dispersão setorial do dia: um pregão em que os onze ativos ficam dentro de um ponto percentual é muito diferente de outro em que a diferença se estende 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 29 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-29 13:30:00' AND window_start < '2026-07-29 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-29 13:30:00' AND window_start < '2026-07-29 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 44.99 bilhões de giro no horário regular, seguido por SPY, com 42.29 bilhões. O ranking por ações responde a uma pergunta diferente: SNXX ficou no topo, com 173.4 milhões de ações e um preço médio implícito de US$7.32. 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 métrica por ativo é o volume relativo.

O fluxo de opções

QueryTape de opções: contratos, participação de calls, participação no mesmo dia vs terça-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) = '260729', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 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-29 13:30:00' AND window_start < '2026-07-29 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
    ) AS jul28_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260728') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-29 00:00:00'
    ) AS jul28_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul28_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) = '260729') / sum(size), 1) AS pct_0dte,
    jul28_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-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

O fluxo de opções registrou 11.03 milhões de negócios, referentes a 66.84 milhões de contratos, ante 59.28 milhões na terça-feira. As calls responderam por 53.6% do volume de contratos. Os contratos com vencimento na mesma sessão, o grupo de opções com vencimento no mesmo dia, responderam por 33.1%, ante 29% na terça-feira. Esse ritmo é definido pelo momento do vencimento. O contrato mais negociado de SPY foi o 735 P, com 0.36 milhões de contratos. Seu strike estava 5.49 dólares distante do fechamento regular de SPY, a US$729.51. A distância é calculada como strike menos fechamento.

A fita 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: 29 de julho vs 28 de julho, com atualizações por ticker (milhões)
O SQL exato por trás de cada número
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / 1e6, 2) AS jul29_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-28')) / 1e6, 2) AS jul28_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-29')) / countIf(toDate(sip_timestamp) = toDate('2026-07-28')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'SPY') / 1e6, 2) AS jul29_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'QQQ') / 1e6, 2) AS jul29_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-29') AND ticker = 'NVDA') / 1e6, 2) AS jul29_nvda_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-28 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

A fita de cotações das ações registrou 722.65 milhões de atualizações de NBBO, contra 536.07 milhões na terça-feira, uma variação diária de 34.8%. A SPY registrou 7.32 milhões de atualizações, a QQQ 8.72 milhões e a NVDA 4.41 milhões.

QuerySete nomes: spread mediano cotado no RTH em pontos-base, com contagens de qualidade das cotações, 29 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-29 13:30:00' AND sip_timestamp < '2026-07-29 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 da SPY no horário regular mediu 0.27 pontos-base do ponto médio; o da QQQ, 0.75; e o da NVDA, 1.55. 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 a partir de muitas plataformas de negociação com resolução de nanossegundos.

QuerySpread mediano do SPY classificado contra 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-29')), 2) AS jul29_median_spread_bps,
       arrayCount(x -> x < anyIf(spread_bps, d = toDate('2026-07-29')), groupArrayIf(spread_bps, d != toDate('2026-07-29'))) + 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-29 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 metodologia, o spread mediano da SPY no dia, de 0.27 pontos-base, ficou em 20 de 20, contado a partir do menor, em uma janela iniciada em 2026-07-01. Em uma fita tranquila, esse é o ponto do painel: um dia comum de 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 do root SPY, 29 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-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00') AS jul29_stock_quote_rows
SELECT
    round(jul29_options_rows / 1e9, 2) AS jul29_options_bn,
    round(jul29_options_rows / jul29_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-29 13:30:00' AND sip_timestamp < '2026-07-29 20:00:00') / 1e6, 0) AS jul29_spy_options_m
Run this yourself

A fita de NBBO das opções registrou 13.55 bilhões de atualizações, 18.8 vezes o volume da fita de cotações das ações, sendo que apenas a raiz da SPY respondeu por 600 milhões de atualizações no horário regular.

Taxas

QueryRegistros da curva de Treasuries, de 24 a 29 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-24' AND date <= '2026-07-29'
ORDER BY date
Run this yourself

O arquivo do Treasury fica cerca de uma sessão atrás do mercado, portanto este painel mostra as negociações registradas: linhas datadas 4 na janela. A mais recente, datada de 2026-07-29, indicou a taxa de dois anos em 4.22%, a de dez anos em 4.67% e a de trinta anos em 5.2%, com um spread entre dois e dez anos de 45 pontos-base.

O calendário por trás do dia

QueryEx-dividendos, desdobramentos, listagens, notícias e composição dos filings da SEC de 29 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-29 04:00:00' AND published_utc < '2026-07-30 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-29'
    ) AS fil
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-29') AS ex_dividend_records,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-29') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-29') AS listings,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 04:00:00') AS news_articles,
    (SELECT uniqExact(JSONExtractString(publisher, 'name')) FROM global_markets.stocks_news WHERE published_utc >= '2026-07-29 04:00:00' AND published_utc < '2026-07-30 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

85 registros de dividendos foram ex-dividend em 29 de julho; 2 reverse splits e 1 forward splits foram executados, e 1 novas listagens chegaram ao tape. O feed de notícias trouxe 190 artigos de 2 publishers, com NVDA o ticker mais coberto nessa janela deste feed em 13 artigos. O índice diário da EDGAR reúne 5742 filings da data, enviados por 3064 filers distintos: 712 relatórios de insiders no Formulário 4, 440 relatórios correntes 8-K, 884 suplementos de preços 424B2 e 174 relatórios trimestrais 10-Q. Esse índice segue seu próprio cronograma, e este painel informa o que estiver disponível no momento da geração.

Em pauta

Para o restante da semana, consulte as mesmas tabelas, deliberadamente olhando além do período.

Query29 e 30 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-30' 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-30' 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-30' AND ex_dividend_date <= '2026-07-31') AS household_exdivs,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= '2026-07-30' 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_wed_volume,
    (SELECT toString(max(settlement_date)) FROM global_markets.stocks_short_interest WHERE settlement_date <= '2026-07-29') AS latest_short_interest_settlement
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-29 00:00:00' AND sip_timestamp < '2026-07-30 00:00:00'
Run this yourself

A tabela de feriados mostra 0 fechamentos na quinta-feira, 30 de julho, e na sexta-feira, 31 de julho. 611 registros de dividendos ficam ex-dividend nessas duas sessões, 0 deles entre dez empresas conhecidas do setor de consumo analisadas, e 12 desdobramentos estão programados para ocorrer. Do volume de opções de quarta-feira, 19.7% já estava concentrado em contratos com vencimento na sexta-feira, 31 de julho. O dado mais recente de posições vendidas disponível é 2026-07-15, publicado com um atraso suficiente para ter seu próprio explicativo.

A sessão, verificada

QueryVerificação da sessão: primeira/última barra do SPY no horário 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-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-29 13:30:00' AND window_start < '2026-07-29 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-29') AS jul29_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-29' 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-29' 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-29 00:00:00' AND window_start < '2026-07-30 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 feriados para a data. O próximo fechamento programado é Labor Day, em 2026-09-07.

Perguntas frequentes

Como foi o desempenho do mercado acionário na quarta-feira, 29 de julho de 2026?

O SPY variou -1.52% no fechamento contra o fechamento anterior, para US$729.51, enquanto o QQQ ficou em -2.07%, o DIA em -2.19% e o IWM em -1.63%. Entre os ativos líquidos, 1652 subiu e 4342 caiu.

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

Energy, com 1.89%, considerando os onze fundos SPDR de setores selecionados. O pior desempenho entre os onze foi de Industrials, que registrou -3.21%.

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

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

Qual ação movimentou mais dólares em 29 de julho de 2026?

MU, com 44.99 bilhões em volume financeiro no horário regular, à frente de SPY, com 42.29 bilhões.

Notas sobre os dados

Esta edição retoma a série diária; a edição diária anterior é 10 de julho de 2026, e o resumo semanal cobre a semana anterior a esta. Os painéis nomeados por ticker são ordenados alfabeticamente, para que as referências no texto apontem para linhas fixas; os rankings e painéis de maiores altas e baixas são ordenados por valor, e toda afirmação de posição neles é codificada como um limite de verificação. A cesta de megacaps e a cesta setorial de onze fundos são conjuntos definidos e fixos, não classificações de provedores. Os painéis de maiores altas e baixas aplicam um limite de giro de cinco milhões de dólares no horário regular, excluem qualquer ativo cujo desdobramento tenha sido executado entre os dois fechamentos que medem e excluem um símbolo reutilizado pelo filtro interno de ambiguidade, para que toda menção recaia sobre um nome verificável. Os painéis de cotações contabilizam cotações unilaterais e cruzadas por nome, em vez de descartá-las silenciosamente. O arquivo do Treasury e o índice diário da EDGAR são divulgados em seus próprios cronogramas; por isso, esses painéis informam o que receberam, sem presumir que os dados tenham chegado. Nenhum índice de volatilidade implícita aparece aqui: essas séries não são licenciadas para este warehouse, portanto a volatilidade é extraída do 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: consolidated tape. delayed_stocks_minute_aggs para preços e volumes, options_trades para o options tape, cache_stocks_quotes e cache_options_quotes para os painéis de NBBO.
  • Fechamento: o último candle de um minuto do pregão regular. Nunca um print presumido às 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 os rótulos em ET.
  • Verificação do pregão: feita a partir da tabela de feriados e dos candles observados. Nunca presumida com base no calendário.
  • Comparações com o pregão anterior: calculadas na própria query a partir de 28 de julho. Nunca reaproveitadas de uma publicação anterior.
  • Casas decimais: as colunas de preço, quantidade 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 por chave de tupla em toda a análise; toda afirmação de ordem ou sinal no texto é codificada como um limite de consistência.
  • Data de referência do warehouse: 1º de agosto de 2026, três dias após o pregão, além do atraso normal de ingestão do tape, de um a dois dias; os comprovantes delimitados acima mantêm a publicação disponível caso algum dataset não seja encontrado durante a geração.

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

Todas as queries acima são executadas sem alterações no terminal Strasmore, caso você queira redirecionar uma janela para outro pregão.