Strasmore Research
Recaps de mercado Matt ConnorPor Matt Connor · Atualizado 2026-07-23

Resumo do mercado em 7 de julho de 2026

Semicondutores caem forte e impactam o índice, enquanto NVDA resiste. O SPY apresenta o menor spread do mês e o mercado fecha com dois para um de queda.

Terça-feira, 7 de julho de 2026, anulou o crescimento da alta de abertura de segunda-feira — e foi além: o QQQ fechou em -1.82%, apagando quase todo o ganho de segunda-feira, frente ao -0.29% do DIA. No detalhe, o mercado registrou dois-para-um de queda: 4034 ações em queda contra 2091 ações em alta. O ponto central do dia foi uma queda no setor de semicondutores, várias vezes maior que o índice — um movimento do qual as gigantes do setor não participaram. Todos os números abaixo são extraídos de uma consulta armazenada — expanda qualquer painel para ver o SQL exato.

O placar

Cada variação compara o último minuto da sessão regular de 7 de julho com o de segunda-feira, 6 de julho — sessões de negociação consecutivas.

QuerySPY / QQQ / DIA / IWM — 7 de julho vs fechamento de 6 de julho, regular hours
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-06 13:30:00' AND window_start < '2026-07-06 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-07 13:30:00' AND window_start < '2026-07-07 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 AS shares_traded_m
FROM sess s
JOIN prior p ON s.ticker = p.ticker
ORDER BY s.ticker

O -1.82% do QQQ liderou a queda dos quatro ETFs de índice; o SPY fechou -0.48%, o IWM -0.9%, e o -0.29% do DIA foi a variação mais leve. A divergência entre o gap e o movimento contínuo (grind) mostra os dois extremos do mercado em desacordo na abertura: o gap noturno do QQQ foi de -1.17% e seu movimento de abertura ao fechamento foi de -0.65% — o gap causou a maior parte da queda — enquanto o DIA teve um gap de alta de 0.47% e ainda assim fechou no vermelho, com seu movimento de abertura ao fechamento registrando -0.76%. A liderança mudou em todas as sessões desde quinta-feira: o DIA liderou na quinta-feira, o QQQ liderou na segunda-feira, e o DIA liderou novamente na terça-feira.

O dia foi atípico?

QueryQQQ e SPY: 7 de julho em ranking contra o mês anterior (rank 1 = maior variação absoluta)
O SQL exato por trás de cada número
SELECT
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-07')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-07'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-07'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ') AS qqq_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-07')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-07'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-07'))) + 1 AS spy_abs_move_rank,
    countIf(ticker = 'SPY') AS spy_sessions_compared,
    toString(min(d)) AS first_session
FROM (
    SELECT ticker, d,
           (close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY d) - 1) * 100 AS cc_pct,
           oc_pct
    FROM (
        SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
               argMax(toFloat64(close), window_start) AS close_px,
               (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS oc_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker IN ('SPY', 'QQQ')
          AND window_start >= toDateTime('2026-06-04 00:00:00')
          AND window_start < toDateTime('2026-07-08 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, d
    )
)
WHERE isFinite(cc_pct)

No nível dos índices, não especialmente. A variação de fechamento sobre fechamento do QQQ de -1.82% ocupa a posição 9 de 21 sessões anteriores em tamanho absoluto, e a variação de abertura para fechamento do SPY de -0.34% ocupa a posição 15 de 21 — um mês anterior que inclui as oscilações complexas do final de junho estabelece um patamar elevado. A dispersão interna é onde o dia 7 de julho se destacou.

Amplitude: dois caindo para cada um subindo

QueryAdvancers vs decliners entre tickers com pelo menos $1M negociados em 7 de julho
O SQL exato por trás de cada número
WITH per_ticker AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-07 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close,
        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') AS day_dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
       OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
    GROUP BY ticker
)
SELECT
    countIf(day_close > prior_close AND day_dollar_volume >= 1000000) AS advancers,
    countIf(day_close < prior_close AND day_dollar_volume >= 1000000) AS decliners,
    countIf(day_close = prior_close AND day_dollar_volume >= 1000000) AS unchanged,
    countIf(day_dollar_volume >= 1000000) AS liquid_tickers,
    count() AS tickers_traded_both_sessions,
    count() - countIf(day_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(day_close > prior_close AND day_dollar_volume >= 1000000)
        / countIf(day_dollar_volume >= 1000000), 1) AS advancer_pct
