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

Récapitulatif marché 8 juillet 2026 chiffres

Rebond des semi-conducteurs sans impact sur les indices. NVDA progresse et MU domine, tandis que le marché élargi affiche un ratio de baisse de deux contre un.

Le mercredi 8 juillet 2026 a connu un rebond d'une journée sur les semi-conducteurs, sans impact notable sur les indices. SNDK a clôturé à +6.8%, AVGO à +4.82%, et NVDA à +3.66% — un net renversement par rapport à la chute des semi-conducteurs de mardi — mais les ETF indiciels sont restés stables : SPY -0.31% et QQQ +0.25%. Le marché élargi affichait un ratio de baisse deux fois plus important que la veille : 1821 hausses contre 4260 baisses, soit une proportion de hausses de 29.6% après 33.8% lors de la session précédente. Chaque donnée ci-dessous provient d'une requête stockée — développez chaque panneau pour obtenir la requête SQL exacte.

Le tableau de bord

Chaque variation compare la dernière bougie d'une minute de la séance régulière du 8 juillet avec celle du mardi 7 juillet — soit deux séances consécutives. Les lignes sont classées par ordre alphabétique, chaque ETF conservant une position fixe.

RequêteSPY / QQQ / DIA / IWM — 8 juillet vs clôture du 7 juillet, RTH
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-07 13:30:00' AND window_start < '2026-07-07 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-08 13:30:00' AND window_start < '2026-07-08 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

Les quatre ETF ont ouvert en gap down avant de diverger. DIA a ouvert la séance à -0.97% par rapport à la clôture précédente et a poursuivi sa baisse pour finir à -1.09%. IWM a ouvert à -0.73% et est resté en baisse, clôturant à -0.92% . SPY a ouvert à -0.6%, a progressé durant la journée, mais a tout de même clôturé à -0.31% — le redressement après l'ouverture a été inférieur au gap. QQQ a ouvert à -0.64% et a progressé jusqu'à +0.25% à la clôture, étant le seul des quatre en territoire positif.

La journée était-elle inhabituelle ?

La variation du SPY entre l'ouverture et la clôture de 0.29% se classe au 16 rang sur 22 sessions précédentes — une journée moyenne pour l'indice, sans caractère extrême. La variation du QQQ entre la clôture et la clôture précédente de +0.25% se classe au 21 rang sur 22 — l'un des mouvements mensuels les plus faibles pour le QQQ, ce qui est cohérent avec la performance contenue de l'indice.

RequêteVariation journalière SPY / QQQ en contexte trailing (close-over-close, ~22 sessions)
Le SQL exact derrière chaque chiffre
SELECT
    round(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08')), 2) AS qqq_close_over_close_pct,
    arrayCount(x -> x > abs(anyIf(cc_pct, ticker = 'QQQ' AND d = toDate('2026-07-08'))), groupArrayIf(abs(cc_pct), ticker = 'QQQ' AND d != toDate('2026-07-08'))) + 1 AS qqq_abs_move_rank,
    countIf(ticker = 'QQQ') AS qqq_sessions_compared,
    round(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08')), 2) AS spy_open_to_close_pct,
    arrayCount(x -> x > abs(anyIf(oc_pct, ticker = 'SPY' AND d = toDate('2026-07-08'))), groupArrayIf(abs(oc_pct), ticker = 'SPY' AND d != toDate('2026-07-08'))) + 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-05 13:30:00')
          AND window_start < toDateTime('2026-07-09 00:00:00')
          AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
        GROUP BY ticker, d
    )
)

Breadth : une tendance baissière encore plus marquée que la veille

RequêteLargeur Liquid-tape : part des advancers le 8 juillet vs 7 juillet, filtre $1M échangé
Le SQL exact derrière chaque chiffre
SELECT
    countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS advancers,
    countIf(close_8 < close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS decliners,
    countIf(close_8 = close_7 AND close_7 > 0 AND dv_8 >= 1000000) AS unchanged,
    countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS liquid_tickers,
    countIf(close_7 > 0 AND close_8 > 0) AS traded_both_sessions,
    countIf(close_7 > 0 AND close_8 > 0) - countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000) AS dropped_by_liquidity_filter,
    round(100.0 * countIf(close_8 > close_7 AND close_7 > 0 AND dv_8 >= 1000000) / countIf(close_7 > 0 AND close_8 > 0 AND dv_8 >= 1000000), 1) AS advancer_pct,
    round(100.0 * countIf(close_7 > close_6 AND close_6 > 0 AND dv_7 >= 1000000) / countIf(close_7 > 0 AND close_6 > 0 AND dv_7 >= 1000000), 1) AS jul7_advancer_pct
