Strasmore Research
Récap des marchés Matt ConnorPar Matt Connor · Mis à jour le 2026-08-02

Marché du 28 juillet 2026 : chiffres clés

Bilan du 28 juillet 2026 : indices, breadth, spread sectoriel, flux options, taux et calendrier, avec chaque chiffre vérifié par une requête enregistrée.

Cette synthèse de marché du mardi 28 juillet 2026 couvre l’ensemble de la séance à partir de requêtes enregistrées : la variation de clôture à clôture de SPY s’est établie à 0.24%, la part des valeurs en hausse sur le marché liquide à 58.6%, et le marché des options a enregistré 59.28 millions de contrats. Chaque fenêtre ci-dessous est définie par des dates de début et de fin explicites. Toute réexécution de la requête SQL d’un panneau renvoie donc les mêmes chiffres.

Le tableau de bord

Chaque variation compare la dernière barre d'une minute de la séance régulière du 28 juillet à celle du lundi 27 juillet, deux séances consécutives. Les lignes sont classées par ordre alphabétique, de sorte que chaque ETF conserve une position fixe.

RequêteSPY / QQQ / DIA / IWM : 28 juillet vs clôture du 27 juillet, heures normales
Le SQL exact derrière chaque chiffre
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

DIA a progressé de 1.07%, IWM de 0.15%, QQQ de -0.96% et SPY de 0.24%, pour clôturer à $740.76. Chaque ligne décompose la variation en deux segments : SPY a ouvert à 0.02% de la clôture de lundi, puis a évolué de 0.21% entre l'ouverture et la clôture. Le segment overnight et le segment intraday ne doivent pas nécessairement évoluer dans le même sens. Leur répartition constitue la première empreinte de la séance.

La séance était-elle inhabituelle ?

Le chiffre d’une seule séance est peu significatif sans connaître la distribution correspondante. La séance est donc classée à l’intérieur de son propre mois glissant, selon la même méthode.

RequêteÉvolution journalière de SPY dans son contexte historique (ouverture-clôture, du 29 juin au 28 juillet)
Le SQL exact derrière chaque chiffre
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

La variation de l’ouverture à la clôture du SPY, de 0.21%, se classe 14 sur 21 séances glissantes en fonction de son amplitude absolue, dans une fenêtre remontant jusqu’à 2026-06-29. Le rang correspond au nombre d’autres séances de la fenêtre dont la variation était plus importante, augmenté de un. La première place correspond donc à la plus forte variation du mois glissant.

Participation

Le niveau d’un indice est une valeur unique. La participation mesure le nombre d’actions qui ont évolué dans le même sens.

RequêteBreadth du marché liquide : clôture du 28 juillet vs clôture du 27 juillet, filtre de 1 M$ échangé
Le SQL exact derrière chaque chiffre
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

Parmi les 6008 valeurs dépassant un seuil de volume de transactions d’un million de dollars pendant les heures normales, 3519 ont clôturé au-dessus du cours de clôture de lundi et 2423 en dessous, soit une proportion de valeurs en hausse de 58.6%. Le filtre a écarté 5346 valeurs moins liquides, comptabilisées ici plutôt que supprimées silencieusement.

Le panier des méga-capitalisations

Les huit mêmes méga-capitalisations apparaissent ici à chaque séance, par ordre alphabétique afin que chacune conserve sa ligne. L’objectif est d’utiliser un panier fixe : le lecteur mémorise les lignes et aucune sélection éditoriale ne désigne après coup les gagnants.

RequêteHuit méga-capitalisations : variation vs 27 juillet et dollars échangés en heures normales, 28 juillet
Le SQL exact derrière chaque chiffre
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 a évolué de 0.97%, META de -0.05%, MSFT de 1.12% et NVDA de 0.23%, sur un chiffre d’affaires de 21.11 milliards de dollars pendant les heures normales de cotation, tandis que TSLA s’établissait à -0.57%. La colonne en dollars indique quelle part des échanges ces huit valeurs représentent à elles seules ; le panel de breadth ci-dessus permet de vérifier dans quelle mesure le reste du marché les a suivies.

Les valeurs les plus mouvementées de la séance