FROM per_ticker
WHERE prior_close > 0 AND day_close > 0

2091 altas, 4034 baixas, 59 estáveis — 33.8% do volume líquido subiu, o fechamento positivo de segunda-feira se inverteu. O filtro exclui 5276 de 11460 tickers com volume de duas sessões abaixo de US$ um milhão negociados aqui.

O setor de chips quebrou — exceto por seus maiores nomes

As vendas se concentraram em semicondutores: fabricantes de chips, empresas de equipamentos que os fornecem, o ecossistema de armazenamento e os ETFs alavancados sobre eles. O movimento conjunto e a magnitude estão detalhados abaixo; os dados não indicam a causa.

QueryO setor de chips em 7 de julho: variação vs fechamento de segunda, range timing e dollar volume
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-07 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-07 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-07 00:00:00') AS day_low,
        argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-07 00:00:00') AS low_bar,
        argMaxIf(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-07 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AMD', 'AVGO', 'INTC', 'KLAC', 'LRCX', 'MRVL', 'MU', 'NVDA', 'SNDK', 'SOXL', 'SOXS', 'STX', 'TER', 'WDC')
      AND ((window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
        OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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,
    formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
    formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
    toHour(toTimeZone(high_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(high_bar, 'America/New_York')) AS high_minute_et,
    toHour(toTimeZone(low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(low_bar, 'America/New_York')) AS low_minute_et,
    round((day_high / day_low - 1) * 100, 2) AS range_pct,
    day_dollar_bn
FROM per_name
ORDER BY ticker

Teradyne (-9.63%) e Intel (-9.59%) perderam quase um décimo de seu valor, com Marvell (-7.41%), KLA (-7.23%), Lam Research (-6.8%) e AMD (-6.41%) logo em seguida. As empresas de memória e armazenamento que recuperaram metade na segunda-feira voltaram a cair: SanDisk -7.1% em um intervalo de 10.36% entre máxima e mínima, Western Digital -7.81%, Seagate -4.84% e MU -4.61% — com a MU movimentando $41.6 bilhões em ações, mais do que as outras três empresas de armazenamento somadas (a análise detalhada da MU traz o contexto).

As duas gigantes do setor não foram afetadas: NVDA fechou no verde em 0.67% e Broadcom terminou estável em -0.83% — um dia de queda para todo o setor, exceto para seus maiores membros (a análise detalhada da NVDA de junho).

O timing foi sincronizado — um vácuo de liquidez matinal: TER, LRCX e MU registraram suas mínimas da sessão às 10:41, 10:41 e 10:41 ET, com SanDisk, Marvell, KLA, AVGO e SOXL dentro dos mesmos minutos (o painel contém cada registro), e o SOXS, o ETF inverso de semicondutores de 3x, registrou sua máxima da sessão em 10:42 — o movimento oposto. A Intel continuou caindo muito depois de o restante estabilizar, atingindo sua mínima em 15:18. Os produtos alavancados refletem a magnitude: SOXL -15.15% contra SOXS +15.87%.

O outro lado do tape

Uma proporção de dois-para-um no vermelho ainda mantém um terceiro em verde. O que subiu enquanto os semicondutores caíram:

QueryO que subiu enquanto os chips caíram — e o maior print individual do dia
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-07 00:00:00')) AS prior_close_raw,
        toFloat64(argMinIf(open, window_start, window_start >= '2026-07-07 00:00:00')) AS day_open_raw,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 00:00:00')) AS day_close_raw,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 00:00:00') / 1e9, 2) AS day_dollar_bn
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('CRNX', 'CVX', 'JNJ', 'LLY', 'META', 'TSLA', 'UNH', 'XOM')
      AND ((window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')
        OR (window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'))
    GROUP BY ticker
)
SELECT
    ticker,
    round(prior_close_raw, 2) AS prior_close,
    round(day_open_raw, 2) AS day_open,
    round(day_close_raw, 2) AS day_close,
    round((day_open_raw / prior_close_raw - 1) * 100, 2) AS gap_pct,
    round((day_close_raw / day_open_raw - 1) * 100, 2) AS intraday_pct,
    round((day_close_raw / prior_close_raw - 1) * 100, 2) AS pct_chg,
    day_dollar_bn
FROM per_name
ORDER BY ticker

Energia e saúde lideraram a coluna verde: Exxon +3.78%, Chevron +3.47%, Johnson & Johnson +3.07%, Eli Lilly +2.75%, UnitedHealth +2.41%. As duas megacaps deste painel divergiram: META subiu +2.52% enquanto a TSLA devolveu a maior parte da subida unilateral de segunda-feira com -4.02%. E o maior destaque individual no tape: Crinetics Pharmaceuticals (CRNX) fechou +98.79% com $4.19 bilhão negociados, quase dobrando — todo o movimento ocorreu via gap no overnight (98.91% na abertura; a sessão regular moveu apenas -0.06%), o tipo de repricing entre sessões que acontece onde ocorrem os trades no pre-market. Os dados não explicam o motivo.

Onde o dinheiro foi negociado

QueryLíderes de volume: top 6 por dollars negociados, top 4 por shares negociadas (um símbolo duplicado excluído para verificação)
O SQL exato por trás de cada número
SELECT leaderboard, ticker, dollar_volume_bn, shares_m,
    round(100 * if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)
        / max(if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m)) OVER (PARTITION BY leaderboard), 1) AS pct_of_board_leader
FROM (
    SELECT
        'by dollars traded' AS leaderboard,
        ticker,
        round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 2) AS dollar_volume_bn,
        round(sum(toFloat64(volume)) / 1e6, 1) AS shares_m
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 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-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard ASC, if(leaderboard = 'by dollars traded', dollar_volume_bn, shares_m) DESC

MU liderou o volume do dólar com $41.6 bilhões — uma sessão após perder o primeiro lugar, retomou a posição — com SPY ($28.68 bilhões) e QQQ ($26.54 bilhões) logo atrás, e mais três nomes do setor de semicondutores — NVDA ($19.95 bilhões), SNDK ($19.73 bilhões) e INTC ($13.82 bilhões) — completando o top seis. O volume concentrado em ações individuais é o que o volume relativo sinaliza.

No painel de ações, SOXS negociou 566.3 milhões de ações — o ETF de semicondutores inverso de 3x lidera a contagem pela terceira sessão consecutiva (segunda-feira e quinta-feira registram os dados anteriores), desta vez no dia em que seu setor teve uma queda. CPOP é o exemplo oposto: 161.3 milhões de ações movimentaram apenas $0.02 bilhões — o número de ações é menor em ações baratas. Base: horário regular de 7 de julho; uma listagem de símbolo reutilizado foi excluída aguardando verificação da entidade — seus comprovantes.

O formato da sessão

QueryShares negociadas por bucket de 30 minutos, regular hours (bilhões)
O SQL exato por trás de cada número
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(sum(toFloat64(volume)) / 1e9, 2) AS shares_bn,
    round(100 * sum(toFloat64(volume)) / max(sum(toFloat64(volume))) OVER (), 1) AS pct_of_biggest_bucket
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY et_time
ORDER BY et_time

2 bilhões de ações na primeira meia hora, um vale de 0.64 bilhões em 13:30, e 2.14 bilhões no fechamento de 15:30 — o padrão comum de sorriso, com maior volume no fechamento.

O tape de opções

QueryResumo do dia de options: volume, call share, 0DTE e os dois contratos que cercaram o fechamento do SPY
O SQL exato por trás de cada número
WITH
    (
        SELECT (groupArray(und), groupArray(strike), groupArray(typ), groupArray(vol), groupArray(avg_px), groupArray(is_0dte))
        FROM (
            SELECT any(underlying_symbol) AS und, any(toFloat64(strike_price)) AS strike, any(option_type) AS typ,
                   sum(size) AS vol, round(avg(toFloat64(price)), 3) AS avg_px,
                   if(substring(ticker, length(ticker) - 14, 6) = '260707', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
            GROUP BY ticker
            ORDER BY vol DESC
            LIMIT 2
        )
    ) AS top2,
    (
        SELECT round(toFloat64(argMax(close, window_start)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
    ) AS spy_regular_close
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    round(100.0 * sumIf(size, option_type = 'C') / sum(size), 1) AS call_pct_of_volume,
    round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707') / sum(size), 1) AS same_day_expiry_pct,
    round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707')) / 1e6, 2) AS same_day_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'SPY')) / 1e6, 2) AS spy_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'QQQ')) / 1e6, 2) AS qqq_contracts_m,
    round(toFloat64(sumIf(size, underlying_symbol = 'INTC')) / 1e6, 2) AS intc_contracts_m,
    top2.1[1] AS top_contract_underlying,
    top2.2[1] AS top_contract_strike,
    top2.3[1] AS top_contract_type,
    if(top2.3[1] = 'C', 1, 0) AS top_contract_is_call,
    top2.4[1] AS top_contract_volume,
    top2.5[1] AS top_contract_avg_price,
    round(top2.2[1] - spy_regular_close, 2) AS top_strike_minus_spy_close,
    top2.1[2] AS second_contract_underlying,
    top2.2[2] AS second_contract_strike,
    top2.3[2] AS second_contract_type,
    if(top2.3[2] = 'P', 1, 0) AS second_contract_is_put,
    top2.4[2] AS second_contract_volume,
    top2.5[2] AS second_contract_avg_price,
    round(spy_regular_close - top2.2[2], 2) AS spy_close_minus_second_strike,
    top2.6[1] + top2.6[2] AS both_top_contracts_same_day,
    spy_regular_close AS spy_close
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'

Foram negociados 61.13 milhões de contratos de opções em 10.6 milhões de registros — um volume similar ao de segunda-feira — e as calls ainda representaram 55.6% do volume em um dia de queda. As opções com vencimento no mesmo dia foram 31.2% do total (19.08 milhões de contratos) — a fatia de 0DTE de uma terça-feira comum. Os dois contratos mais negociados do dia cercaram o fechamento, ambos com strikes de vencimento no mesmo dia em SPY: a call de $749 (873438 contratos a uma média de $0.647) terminou $1.34 out of the money, e a put de $747 (785834 contratos a $0.88) terminou $0.66 do outro lado. O fechamento do SPY em 747.66 ficou entre as duas maiores apostas do dia, e ambas expiraram sem valor.

O fluxo de cotações

Abaixo de cada preço nesta página está o fluxo de cotações — o National Best Bid and Offer (NBBO), reajustado continuamente para cada ativo listado, o conjunto de dados mais difícil de obter neste armazém. Ele é medido aqui em cada sessão, seja ela comum ou não.

QueryFluxo NBBO de equities: contagens de updates de 7 de julho vs 6 de julho
O SQL exato por trás de cada número
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / 1e6, 2) AS jul7_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-06')) / 1e6, 2) AS jul6_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / countIf(toDate(sip_timestamp) = toDate('2026-07-06')) - 1) * 100, 1) AS day_over_day_pct,
    toHour(toTimeZone(maxIf(sip_timestamp, toDate(sip_timestamp) = toDate('2026-07-07')), 'America/New_York')) * 60
        + toMinute(toTimeZone(maxIf(sip_timestamp, toDate(sip_timestamp) = toDate('2026-07-07')), 'America/New_York')) AS jul7_last_quote_et_minute,
    round(countIf(sip_timestamp >= '2026-07-07 19:00:00' AND sip_timestamp < '2026-07-07 20:00:00') / 1e6, 2) AS jul7_close_hour_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'

O tape de ações registrou 492.76 milhões de atualizações de NBBO em 7 de julho — 25.7% a mais do que os 391.96 milhões de segunda-feira. Houve mais reajustes de cotação, não maior amplitude de spread:

QueryO touch no air pocket: median quoted spread e quote rate, 10:36–10:48 ET vs controle de midday (12 min cada)
O SQL exato por trás de cada número
SELECT
    ticker,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00'), 2) AS pocket_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 2) AS midday_spread_bps,
    round(quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00')
        - quantileExactIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, bid_price > 0 AND ask_price >= bid_price AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 2) AS spread_delta_bps,
    round(countIf(sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / 1e3, 1) AS pocket_updates_k,
    round(countIf(sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00') / 1e3, 1) AS midday_updates_k,
    round(countIf(sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / countIf(sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 1) AS quote_rate_ratio,
    round(count() / 1e6, 2) AS session_updates_m,
    countIf(bid_price <= 0 OR ask_price <= 0 OR bid_price > ask_price) AS dropped_invalid_quotes
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AMD', 'INTC', 'MU', 'NVDA', 'QQQ', 'SNDK', 'SOXL', 'SOXS', 'SPY', 'WDC')
  AND sip_timestamp >= '2026-07-07 13:30:00' AND sip_timestamp < '2026-07-07 20:00:00'
GROUP BY ticker
ORDER BY ticker

Nas mínimas da manhã, as ações analisadas reajustaram suas cotações em múltiplos de seu ritmo de meio-dia — MU 3.4x, SanDisk 4.1x, AMD 4.6x — e o bid-ask spread mal se moveu: a mediana de largura da MU foi de 5.02 bps no período de baixa contra 4.81 no meio-dia, a da NVDA foi de 1.04 contra 1.01, e a do SPY não se moveu (variação de 0 bps em um toque de 0.27 bps). Os dois ativos que sofreram uma penalidade real de largura foram AMD (+2.6 bps) e Intel (+0.95) — sendo a Intel o único ativo que continuou caindo após o período de baixa — enquanto o par alavancado na verdade estreitou no fundo (SOXL -2.59 bps, SOXS -1.49). Um vácuo de liquidez manifesta-se como cotações largas e silêncio; este foi o oposto — uma tempestade de cotações com o toque (touch) travado. Os custos de execução continuaram dependentes de cada ativo: o SOXS cotou 19.59 bps de largura no fundo contra os 1.04 da NVDA.

QuerySPY's update-weighted average quoted spread: 7 de julho em ranking contra o mês anterior (rank 1 = mais apertado)
O SQL exato por trás de cada número
SELECT
    round(anyIf(avg_spread_cents, d = toDate('2026-07-07')), 3) AS jul7_avg_spread_cents,
    arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-07')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-07'))) + 1 AS tightness_rank,
    count() AS sessions_compared,
    round(min(avg_spread_cents), 3) AS tightest_session_cents,
    round(max(avg_spread_cents), 3) AS widest_session_cents,
    toString(min(d)) AS first_session,
    sum(dropped_invalid) AS dropped_invalid_quotes
FROM (
    SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
           avgIf(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100 AS avg_spread_cents,
           countIf(NOT (bid_price > 0 AND ask_price >= bid_price)) AS dropped_invalid
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'SPY'
      AND sip_timestamp >= toDateTime('2026-06-05 00:00:00')
      AND sip_timestamp < toDateTime('2026-07-08 00:00:00')
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
)

E a seção de análise comum que este relatório apresenta em cada sessão: pela média ponderada de spread cotado por atualização, o dia 7 de julho teve a sessão mais estreita do SPY no último mês1.809 centavos, ranking 1 de 21, contra um mês que atingiu 2.865 centavos em sua maior amplitude. Um tape vermelho de dois-para-um precificado no toque mais estreito do mês é um fato que apenas o fluxo de cotações pode confirmar.

QueryFluxo NBBO de options: 7 de julho vs 6 de julho, e contra as quotes de equity da mesma sessão
O SQL exato por trás de cada número
WITH
    (
        SELECT count()
        FROM global_markets.cache_options_quotes
        WHERE toYYYYMMDD(sip_timestamp) = 20260707
    ) AS jul7_option_rows,
    (
        SELECT count()
        FROM global_markets.cache_options_quotes
        WHERE toYYYYMMDD(sip_timestamp) = 20260706
    ) AS jul6_option_rows,
    (
        SELECT count()
        FROM global_markets.cache_stocks_quotes
        WHERE toYYYYMMDD(sip_timestamp) = 20260707
    ) AS jul7_stock_quote_rows
SELECT
    jul7_option_rows AS jul7_option_quote_rows,
    round(jul7_option_rows / 1e9, 2) AS jul7_option_quote_updates_bn,
    round(jul6_option_rows / 1e9, 2) AS jul6_option_quote_updates_bn,
    round((jul7_option_rows / jul6_option_rows - 1) * 100, 1) AS day_over_day_pct,
    round(jul7_stock_quote_rows / 1e6, 2) AS jul7_stock_quote_updates_m,
    round(jul7_option_rows / jul7_stock_quote_rows, 1) AS jul7_option_to_stock_ratio

O fluxo de cotações de opções é ainda maior e é o maior conjunto de dados deste armazém. O dia 7 de julho registrou 8.69 bilhões de atualizações de NBBO de opções, 17.6 vezes o tamanho de todo o tape de cotações de ações da mesma sessão (492.76 milhões de atualizações). O tape de opções de segunda-feira teve 6.49 bilhões, portanto o fluxo de opções expandiu 34% sessão a sessão, junto com a expansão de 25.7% do fluxo de ações.

QueryQuotes de options do SPY em 7 de julho: root completo, e o touch near-the-money no air pocket vs controle de midday
O SQL exato por trás de cada número
WITH
    (
        SELECT count()
        FROM global_markets.cache_stocks_quotes
        WHERE toYYYYMMDD(sip_timestamp) = 20260707
    ) AS jul7_stock_quote_rows,
    (
        SELECT round(toFloat64(avg(close)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= '2026-07-07 14:36:00' AND window_start < '2026-07-07 14:48:00'
    ) AS spy_pocket_price,
    (
        SELECT round(toFloat64(avg(close)), 2)
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= '2026-07-07 17:30:00' AND window_start < '2026-07-07 17:42:00'
    ) AS spy_midday_price
SELECT
    round(count() / 1e6, 2) AS spy_option_updates_m,
    round(100.0 * count() / jul7_stock_quote_rows, 1) AS pct_of_whole_equity_quote_tape,
    uniqExact(ticker) AS spy_contracts_quoted,
    round(countIf(substring(ticker, -15, 6) = '260707') / 1e6, 2) AS same_day_updates_m,
    spy_pocket_price AS spy_price_in_pocket,
    spy_midday_price AS spy_price_midday,
    round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price),
        bid_price > 0 AND ask_price >= bid_price
        AND substring(ticker, -15, 6) = '260707'
        AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_pocket_price) <= 2
        AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00'), 3) AS pocket_atm_spread_dollars,
    round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price),
        bid_price > 0 AND ask_price >= bid_price
        AND substring(ticker, -15, 6) = '260707'
        AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_midday_price) <= 2
        AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00'), 3) AS midday_atm_spread_dollars,
    round(pocket_atm_spread_dollars - midday_atm_spread_dollars, 3) AS atm_spread_delta_dollars,
    round(countIf(substring(ticker, -15, 6) = '260707'
        AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_pocket_price) <= 2
        AND sip_timestamp >= '2026-07-07 14:36:00' AND sip_timestamp < '2026-07-07 14:48:00') / 1e3, 1) AS pocket_atm_updates_k,
    round(countIf(substring(ticker, -15, 6) = '260707'
        AND abs(toFloat64(toUInt32OrZero(substring(ticker, -8))) / 1000 - spy_midday_price) <= 2
        AND sip_timestamp >= '2026-07-07 17:30:00' AND sip_timestamp < '2026-07-07 17:42:00') / 1e3, 1) AS midday_atm_updates_k,
    round(pocket_atm_updates_k / midday_atm_updates_k, 1) AS atm_quote_rate_ratio,
    countIf(NOT (bid_price > 0 AND ask_price >= bid_price)
        AND substring(ticker, -15, 6) = '260707') AS dropped_invalid_same_day_quotes
FROM global_markets.cache_options_quotes
WHERE ticker >= 'O:SPY26' AND ticker < 'O:SPY27'
  AND sip_timestamp >= '2026-07-07 13:30:00' AND sip_timestamp < '2026-07-07 20:00:00'
HAVING pocket_atm_updates_k > 0 AND midday_atm_updates_k > 0

Apenas os contratos com vencimento em 2026 do SPY consumiram 327.55 milhões dessas atualizações no horário regular, distribuídas em 9116 contratos listados. Isso representa 66.5% do que todo o mercado de ações cotou no mesmo dia, vindo de apenas um ativo subjacente. Os vencimentos no mesmo dia que compõem o tape de 0DTE representam 13.61 milhões deles.

Durante os doze minutos de vácuo de volatilidade da manhã, os contratos near-the-money com vencimento no mesmo dia cotaram uma mediana de $0.01 de largura, exatamente o que cotaram no controle do meio-dia ($0.01, um delta de 0). A taxa de cotação para esse mesmo par foi de 3x: 191.1 mil atualizações nas mínimas contra 64 mil no almoço. O toque das opções replicou o comportamento do toque das ações. Ele manteve sua largura enquanto a máquina de cotação operava em alta intensidade. Near-the-money significa um strike a até $2 do preço médio do SPY no mesmo intervalo, e o painel apresenta ambos os preços (746 no período de baixa, 749.08 no meio-dia).

Juros: a curva sofreu sell-off com o fluxo de crescimento

QueryCurva de treasury: 7 de julho vs print de 6 de julho (apenas vencimentos populados)
O SQL exato por trás de cada número
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul7_yield_pct,
    round((t.2 - t.3) * 100) AS session_change_bp
FROM (
    SELECT arrayJoin([
        ('1 month',  toFloat64(d.yield_1_month),  toFloat64(p.yield_1_month)),
        ('3 month',  toFloat64(d.yield_3_month),  toFloat64(p.yield_3_month)),
        ('1 year',   toFloat64(d.yield_1_year),   toFloat64(p.yield_1_year)),
        ('2 year',   toFloat64(d.yield_2_year),   toFloat64(p.yield_2_year)),
        ('5 year',   toFloat64(d.yield_5_year),   toFloat64(p.yield_5_year)),
        ('10 year',  toFloat64(d.yield_10_year),  toFloat64(p.yield_10_year)),
        ('30 year',  toFloat64(d.yield_30_year),  toFloat64(p.yield_30_year)),
        ('2s10s spread', toFloat64(d.yield_10_year - d.yield_2_year), toFloat64(p.yield_10_year - p.yield_2_year))
    ]) AS t
    FROM (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-07') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-06') AS p
)

Os Treasuries sofreram sell-off junto com o fluxo de crescimento. O título de um ano subiu 11 pontos de base para 4.06%, o de dez anos 7 para 4.55%, e o de trinta anos 6 para 5.05% — acima da linha de cinco por cento. O spread 2s10s manteve-se em 0.36 pontos percentuais (1 pontos de base de mudança): um movimento majoritariamente paralelo, sem mudança na inclinação.

O calendário por trás do dia

QueryCalendário corporativo e fluxo de informações de 7 de julho, em uma linha
O SQL exato por trás de cada número
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-07'
    ) AS news,
    (
        SELECT (argMax(t, n), max(n), max(n) - arraySort(x -> -x, groupArray(n))[2])
        FROM (
            SELECT t, count() AS n
            FROM (
                SELECT arrayJoin(tickers) AS t
                FROM global_markets.stocks_news
                WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-07'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-07') AS ex_dividend_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS splits_executed,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-07') AS forward_splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-07') AS ipos_listed,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS sec_filings,
    (SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS insider_form4_filings,
    (SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-07') AS filings_8k,
    news.1 AS news_articles,
    news.2 AS news_publishers,
    top_news.1 AS most_covered_ticker,
    if(top_news.1 = 'NVDA', 1, 0) AS most_covered_is_nvda,
    top_news.2 AS most_covered_articles,
    top_news.3 AS most_covered_lead_over_next,
    (SELECT countIf(has(tickers, 'CRNX')) FROM global_markets.stocks_news
     WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-07') AS crnx_articles

79 registros de dividendos ficaram ex-dividend, 7 splits foram executados — 5 deles foram reverse splits, as consolidações de sub-dólar que simulam ganhos de três dígitos em um tape não ajustado, contra 2 forward — e 1 novas listagens chegaram. O índice da SEC registrou 2433 arquivos: 463 Form 4s, 173 8-Ks. Nosso feed de notícias trouxe 215 artigos de 3 publishers; o nome mais coberto foi NVDA com 17 artigos, 4 à frente do próximo nome — a mesma NVDA que fechou no verde apesar do dia vermelho do seu setor. O feed trouxe 0 artigos sobre CRNX, o maior ganhador do tape — atenção de um feed, não da mídia global.

A sessão, verificada

QueryCheck de sessão: span de minute-bar do SPY, tabela de feriados e próximo fechamento no calendário
O SQL exato por trás de cada número
SELECT
    formatDateTime(min(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS first_spy_bar_et,
    formatDateTime(max(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS last_spy_bar_et,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-07') AS jul7_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-07' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-07' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-07 00:00:00' AND window_start < '2026-07-08 00:00:00'

O dia 7 de julho foi uma sessão completa, sem fechamento antecipado: as barras do SPY ocorrem de 04:00 a 19:59 no horário de Nova York, com exatamente 390 barras no período regular, e a tabela de feriados contém 0 linhas para a data. O próximo fechamento programado é Labor Day, 2026-09-07.

Notas de dados

  • O volume em dólar é um proxy por minuto — preço de fechamento × volume somados por barra de um minuto, durante o horário regular.
  • A divisão gap-versus-grind é medida a partir da primeira barra da sessão regular de cada ativo (a abertura) em relação ao último fechamento regular da sessão anterior; o restante refere-se ao período da abertura ao fechamento dentro de 7 de julho.
  • As mínimas matinais sincronizadas foram verificadas contra barras adjacentes no momento da redação — cada uma é rastreada por seus minutos vizinhos, não por um único registro; nenhuma recebeu classificação de anomalia. Quando um extremo foi registrado em mais de um minuto, o painel mostra a primeira barra correspondente (um critério de desempate determinístico).
  • Um ativo com símbolo reutilizado foi excluído dos rankings de volume e da chamada de notícias aguardando verificação da entidade; seu próprio post contém as evidências.
  • Estatísticas de quoted-spread excluem cotações inválidas (registros de NBBO de um lado só ou cruzados), e cada painel de spread conta o que descarta em uma coluna própria. O "update-weighted average spread" faz a média da largura cotada em cada atualização válida do NBBO — momentos de alta atividade têm maior peso; é uma estatística de cotação, não um custo por negociação.
  • As cotações de opções de 7 de julho chegaram após a primeira publicação deste post. cache_options_quotes apresenta o maior atraso de ingestão do armazém, portanto, a primeira edição entregou um registro de linha zero onde os painéis de cotação de opções estão agora. As linhas chegaram, o limite de linha zero falhou na regeneração, e esta revisão lê os próprios 8.69 bilhões de atualizações da sessão. A fita de cotação de ações estava completa desde o início: sua última atualização de 7 de julho é registrada no minuto 1199 ET, com 77.13 milhões de atualizações na última hora regular (colunas de registro no painel da fita de cotação).
  • As larguras de cotação de opções são medidas near the money. A mediana por atualização de todos os contratos listados no mesmo dia é uma estatística composta: contratos deep in-the-money cotam larguras em dólares, contratos far out-of-the-money cotam centavos, e quais contratos re-cotam mudanças durante a sessão. A comparação pocket-versus-midday limita-se a strikes dentro de US$ 2 do preço médio do SPY em cada janela, e ambos os preços são colunas no painel. Cotações de opções inválidas (um lado só ou cruzadas) são contadas naquele painel, não descartadas silenciosamente.
  • O registro do treasury para 7 de julho foi ingerido com atraso de sessão — a primeira edição entregou um registro com atraso divulgado; o gatilho disparou em 8 de julho quando o registro chegou, e esta revisão contém a curva real.

Metodologia

  • O período corresponde a uma única sessão de negociação (sessão 1, verificada através de barras observadas e do calendário de feriados — nunca presumida). Os timestamps são armazenados em UTC e convertidos para o horário de Nova York dentro das queries. "Close" refere-se à última barra de minuto da sessão regular; as mudanças diárias comparam 7 de julho com 6 de julho, sessões de negociação consecutivas.
  • Colunas decimais são convertidas para floats de 64 bits antes da aritmética de razões; os vencimentos de opções são reprocessados a partir do ticker da OCC (a coluna de vencimento da própria tabela está com erro). Todos os painéis são lidos uma única vez, no momento da elaboração, através do caminho de leitura restrito. Estado do warehouse em 8 de julho de 2026.
  • A seção de quote-tape foi adicionada na revisão de 8 de julho (a mesma revisão que substituiu o recibo de atraso do treasury pelo landed print), e seus painéis de quote de opções foram reescritos assim que as linhas de NBBO de opções de 7 de julho foram processadas. A geração é um processo em lote (batch job) por design: o painel de quote de opções do SPY analisa algumas centenas de milhões de registros de NBBO, enquanto as contagens de tape-size leem os totais de linhas das partições diárias, que é como uma tabela com bilhões de linhas por sessão responde a uma contagem em menos de um segundo.

Cada painel é o resultado de uma query armazenada — gráfico, tabela e SQL são um único objeto. Cole qualquer um deles no terminal Strasmore para utilizá-los. Sessão anterior: 6 de julho.