FROM (
    SELECT ticker,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')) AS close_6,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8,
           sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS dv_8,
           sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00') AS dv_7
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-08 20:00:00'
    GROUP BY ticker
)

L'écart entre les valeurs en hausse (1821) et les valeurs en baisse (4260) porte la part des hausses à 29.6%, contre 33.8% lors de la séance précédente — ce calcul utilise le même filtre de liquidité pour les deux jours. Sur les 11439 titres ayant clôturé les deux jours, 5284 sont exclus du calcul car leur volume d'échange est inférieur au filtre de 1 M$. Le rebond porté par les grandes capitalisations et la clôture mixte de l'indice masquent une tendance de marché (broad tape) encore plus uniformément négative.

Le secteur des semi-conducteurs rebondit fortement avec des volumes élevés

Les lignes sont classées par ordre alphabétique, chaque nom conserve donc une position fixe ; la comparaison avec mardi est calculée à partir des clôtures du 7 juillet et du 6 juillet dans le bloc des transactions sous le tableau.

RequêteQuatorze noms du secteur : clôture précédente, clôture du jour, range journalier, volume en dollars, low/high minute ET
Le SQL exact derrière chaque chiffre
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close,
        maxIf(toFloat64(high), window_start >= '2026-07-08 00:00:00') AS day_high,
        minIf(toFloat64(low), window_start >= '2026-07-08 00:00:00') AS day_low,
        argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS low_bar,
        argMaxIf(window_start, (toFloat64(high), -toInt64(toUnixTimestamp(window_start))), window_start >= '2026-07-08 00:00:00') AS high_bar,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 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-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
        OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 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,
    round(((day_high - day_low) / prior_close) * 100, 2) AS range_pct,
    round(toFloat64(day_low), 2) AS day_low,
    round(toFloat64(day_high), 2) AS day_high,
    toUInt32(toHour(toTimeZone(low_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(low_bar, 'America/New_York'))) AS low_minute_et,
    toUInt32(toHour(toTimeZone(high_bar, 'America/New_York')) * 60 + toMinute(toTimeZone(high_bar, 'America/New_York'))) AS high_minute_et,
    day_dollar_bn
FROM per_name
ORDER BY ticker

12 des quatorze valeurs du secteur des semi-conducteurs ont clôturé en hausse — l'inverse de la session de mardi, lorsque 12 des quatorze valeurs ont clôturé en baisse. SNDK a mené le secteur avec +6.8% pour 16.82B$ de volume échangé, suivi de près par AVGO à +4.82% ; les autres valeurs du stockage ont suivi — STX +3.9%, WDC +3.45%. L'ETF levier 3x SOXL a progressé de +5.79% et l'inverse SOXS de -6.22% — ce qui est cohérent avec un rebond d'une journée sur l'indice sous-jacent. MU a progressé plus modestement de +1.11% mais a généré 32.02B$ — le volume en dollars le plus élevé du panel. NVDA a clôturé à +3.66% pour la deuxième journée consécutive en hausse : c'était l'une des rares valeurs parmi les 2 du panel à clôturer en hausse malgré le krach de mardi (+0.67% ce jour-là).

RequêteRésultats : comptes green/red le 8 juillet et le 7 juillet sur les quatorze mêmes noms
Le SQL exact derrière chaque chiffre
SELECT
    countIf(close_8 > close_7) AS jul8_green,
    countIf(close_8 < close_7) AS jul8_red,
    countIf(close_7 > close_6) AS jul7_green,
    countIf(close_7 < close_6) AS jul7_red,
    round(anyIf((close_7 / close_6 - 1) * 100, ticker = 'NVDA'), 2) AS nvda_jul7_pct,
    count() AS names_counted
FROM (
    SELECT ticker,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00')) AS close_6,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-07 13:30:00' AND window_start < '2026-07-07 20:00:00')) AS close_7,
           toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00')) AS close_8
    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-08 20:00:00'
    GROUP BY ticker
)