Les deux tableaux exigent un volume de transactions de cinq millions de dollars pendant les heures normales de cotation. Ils excluent toute valeur dont le split a été exécuté entre les deux clôtures mesurées, ainsi qu’un symbole réutilisé en application de la règle interne de gestion des ambiguïtés décrite dans les notes.

RequêtePlus fortes hausses et baisses : clôture du 28 juillet vs clôture du 27 juillet, 5 M$ échangés ou plus, splits exclus
Le SQL exact derrière chaque chiffre
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

La plus forte hausse du tableau, STKH, a progressé de 166.7%, avec 113.2 millions de dollars échangés. La plus forte baisse, YYAI, a reculé de -71%, avec 18.3 millions de dollars échangés. Cette page consigne les variations et les montants négociés, sans leur attribuer de cause.

Dispersion sectorielle

Les onze fonds SPDR Select Sector, classés du meilleur au moins bon selon leur cours de clôture du 28 juillet par rapport à celui du 27 juillet. L'univers est défini et fixe. Il ne s'agit pas d'une classification de fournisseur.

RequêteETF sectoriels, clôture du 28 juillet vs clôture du 27 juillet, classés
Le SQL exact derrière chaque chiffre
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 arrive en tête à 2.36%, tandis que Technology ferme la marche à -1.9%, soit 4.26 points de pourcentage de moins. Cet écart correspond à la dispersion sectorielle du jour. Un marché où les onze secteurs évoluent dans une fourchette d'un point se lit très différemment d'un marché où l'écart s'étend sur plusieurs points.

Où les dollars se sont échangés

RequêteTop 6 par dollars échangés, top 4 par actions échangées : heures normales du 28 juillet
Le SQL exact derrière chaque chiffre
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 a dominé le classement en dollars avec 39.21 milliards de dollars de turnover sur les heures de cotation normales, suivi de QQQ avec 29.98 milliards. Le classement en nombre d’actions répond à une autre question : ONFO est arrivé en tête avec 182.4 millions d’actions, pour un prix moyen implicite de $0.16. Le volume en dollars indique où se porte l’attention du marché, tandis que le volume en nombre d’actions mesure la rotation. À l’échelle d’une valeur, cette mesure s’appelle le volume relatif.

Le flux des options

RequêteFlux options : contrats, part des calls, part du jour vs lundi, contrat SPY le plus actif
Le SQL exact derrière chaque chiffre
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

Le flux des options a enregistré 10.07 millions de transactions, représentant 59.28 millions de contrats, contre 64.69 millions lundi. Les calls ont représenté 55% du volume de contrats. Les contrats arrivant à expiration au cours de la même séance, le segment à zéro jour avant expiration, ont représenté 29%, contre 39.3% lundi. Ce rythme est dicté par le calendrier des expirations. Le contrat SPY le plus négocié était le 742 C, avec 0.72 millions de contrats. Son strike se situait à 1.24 dollars du cours de clôture régulier de SPY, à $740.76, selon la différence entre le strike et la clôture.

Le flux des cotations

Les données de cotation constituent le jeu de données le plus rare de cette équipe. Elles sont mesurées à chaque séance. Les séances ordinaires sont également consignées.

RequêteNombre de mises à jour NBBO des actions : 28 juillet vs 27 juillet, avec mises à jour des tickers nommés (millions)
Le SQL exact derrière chaque chiffre
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

Le flux des cotations actions a enregistré 536.07 millions de mises à jour du NBBO, contre 553.53 millions lundi, soit une variation d'un jour sur l'autre de -3.2%. SPY a enregistré 4.72 millions de mises à jour, QQQ 5.94 millions et NVDA 3.01 millions.

RequêteSept valeurs : spread coté médian en heures normales, en points de base, avec volumes de cotations, 28 juillet
Le SQL exact derrière chaque chiffre
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

Pendant les heures normales de cotation, le spread médian coté de SPY représentait 0.27 points de base du point milieu, celui de QQQ 0.74 et celui de NVDA 1.52. Les deux dernières colonnes correspondent à la divulgation des données : les cotations à un seul côté et les cotations croisées sont comptabilisées pour chaque valeur et exclues du calcul de la médiane, au lieu d'être supprimées sans indication. Une cotation croisée, avec un bid supérieur à l'ask, est un artefact courant d'un flux consolidé assemblé à partir de nombreuses plateformes à une résolution de l'ordre de la nanoseconde.

