Résumé du marché 7 juillet 2026 chiffres clés
Chute des semi-conducteurs sans impact sur l'indice, NVDA en hausse et spread du SPY au plus bas. Le breadth est de deux contre un en baisse.
Le mardi 7 juillet 2026 a effacé la hausse de la première moitié de la hausse de l'ouverture de lundi — et bien plus encore : le QQQ a clôturé à -1.82%, annulant presque totalement son gain de lundi, face au -0.29% du DIA. En sous-jacence, le ratio était de deux-contre-un en baisse : 4034 boursiers en baisse contre 2091 boursiers en hausse. L'élément majeur de la journée a été la chute des semi-conducteurs, avec un volume plusieurs fois supérieur à celui de l'indice — un mouvement dont les géants du secteur ont été exclus. Chaque chiffre ci-dessous provient d'une requête stockée — développez n'importe quel panneau pour obtenir le SQL exact.
Le tableau de bord
Chaque variation compare la dernière bougie d'une minute de la séance régulière du 7 juillet à celle du lundi 6 juillet — des sessions de trading consécutives.
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-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.tickerLe -1.82% du QQQ a entraîné à la baisse les quatre ETF indiciels ; le SPY a clôturé à -0.48%, l'IWM à -0.9%, et le -0.29% du DIA a été la variation la plus faible. La divergence entre le gap et la tendance (gap-versus-grind) montre une opposition entre les deux extrémités du marché à l'ouverture : le gap de nuit du QQQ était de -1.17% et sa progression de l'ouverture à la clôture était de -0.65% — le gap a causé l'essentiel de la baisse — tandis que le DIA a fait un gap à la hausse de 0.47% mais a terminé dans le rouge, avec une variation de l'ouverture à la clôture de -0.76%. La direction du marché a changé à chaque session depuis le jeudi : le DIA menait jeudi, le QQQ menait lundi, et le DIA menait à nouveau mardi.
La journée était-elle inhabituelle ?
Le SQL exact derrière chaque chiffre
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)Au niveau de l'indice, pas particulièrement. La variation de clôture à clôture du QQQ de -1.82% se classe au 9 des 21 sessions précédentes en valeur absolue, et le mouvement de l'ouverture à la clôture du SPY de -0.34% se classe au 15 des 21 — un mois glissant incluant les fortes variations de fin juin qui fixe une barre très haute. C'est la dispersion sous-jacente qui distingue la journée du 7 juillet.
Largeur de marché : deux baisses pour une hausse
Le SQL exact derrière chaque chiffre
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 > 02091 hausses, 4034 baisses, 59 inchangés — 33.8% de la tape liquide a progressé, la hausse de lundi s'est inversée. Le filtre exclut 5276 de 11460 tickers à double session sous les un million de dollars échangés, comptabilisés ici.
Le secteur des semi-conducteurs a chuté — sauf ses principales valeurs
Les ventes se sont concentrées sur les semi-conducteurs : les fabricants de puces, les équipementiers qui les fournissent, le secteur du stockage associé et les ETF à effet de levier qui les répliquent. La corrélation et l'ampleur des mouvements sont détaillées ci-dessous ; les données n'indiquent pas la cause.
Le SQL exact derrière chaque chiffre
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 tickerTeradyne (-9.63%) et Intel (-9.59%) ont perdu près d'un dixième de leur valeur, suivies de près par Marvell (-7.41%), KLA (-7.23%), Lam Research (-6.8%) et AMD (-6.41%). Les valeurs de mémoire et de stockage qui ont rebondi de moitié lundi ont immédiatement repris leur baisse : SanDisk -7.1% sur une amplitude de 10.36% entre le plus haut et le plus bas, Western Digital -7.81%, Seagate -4.84%, et MU -4.61% — MU a échangé 41.6 milliards de dollars d'actions, soit plus que les trois autres valeurs de stockage réunies (l'analyse détaillée de MU explique le contexte).
Les deux géants du secteur ont résisté : NVDA a clôturé en hausse à 0.67% et Broadcom a terminé quasiment stable à -0.83% — une journée rouge pour l'ensemble du secteur, hors ses plus grandes capitalisations (l'analyse détaillée de NVDA en juin).
Le timing était synchronisé — une chute soudaine : TER, LRCX et MU ont atteint leurs plus bas de séance à 10:41, 10:41 et 10:41 ET, avec SanDisk, Marvell, KLA, AVGO et SOXL dans les mêmes minutes (le tableau contient chaque horodatage), et SOXS, l'ETF inverse 3x sur les semi-conducteurs, a atteint son plus haut de séance à 10:42 — une dynamique inversée. Intel a continué de chuter longtemps après la stabilisation des autres, atteignant son plus bas à 15:18. Les produits dérivés à effet de levier reflètent l'ampleur du mouvement : SOXL -15.15% contre SOXS +15.87%.
L'autre côté du marché
Un ratio de deux contre un en baisse laisse toutefois un tiers en hausse. Voici les secteurs qui ont progressé alors que les semi-conducteurs reculaient :
Le SQL exact derrière chaque chiffre
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 tickerL'énergie et la santé ont porté la colonne verte : Exxon +3.78%, Chevron +3.47%, Johnson & Johnson +3.07%, Eli Lilly +2.75%, UnitedHealth +2.41%. Les deux méga-capitalisations de ce panel ont divergé : META a progressé de +2.52% tandis que TSLA a rendu la majeure partie de la hausse unilatérale de lundi avec un spread de -4.02%. Enfin, la variation individuelle la plus marquée du marché : Crinetics Pharmaceuticals (CRNX) a clôturé à +98.79% avec 4.19 milliards de dollars échangés, soit presque le double — l'ensemble du mouvement est survenu via un gap à l'ouverture (98.91% à l'ouverture ; la séance régulière ne l'a fait varier que de -0.06%), le type de réévaluation entre les sessions qui se produit lors des échanges en pré-marché. Les données n'indiquent pas la cause.
Où les capitaux ont circulé
Le SQL exact derrière chaque chiffre
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) DESCMU a dominé les échanges du dollar avec 41.6 milliards de dollars — une session après avoir cédé la première place, elle a repris le leadership — suivie de SPY (28.68 milliards de dollars) et QQQ (26.54 milliards de dollars), ainsi que de trois autres valeurs du secteur des semi-conducteurs — NVDA (19.95 milliards de dollars), SNDK (19.73 milliards de dollars) et INTC (13.82 milliards de dollars) — complétant le top six. La concentration du turnover sur les titres individuels est indiquée par le volume relatif.
Sur le marché des actions, SOXS a échangé 566.3 millions d'actions — l'ETF inverse 3x sur les semi-conducteurs arrive en tête pour la troisième séance consécutive (lundi et jeudi affichent les données précédentes), cette fois lors de la journée où son secteur a effectivement cassé. CPOP illustre l'effet inverse : 161.3 millions d'actions ont généré seulement 0.02 milliard de dollars — les volumes d'actions sont plus faibles pour les titres bon marché. Base : séance régulière du 7 juillet ; une cotation avec symbole réutilisé est exclue en attente de vérification de l'entité — ses reçus.
La dynamique de la séance
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-07 13:30:00' AND window_start < '2026-07-07 20:00:00'
GROUP BY et_time
ORDER BY et_time2 milliards d'actions échangées durant la première demi-heure, un creux de 0.64 milliards à 13:30, et 2.14 milliards lors de la clôture à 15:30 — une courbe en sourire classique, avec un volume maximal en fin de séance.
Le tape des options
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) = '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'61.13 millions de contrats ont été échangés sur 10.6 millions de transactions — un volume comparable à lundi — et les calls ont représenté 55.6% du volume malgré une séance en baisse. Les expirations le jour même représentaient 31.2% du tape (19.08 millions de contrats) — la part 0DTE d'un mardi ordinaire. Les deux contrats les plus actifs de la journée encadraient la clôture, tous deux avec des strikes SPY expirant le jour même : le call à 749 $ (873438 contrats à une moyenne de 0.647 $) a terminé à 1.34 out of the money, et le put à 747 $ (785834 contrats à 0.88 $) a terminé à 0.66 de l'autre côté. La clôture de SPY à 747.66 s'est située entre les deux plus gros paris de la journée, et les deux ont expiré sans valeur.
Le flux de cotations
Sous chaque prix de cette page se trouve le flux de cotations — le National Best Bid and Offer (NBBO), re-coté en continu pour chaque titre listé. C'est le jeu de données le plus difficile à obtenir dans cet entrepôt. Il est mesuré ici à chaque session, qu'elle soit ordinaire ou non.
Le SQL exact derrière chaque chiffre
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'Le tape des actions a enregistré 492.76 millions de mises à jour NBBO le 7 juillet — soit 25.7% de plus que les 391.96 millions du lundi. Il y a eu plus de re-cotations, et non un élargissement des spreads :
Le SQL exact derrière chaque chiffre
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 tickerAux plus bas de la matinée, les titres vérifiés ont été re-cotés à des multiples de leur rythme de midi — MU 3.4x, SanDisk 4.1x, AMD 4.6x — et le bid-ask spread a à peine bougé : la largeur médiane de MU était de 5.02 bps en période de volatilité contre 4.81 à midi, 1.04 pour NVDA contre 1.01, et celui du SPY n'a pas bougé du tout (variation de 0 bps pour un touch de 0.27 bps). Les deux titres ayant subi une réelle pénalité de spread étaient AMD (+2.6 bps) et Intel (+0.95) — Intel étant le seul titre à continuer de chuter après la période de volatilité — tandis que la paire à effet de levier s'est en réalité resserrée au point bas (SOXL -2.59 bps, SOXS -1.49). Un vide de liquidité se traduit par des quotes larges et un silence ; ici, c'était l'inverse — une tempête de cotations avec un touch stable. Les coûts de transaction (crossing costs) sont restés dépendants des titres : SOXS affichait un spread de 19.59 bps au point bas contre 1.04 pour NVDA.
Le SQL exact derrière chaque chiffre
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
)Et voici la section "ordinaire" exécutée à chaque session : par moyenne pondérée par mise à jour du spread coté, le 7 juillet a été la session la plus serrée du SPY sur le mois écoulé — 1.809 cents, rang 1 sur 21, contre un mois qui a atteint 2.865 cents au plus large. Un tape rouge de deux-pour-un, avec un prix fixé au touch le plus serré du mois, est un fait que seul le flux de cotations peut confirmer.
Le SQL exact derrière chaque chiffre
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_ratioLe flux de cotations des options est encore plus important, et constitue le plus gros jeu de données de cet entrepôt. Le 7 juillet a enregistré 8.69 milliards de mises à jour NBBO sur les options, soit 17.6 fois la taille de l'ensemble du tape des actions de la même session (492.76 millions de mises à jour). Le tape des options du lundi comptait 6.49 milliards, le flux des options a donc augmenté de 34% d'une session à l'autre, parallèlement à l'augmentation de 25.7% du flux des actions.
Le SQL exact derrière chaque chiffre
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 > 0Les seuls contrats échéant en 2026 ont représenté 327.55 millions de ces mises à jour en horaires normaux, répartis sur 9116 contrats listés. Cela représente 66.5% de ce que l'ensemble du marché actions a coté le même jour, pour un seul sous-jacent. Les échéances du jour qui constituent le tape 0DTE représentent 13.61 millions d'entre elles.
Pendant les douze minutes de la zone de vide de la matinée, les contrats near-the-money à échéance le jour même affichaient une largeur médiane de 0.01 $, soit précisément ce qu'ils affichaient lors de la stabilité de midi (0.01 $, un delta de 0). Le taux de cotation pour cette même paire était de 3x : 191.1 mille mises à jour aux plus bas contre 64 mille à midi. Le touch des options a réagi comme le touch des actions. Il a maintenu sa largeur malgré l'activité intense des mécanismes de cotation. "Near-the-money" signifie un strike à moins de 2 $ du prix moyen du SPY sur la même période, et le tableau affiche les deux prix (746 en période de volatilité, 749.08 à midi).
Taux : la courbe a subi une vente massive avec les indicateurs de croissance
Le SQL exact derrière chaque chiffre
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
)Les Treasuries ont subi une vente massive parallèlement aux indicateurs de croissance. Le taux à un an a augmenté de 11 points de base pour atteindre 4.06%, le taux à dix ans de 7 à 4.55%, et le taux à trente ans de 6 à 5.05% — dépassant la barre des cinq pour cent. Le spread 2s10s s'est maintenu à 0.36 points de pourcentage (soit une variation de 1 points de base) : il s'agit d'un mouvement principalement parallèle et non d'un changement de forme de la courbe.
Le calendrier de la journée
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-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_articles79 dividend records sont passés en ex-dividend, 7 splits ont été exécutés — dont 5 étaient des reverse splits, ces consolidations sous la barre du dollar qui simulent des gains à trois chiffres sur un tape non ajusté, contre 2 en avance — et 1 nouvelles cotations sont arrivées. L'indice de la SEC a enregistré 2433 dépôts : 463 Form 4s, 173 8-Ks. Notre flux d'actualités a diffusé 215 articles provenant de 3 éditeurs ; le titre le plus couvert était NVDA avec 17 articles, soit 4 d'écart avec le nom suivant — le même NVDA qui a clôturé en hausse malgré la journée rouge de son secteur. Le flux contenait 0 articles sur CRNX, le plus fort gaineur du tape — l'attention d'un seul flux, pas celle des médias mondiaux.
La session, vérifiée
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-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'Le 7 juillet était une session complète, et non une clôture anticipée : les bougies du SPY s'étendent de 04:00 à 19:59 heure de New York avec exactement 390 bougies en séance régulière, et le tableau des jours fériés contient 0 lignes pour cette date. La prochaine clôture prévue est le Labor Day, 2026-09-07.
Notes sur les données
- Le volume en dollars est un indicateur par minute — cours de clôture × volume cumulés par barre d'une minute, pendant les heures de cotation régulières.
- La répartition gap-versus-grind est mesurée à partir de la première barre de la session régulière de chaque titre (l'ouverture) par rapport à la dernière clôture régulière de la session précédente ; le reste correspond à la variation entre l'ouverture et la clôture au cours du 7 juillet.
- Les points bas matinaux synchronisés ont été vérifiés par rapport aux barres adjacentes au moment de la rédaction — chaque point bas est tracé par ses minutes voisines et non par une seule transaction ; aucun n'a été classé comme anomalie. Lorsqu'un extrême est imprimé sur plus d'une minute, le tableau affiche la première barre correspondante (critère de départage déterministe).
- Un symbole réutilisé est exclu des classements de volume et de l'appel d'actualités en attente de vérification de l'entité ; son propre article contient les justificatifs.
- Les statistiques sur le spread coté excluent les cotations invalides (enregistrements NBBO unilatéraux ou croisés), et chaque tableau de spread compte ses propres exclusions dans une colonne dédiée. L'« update-weighted average spread » calcule la moyenne de la largeur cotée sur chaque mise à jour NBBO valide — les moments d'activité intense ont un poids plus élevé ; il s'agit d'une statistique de cotation et non d'un coût par transaction.
- Les cotations d'options du 7 juillet sont arrivées après la première publication de ce post.
cache_options_quotesprésente le délai d'ingestion le plus long de l'entrepôt, la première édition affichait donc une ligne de zéros là où se trouvent désormais les tableaux de cotations d'options. Les lignes sont arrivées, la limite de la ligne de zéros a échoué lors de la régénération, et cette révision lit les 8.69 milliards de mises à jour de la session. Le flux des cotations actions était complet dès le début : sa dernière mise à jour du 7 juillet est imprimée à la minute ET 1199, avec 77.13 millions de mises à jour durant la dernière heure régulière (colonnes de réception dans le tableau du flux de cotations). - Les largeurs de cotation des options sont mesurées near the money. La médiane par mise à jour sur chaque contrat listé le même jour est une statistique composite : les contrats deep in-the-money cotent en dollars, les contrats far out-of-the-money cotent en centimes, et les contrats qui re-cotent des changements au cours de la session sont inclus. La comparaison pocket-versus-midday se limite aux strikes à moins de 2 $ du prix moyen du SPY dans chaque fenêtre, et les deux prix sont des colonnes dans le tableau. Les cotations d'options invalides (unilatérales ou croisées) sont comptabilisées dans ce tableau, elles ne sont pas supprimées silencieusement.
- L'impression des bons du Trésor pour le 7 juillet a été ingérée tardivement — la première édition présentait un reçu avec un délai déclaré ; l'alerte s'est déclenchée le 8 juillet lors de l'arrivée de l'impression, et cette révision contient la courbe réelle.
Méthodologie
- La période correspond à une seule session de trading (session 1, vérifiée à partir des bougies observées et du calendrier des jours fériés — jamais supposée). Les horodatages sont stockés en UTC et convertis en heure de New York lors des requêtes. Le « Close » correspond à la dernière bougie d'une minute de la session régulière ; les changements de journée comparent le 7 juillet au 6 juillet, soit des sessions de trading consécutives.
- Les colonnes décimales sont converties en flottants 64 bits avant les calculs de ratios ; les échéances d'options sont extraites du ticker de l'OCC (la colonne d'échéance propre à la table est erronée). Tous les panels sont lus une seule fois, au moment de la rédaction, via le chemin de lecture seule sécurisé. État de l'entrepôt de données au 8 juillet 2026.
- La section quote-tape a été ajoutée lors de la révision du 8 juillet (la même révision qui a remplacé le retard de réception du treasury par le landed print), et ses panels d'options-quotes ont été réécrits une fois que les lignes NBBO des options du 7 juillet ont été intégrées. La génération est par conception un traitement par lots : le panel option-quote du SPY scanne quelques centaines de millions d'enregistrements NBBO, tandis que les comptages de tape-size lisent les totaux de lignes des partitions journalières, ce qui permet à une table contenant des milliards de lignes par session de répondre à un comptage en moins d'une seconde.
Chaque panel est le résultat d'une requête stockée — le graphique, le tableau et le SQL ne forment qu'un seul objet. Copiez l'un d'entre eux dans le terminal Strasmore pour l'utiliser. Session précédente : 6 juillet.