L'autre versant : les valeurs défensives et les mega-caps de croissance n'ont pas suivi

RequêteAnalyse de rotation : huit noms — défensives, mega-caps, biotech
Le SQL exact derrière chaque chiffre
WITH per_name AS (
    SELECT
        ticker,
        toFloat64(argMaxIf(close, window_start, window_start < '2026-07-08 00:00:00')) AS prior_close_raw,
        toFloat64(argMinIf(open, window_start, window_start >= '2026-07-08 00:00:00')) AS day_open_raw,
        toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-08 00:00:00')) AS day_close_raw,
        round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-08 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-07 13:30:00' AND window_start < '2026-07-07 20:00:00')
        OR (window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 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

Les mega-caps de croissance ont évolué à l'opposé du secteur des semi-conducteurs : TSLA -2.22%, META -2.04%, LLY -1.6%. CVX est la seule valeur du panel à avoir clôturé en hausse, avec un gain de +1.12% après un gap à l'ouverture, tandis que XOM a ouvert à +1.26% avant de reculer à -0.49% en fin de séance. La séance de mercredi a donc été scindée en deux — les valeurs liées aux puces en hausse, la croissance et les valeurs défensives en baisse — les indices restant stables entre ces deux mouvements. (Les lignes sont classées par ordre alphabétique : CRNX, CVX, JNJ, LLY, META, TSLA, UNH, XOM.)

Flux de capitaux

RequêteTop 6 par volume en dollars, top 4 par volume d'actions — 8 juillet RTH
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,
    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-08 13:30:00' AND window_start < '2026-07-08 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-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
      AND ticker NOT IN ('SPCX')
    GROUP BY ticker
    ORDER BY shares_m DESC
    LIMIT 4
)
ORDER BY leaderboard, pct_of_board_leader DESC

MU a généré 32.02B de dollars — le titre le plus échangé et le seul au-dessus de la barre des 30 Md$. SPY (26.49B), NVDA (24.17B) et QQQ (20.9B) ont suivi, avec SNDK à 16.82B et TSLA à 11.71B pour compléter le tableau des volumes en dollars. Le tableau des actions présente une dynamique différente : l'ETF inverse 3x sur les semi-conducteurs SOXS a échangé 636.5M actions à un prix moyen implicite de $4.67 — une conséquence mécanique de la structure d'un wrapper 3x à faible prix lors d'une journée de forte hausse sur les puces.

La structure de la séance

RequêteActions par bucket 30-min ET, RTH, avec % du plus gros bucket de la journée
Le SQL exact derrière chaque chiffre
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-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
GROUP BY et_time
ORDER BY et_time

Le volume a affiché une forme en U classique : le volume d'ouverture représentait 89.9% du volume maximal de la journée. Les échanges ont diminué durant la matinée pour atteindre un point bas de 34.1% entre 13h00 et 13h30 ET. La dernière demi-heure (15h30 ET) a constitué le pic de volume de la journée avec 2.2B actions — un niveau supérieur aux 1.98B de l'ouverture, ce qui correspond au schéma standard d'une séance régulière.

Le tape des options

RequêteOptions tape : prints, contrats, % calls, part 0DTE vs mardi, top contrat
Le SQL exact derrière chaque chiffre
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) = '260708', 1, 0) AS is_0dte
            FROM global_markets.options_trades
            WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 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-08 13:30:00' AND window_start < '2026-07-08 20:00:00'
    ) AS spy_regular_close,
    (
        SELECT round(toFloat64(sum(size)) / 1e6, 2)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
    ) AS jul7_contracts_m,
    (
        SELECT round(100.0 * sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260707') / sum(size), 1)
        FROM global_markets.options_trades
        WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-08 00:00:00'
    ) AS jul7_pct_0dte
SELECT
    round(count() / 1e6, 2) AS option_prints_m,
    round(toFloat64(sum(size)) / 1e6, 2) AS contracts_m,
    jul7_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) = '260708') / sum(size), 1) AS pct_0dte,
    jul7_pct_0dte,
    spy_regular_close,
    top2.1[1] AS top1_und, top2.2[1] AS top1_strike, top2.3[1] AS top1_type, top2.4[1] AS top1_contracts, top2.5[1] AS top1_avg_px, top2.6[1] AS top1_is_0dte,
    round(toFloat64(top2.2[1]) - spy_regular_close, 2) AS top1_moneyness
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'