RequêteSpread médian de SPY classé parmi toutes les séances de juillet, du plus serré au plus large
Le SQL exact derrière chaque chiffre
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

Classé par rapport à toutes les séances de juillet selon une méthode identique, le spread médian du jour sur SPY, de 0.27 points de base, se situait à 16 sur 19, en partant des spreads les plus serrés, dans une période commençant 2026-07-01. Sur un flux calme, c'est le rôle de ce tableau : une journée ordinaire pour la liquidité constitue un résultat, publié et encadré.

RequêteNBBO des options : mises à jour totales vs tape actions, plus segment sur la racine SPY, 28 juillet
Le SQL exact derrière chaque chiffre
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

Le flux NBBO des options a enregistré 10.23 milliards de mises à jour, soit 19.1 fois le volume du flux des cotations actions, la seule racine SPY représentant 382 millions de mises à jour pendant les heures normales de cotation.

Taux

RequêtePoints de la courbe des Treasuries enregistrés, du 23 au 28 juillet
Le SQL exact derrière chaque chiffre
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

Les données du Trésor accusent environ une séance de retard sur le marché. Ce panneau présente donc les prints disponibles : 4 lignes datées dans la fenêtre. La plus récente, datée du 2026-07-28, indique un taux à deux ans de 4.26%, un taux à dix ans de 4.61% et un taux à trente ans de 5.09%, soit un spread entre les taux à deux et à dix ans de 35 points de base.

Le calendrier de la séance

RequêteDétachements de dividendes, splits, cotations, actualités et répartition des filings auprès de la SEC du 28 juillet
Le SQL exact derrière chaque chiffre
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 dividendes sont devenus ex-dividend le 28 juillet, 3 splits inversés et 0 splits à la hausse ont été exécutés, et 2 nouvelles introductions ont été enregistrées. Le fil d’actualité comprenait 161 articles provenant de 2 éditeurs, dont MSFT le ticker le plus couvert dans la fenêtre de ce fil, avec 9 articles. L’index quotidien EDGAR recense 5915 dépôts pour cette date, provenant de 2898 déposants distincts : 856 rapports d’initiés Form 4, 315 rapports courants 8-K, 900 suppléments de tarification 424B2 et 100 rapports trimestriels 10-Q. Cet index est publié selon son propre calendrier, et ce panneau restitue les données disponibles au moment de sa génération.

Au programme

Pour le reste de la semaine, consultez les mêmes tableaux, en regardant délibérément au-delà de la période.

RequêteDu 29 au 31 juillet au calendrier : fermetures, détachements de dividendes, splits, échéance du vendredi et décalage des positions short
Le SQL exact derrière chaque chiffre
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

Le tableau des jours fériés fait apparaître 0 fermetures les mercredi 29 juillet, jeudi 30 juillet et vendredi 31 juillet. 696 dividendes deviennent détachés au cours de ces trois séances, dont 0 parmi les dix grandes valeurs grand public vérifiées, et 15 splits doivent être exécutés. Sur le volume d’options de mardi, 17.5% concernait déjà des contrats arrivant à expiration le vendredi 31 juillet. Le dernier fichier de règlement des positions short disponible est daté du 2026-07-15, avec un délai de publication suffisamment long pour justifier sa propre explication.

La séance, vérifiée

RequêteVérification de la séance : première/dernière barre SPY en ET, nombre de barres en heures normales, notifications de jours fériés, prochaine fermeture
Le SQL exact derrière chaque chiffre
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

Une séance complète en horaires réguliers : première barre SPY à 04:00 ET, dernière à 19:59 ET, 390 barres pendant les heures régulières, 1 séance dans la fenêtre et 0 ligne de jour férié pour la date. La prochaine fermeture programmée est Labor Day le 2026-09-07.

FAQ

Comment la Bourse s’est-elle comportée le mardi 28 juillet 2026 ?

Le SPY a évolué de 0.24% entre deux clôtures, à $740.76, tandis que le QQQ s’établissait à -0.96%, le DIA à 1.07% et l’IWM à 0.15%. Parmi les valeurs liquides, 3519 a progressé et 2423 a reculé.