Le tape consolidé des options a enregistré 10.44M transactions et 63.26M contrats — un volume supérieur aux 61.13M de mardi, calculés sur la même période. Les calls représentaient 55.4% du volume total, indiquant une légère inclinaison vers les calls. Les contrats 0DTE (expiration le jour même, 260708) ont représenté 38.7% du volume de contrats, contre 31.2% mardi. Le contrat individuel le plus actif était SPY 745C677981 contrats à un prix moyen de $0.875, un contrat à expiration le jour même essentiellement at the money par rapport à la clôture régulière du SPY à $745.31.

Le flux de cotations

RequêteNombre de mises à jour NBBO des actions : 8 juillet vs 7 juillet, avec mises à jour par ticker (millions)
Le SQL exact derrière chaque chiffre
SELECT
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / 1e6, 2) AS jul8_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-07')) / 1e6, 2) AS jul7_updates_m,
    round((countIf(toDate(sip_timestamp) = toDate('2026-07-08')) / countIf(toDate(sip_timestamp) = toDate('2026-07-07')) - 1) * 100, 1) AS day_over_day_pct,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'SPY') / 1e6, 2) AS jul8_spy_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'QQQ') / 1e6, 2) AS jul8_qqq_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'NVDA') / 1e6, 2) AS jul8_nvda_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'TSLA') / 1e6, 2) AS jul8_tsla_updates_m,
    round(countIf(toDate(sip_timestamp) = toDate('2026-07-08') AND ticker = 'MU') / 1e6, 2) AS jul8_mu_updates_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-07-07 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00'

Le flux de cotations actions a enregistré 530.55M mises à jour NBBO le 8 juillet — soit +7.7% par rapport à la séance précédente. Les 6.53M mises à jour de QQQ ont dominé les tickers cités, devant les 4.93M de SPY. NVDA (1.8M), TSLA (0.72M) et MU (0.6M) complètent la liste.

RequêteSPY / QQQ / NVDA / TSLA / MU / SNDK / AVGO : spread médian coté en RTH (basis points)
Le SQL exact derrière chaque chiffre
SELECT
    ticker,
    round(quantileExact(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000), 2) AS median_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'NVDA', 'TSLA', 'MU', 'SNDK', 'AVGO')
  AND sip_timestamp >= '2026-07-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00'
  AND bid_price > 0 AND ask_price > 0 AND ask_price > bid_price
GROUP BY ticker
ORDER BY median_spread_bps ASC

Pour les sept tickers cités, le spread médian coté de SPY en RTH était de 0.27 bps — un niveau plancher pour l'ETF américain le plus liquide. QQQ s'est coté à 0.71 bps et NVDA à 1.52 bps. Les spreads les plus larges concernent les titres les moins cotés : MU à 5.66 bps et SNDK à 12.21 bps.

RequêteSpread moyen coté du SPY en RTH en contexte trailing-month
Le SQL exact derrière chaque chiffre
SELECT
    round(anyIf(avg_spread_cents, d = toDate('2026-07-08')), 3) AS jul8_avg_spread_cents,
    arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-08')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-08'))) + 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-09 00:00:00')
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY d
)

Le spread moyen coté de SPY en RTH de 2.202 cents se classe au 11 percentile sur les 22 dernières séances — une journée médiane pour la compression du spread. Sur le dernier mois, le spread a varié de 1.809 cents (le plus serré) à 2.865 cents (le plus large). Aucun manque de liquidité ni événement de marché particulier — une séance ordinaire pour le spread coté de SPY.

RequêteOptions NBBO tape : total updates vs stock tape, plus slice SPY root
Le SQL exact derrière chaque chiffre
WITH
    (SELECT count() FROM global_markets.cache_options_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_options_rows,
    (SELECT count() FROM global_markets.cache_stocks_quotes WHERE sip_timestamp >= '2026-07-08 00:00:00' AND sip_timestamp < '2026-07-09 00:00:00') AS jul8_stock_quote_rows
SELECT
    round(jul8_options_rows / 1e9, 2) AS jul8_options_bn,
    round(jul8_options_rows / jul8_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-08 13:30:00' AND sip_timestamp < '2026-07-08 20:00:00') / 1e6, 0) AS jul8_spy_options_m

Le flux des options a enregistré 9.62 billion mises à jour NBBO — soit 18.1× le volume du flux des actions. Le seul segment des options SPY a généré 422 million mises à jour durant les heures de cotation régulières.

Taux : la courbe a peu bougé

RequêteRendements Treasury : 8 juillet vs 7 juillet — maturités + 2s10s
Le SQL exact derrière chaque chiffre
SELECT
    t.1 AS curve_point,
    round(t.2, 2) AS jul8_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-08') AS d,
         (SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-07') AS p
)

Le 5 ans a mené les mouvements de la séance avec +4 bp ; le 2 ans a terminé en hausse de +2 bp, et aucune autre maturité n'a varié de plus de 2 bp dans un sens ou dans l'autre. Le spread 2s10s s'est établi à 0.35% (-1 bp sur la séance), restant dans sa fourchette récente. Cette faible volatilité des taux est cohérente avec la faible variation des indices.

Le calendrier de la journée

RequêteEx-divs, splits, filings SEC, attention news
Le SQL exact derrière chaque chiffre
WITH
    (
        SELECT (count(), uniqExact(publisher))
        FROM global_markets.stocks_news
        WHERE toDate(toTimeZone(published_utc, 'America/New_York')) = '2026-07-08'
    ) AS news,
    (
        SELECT (argMax(t, (n, t)), 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-08'
            )
            WHERE t != 'SPCX'
            GROUP BY t
        )
    ) AS top_news
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-08') AS ex_dividend_records,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS splits_executed,
    (SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS reverse_splits,
    (SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-08') AS forward_splits,
    (SELECT countIf(form_type = '424B2') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_424b2,
    (SELECT countIf(form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_form4,
    (SELECT countIf(form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_8k,
    (SELECT count() FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-08') AS fil_total,
    news.1 AS news_articles, news.2 AS news_publishers,
    top_news.1 AS top_news_ticker, top_news.2 AS top_news_n, top_news.3 AS top_news_lead_over_next

Le calendrier était peu chargé aujourd'hui : 81 dates de détachement de dividende, 1 split actions exécutés, et 3722 dépôts SEC au total (dont 775 Form 4 pour les transactions d'initiés, 527 prospectus 424B2, et 163 rapports 8-K). La couverture médiatique a comptabilisé 192 articles répartis sur 3 éditeurs, avec MU parmi les tickers les plus cités dans 17 articles. Aucun corporate action d'une grande entreprise ne s'est distingué — le flux de données était principalement centré sur le secteur des semi-conducteurs.

La session, vérifiée

RequêteVérification de session : première/dernière barre SPY ET, nombre de barres RTH, résultats jours fériés, prochaine clôture
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,
    count() AS spy_minute_bars,
    countIf(window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS regular_session_bars,
    uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-08 13:30:00' AND window_start < '2026-07-08 20:00:00') AS day_sessions,
    (SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-07-08') AS jul8_holiday_rows,
    (SELECT toString(min(date)) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_date,
    (SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-08' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-08 00:00:00' AND window_start < '2026-07-09 00:00:00'

La session a couvert l'intégralité de la période d'extension horaire — première bougie SPY à 04:00 ET, dernière à 19:59 ET — avec 390 bougies de trading en minutes durant les heures régulières et 1 sessions de trading sur la période (pas de demi-journée ; le calendrier des jours fériés ne contient aucune entrée pour cette date). La prochaine clôture prévue est le Labor Day le 2026-09-07.

Notes sur les données

Tous les horodatages sont enregistrés en UTC ; les heures régulières du 8 juillet 2026 sont filtrées via sip_timestamp / window_start entre 2026-07-08 13:30:00 et 2026-07-08 20:00:00, ce qui correspond à la plage 9:30–16:00 heure de New York. Les prix décimaux sont convertis en Float64 avant toute division. Les panels par ticker (scoreboard, chip complex, rotation) sont classés par ordre alphabétique du ticker afin que chaque référence textuelle pointe vers une ligne fixe ; les leaderboards (volume, quote snapshot) sont classés par valeur, et chaque affirmation de position est encodée comme une limite de contrôle pour cette position. Chaque comparaison hebdomadaire sur cette page — part de la breadth, décompte des chips vertes/rouges, contrats options et part des 0DTE, décompte des mises à jour de quotes — est recalculée à partir du 7 juillet (et du 6 juillet si une clôture précédente est nécessaire) dans le même bloc de requête, et n'est jamais reprise d'un article précédent.

Notes complètes sur les données

Le panel de breadth décompte les titres ayant une clôture en séance régulière sur les deux sessions et avec au moins 1 million de dollars échangés le jour mesuré ; le décompte des exclusions (5284 de 11439) permet de visualiser la queue de distribution. Les colonnes temporelles day_low/day_high du chip complex utilisent le pattern argMin/argMaxIf(..., (value, timestamp)) pour une résolution déterministe des ex æquo. Les étiquettes des buckets de volume-smile sont en ET (%H:%i), calculées avec toTimeZone uniquement dans la liste SELECT. Le panel options-tape détecte l'expiration le jour même via la correspondance de sous-chaîne du ticker OCC (substring(ticker, length(ticker) - 14, 6)) plutôt que via options_trades.expiration_date (cette colonne est erronée, selon la note de prévolage standard). Les symboles dans KNOWN_AMBIGUOUS_TICKERS sont exclus des requêtes SQL pour les volume-leaders et news-attention afin que les mentions "le plus X" ne concernent que des noms vérifiables. Le ticker des top-news utilise un départage déterministe (argMax(t, (n, t))) ; top_news_lead_over_next = 0 indique un ex æquo, d'où l'utilisation de l'expression "parmi les plus mentionnés". Le panel treasury effectue une jointure sur deux lignes de snapshot quotidien ; l'absence d'un snapshot pour l'une des deux dates produit zéro ligne, et la limite row_count est appliquée. Les décomptes stocks-quote et options-quote sont des scans complets du tape sur les partitions journalières ; les décomptes par ticker nommé sont exprimés en millions pour correspondre aux unités de leurs colonnes. Les médianes de spread utilisent quantileExact (déterministe) ; le panel trailing spread est une moyenne (avgIf), indiquée comme telle.

Méthodologie

  • Source des données de marché : consolidated tape — delayed_stocks_minute_aggs pour les prix et volumes des indices et des titres, cache_stocks_quotes pour les comptages NBBO et les quoted spreads, cache_options_quotes et options_trades pour le tape des options.
  • Gestion du fuseau horaire : tous les horodatages stockés sont en UTC ; les étiquettes horaires ET sont calculées avec toTimeZone(..., 'America/New_York') uniquement dans les listes SELECT ; les clauses WHERE utilisent les littéraux UTC bruts.
  • Fenêtre d'horaires réguliers : 13:30–20:00 UTC, vérifiée par rapport aux minute bars observées sur le SPY (panneau de vérification de session), et non par calcul calendaire.
  • Définition du spread : (ask - bid) / midpoint × 10,000 en points de base sur les quotes two-sided valides pour le snapshot ; le panneau du mois glissant est une largeur moyenne en cents, indiquée comme une moyenne.
  • Comparaisons avec la session précédente : calculées directement dans la requête à partir du 7 juillet (et du 6 juillet pour le day-over-day du mardi) — jamais reportées d'un post précédent.
  • Agrégats déterministes : quantileExact, argMin/argMax avec clé par tuple, et un tie-break déterministe basé sur l'actualité pour garantir des régénérations stables.
  • Date de référence du warehouse : 10 juillet 2026 (T+2 pour la période) ; les tapes des deux sessions sont entièrement ingérées à ce niveau de profondeur.

Liens croisés : récapitulatif du 7 juillet 2026, coûts de trading d'options, bases du bid-ask spread, options 0DTE, et volume relatif.