Quel secteur a pris la tête du classement le 28 juillet 2026 ?

Health Care, à 2.36%, d’après les onze fonds sectoriels sélectifs SPDR. Le moins performant des onze, Technology, a enregistré -1.9%.

Quelle a été l’activité sur le marché des options le 28 juillet 2026 ?

59.28 millions de contrats ont été négociés, contre 64.69 millions lors de la séance précédente. Les contrats arrivant à échéance le jour même ont représenté 29% du volume et les calls 55%.

Quelle action a concentré le plus grand montant de transactions le 28 juillet 2026 ?

MU, avec 39.21 milliards de dollars de volume en séance régulière, devant QQQ avec 29.98 milliards.

Notes sur les données

Cette édition comble la lacune du 28 juillet dans la série quotidienne : le point quotidien du 27 juillet couvre la séance précédente, le point quotidien du 29 juillet la séance suivante, et le récapitulatif hebdomadaire couvre la semaine précédant ces deux séances. Les panneaux nommés par ticker sont classés par ordre alphabétique afin que les renvois dans le texte pointent vers des lignes fixes ; les classements et tableaux des valeurs en mouvement sont triés par valeur, et chaque indication de position qu’ils contiennent est encadrée par une borne de contrôle de cohérence. Le panier de méga-capitalisations et le panier sectoriel de onze fonds sont des ensembles définis et fixes, et non des classifications de fournisseurs. Les tableaux des valeurs en mouvement appliquent un seuil de cinq millions de dollars de volume échangé pendant les heures normales, excluent toute valeur dont le split a été exécuté entre les deux clôtures mesurées, et excluent un symbole réutilisé en vertu du contrôle interne contre les ambiguïtés ; ainsi, chaque mention renvoie toujours à une valeur vérifiable. Les panneaux de cotations comptabilisent, pour chaque valeur, les cotations à sens unique et les cotations croisées au lieu de les écarter silencieusement. Le fichier du Trésor et l’index quotidien d’EDGAR sont publiés selon leurs propres calendriers ; ces panneaux indiquent donc les données disponibles plutôt que de supposer leur réception. Aucun indice de volatilité implicite n’apparaît ici : ces séries ne sont pas sous licence dans cet entrepôt de données. La volatilité est donc évaluée à partir du tape, au moyen des amplitudes de variation, de la part des options dans les échanges du jour et du comportement des cotations.

Méthodologie

  • Source des données de marché : consolidated tape. delayed_stocks_minute_aggs pour les prix et les volumes, options_trades pour le flux des options, cache_stocks_quotes et cache_options_quotes pour les panneaux NBBO.
  • Clôture : dernière barre d’une minute de la séance régulière, jamais un print supposé à 16 h et jamais un print réalisé en horaires étendus.
  • Gestion du fuseau horaire : tous les horodatages stockés sont en UTC ; les clauses WHERE utilisent des littéraux UTC bruts, et toTimeZone apparaît uniquement dans les listes SELECT pour les libellés ET.
  • Vérification de la séance : à partir de la table des jours fériés et des barres observées, jamais à partir du seul calendrier.
  • Comparaisons avec la séance précédente : calculées dans la requête à partir du 27 juillet, jamais reprises d’un article précédent.
  • Décimales : les colonnes de prix, de taille et de volume sont converties en Float64 avant toute division ou multiplication.
  • Agrégats déterministes : quantiles exacts et départage des égalités par clés de tuples dans toute l’analyse ; chaque affirmation d’ordre ou de signe dans le texte est encodée comme une borne de contrôle.
  • Date as-of de l’entrepôt : 1er août 2026, quatre jours après la séance, soit au-delà du délai habituel d’ingestion du tape, de un à deux jours ; les reçus bornés ci-dessus maintiennent l’article en cas d’absence d’un jeu de données lors de la génération.

Liens connexes : le récapitulatif quotidien du 27 juillet, le récapitulatif quotidien du 29 juillet, la date d’expiration des options, ce qu’est un bid-ask spread, et le spread deux à dix ans.

Chaque requête ci-dessus s’exécute sans modification sur le terminal Strasmore si vous souhaitez réorienter une fenêtre vers une autre séance.