Résumé du marché 6 juillet 2026 chiffres clés
Réouverture après l'Independence Day avec un gap haussier sur la croissance. Analyse du spread sectoriel et des quotes les plus serrées du mois.
Lundi 6 juillet 2026 — première séance après le week-end de l'Independence Day — a ouvert par un gap haussier porté par les valeurs de croissance, puis a maintenu cette dynamique. Le QQQ a clôturé à 1.39% face à un DIA à 0.42%, reflétant la rotation de jeudi, avec une breadth positive : 3861 titres liquides ont progressé contre 2242. L'essentiel du mouvement provient du gap de réouverture, évalué au niveau le plus serré de l'indice sur le mois écoulé. Tous les chiffres ci-dessous proviennent d'une requête stockée.
Le tableau de bord
Les variations sont comparées à la dernière minute de la séance régulière du 6 juillet par rapport au jeudi 2 juillet — soit un jour de fermeture du marché en arrière.
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-02 13:30:00' AND window_start < '2026-07-02 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-06 13:30:00' AND window_start < '2026-07-06 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 rendement de 1.39% de QQQ a dominé les quatre ETF d'indices, tandis que le rendement de 0.42% de DIA était le plus faible — l'inverse exact de jeudi, lorsque DIA progressait et QQQ reculait. SPY a clôturé à 0.87%, IWM à 0.45%. La dynamique de la journée repose sur les gaps plutôt que sur la progression continue : QQQ a ouvert à 1.01% au-dessus de la clôture de jeudi et n'a ajouté que 0.38% de progression entre l'ouverture et la clôture ; le gap de 0.53% de SPY a représenté la majeure partie de son gain de 0.87% sur la journée. IWM (0.07%) et DIA (0.17%) ont eu des gaps minimes et ont progressé par paliers durant la séance.
La journée était-elle inhabituelle ?
Le SQL exact derrière chaque chiffre
SELECT round(anyIf(oc_pct, d = toDate('2026-07-06')), 2) AS day_move_pct,
arrayCount(x -> x > abs(anyIf(oc_pct, d = toDate('2026-07-06'))), groupArrayIf(abs(oc_pct), d != toDate('2026-07-06'))) + 1 AS abs_move_rank,
count() AS 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-06 00:00:00')
AND window_start < toDateTime('2026-07-07 00:00:00')
AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
GROUP BY d
)Au niveau de l'indice, non : la variation du SPY entre l'ouverture et la clôture de 0.34% se classe 13 sur 19 sessions précédentes en valeur absolue — une performance moyenne. L'activité intraday était ordinaire ; l'essentiel de la dynamique s'est joué sur le gap.
Largeur de marché : reprise de la croissance
Le SQL exact derrière chaque chiffre
WITH per_ticker AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-06 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 00:00:00')) AS day_close,
sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 00:00:00') AS day_dollar_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE (window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 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 > 03861 hausses, 2242 baisses, 86 inchangés — 62.4% de la tape liquide ont progressé. La largeur de marché par pondération et par nombre égal concordent et sont toutes deux positives, alors qu'elles divergeaient jeudi. Le filtre exclut 5361 des 11550 tickers à double session avec un volume inférieur à 1M$.
Par secteur : quelle était l'ampleur de la divergence ?
Quatre méga-capitalisations ne font pas un marché. Le panel évalue la journée via les onze principaux ETF sectoriels — un fonds par segment du S&P 500, le même panier chaque session. Observez l'écart entre le meilleur et le pire secteur : la dispersion de la journée.
Le SQL exact derrière chaque chiffre
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-06 00:00:00')) AS prior_close,
toFloat64(argMinIf(open, window_start, window_start >= '2026-07-06 00:00:00')) AS day_open,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 00:00:00')) AS day_close,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 00:00:00') / 1e9, 2) AS day_dollar_bn
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-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00'))
GROUP BY ticker
)
SELECT
ticker,
round((day_close / prior_close - 1) * 100, 2) AS pct_chg,
round((day_open / prior_close - 1) * 100, 2) AS gap_pct,
round((day_close / day_open - 1) * 100, 2) AS intraday_pct,
day_dollar_bn,
round(max((day_close / prior_close - 1) * 100) OVER () - (day_close / prior_close - 1) * 100, 2) AS points_behind_leader
FROM per_name
ORDER BY pct_chg DESC, ticker ASCLa technologie (XLK) a dominé la journée à 1.71%, l'essentiel de la performance provenant de l'écart : 1.19% à l'ouverture, 0.52% sur les six heures et demie suivantes. Les services financiers (0.99%) et l'industrie (0.9%) ont suivi. Puis la tendance s'inverse : cinq lignes vertes cèdent la place à six lignes rouges, le côté défensif — services publics, santé, consommation de base — chutant jusqu'à -1.08%. Du haut vers le bas, 2.79 points de pourcentage séparent le meilleur du pire lors d'une journée où l'indice S&P a évolué de 0.87% — soit plusieurs fois la variation de l'indice, et cela démontre qu'il ne faut pas interpréter une journée verte de manière uniforme. L'immobilier et les services publics ont évolué à l'opposé de la tech : des ouvertures quasi stables (0.09%, -0.11%), suivies d'une baisse continue sur la session (-1.01% et -0.92% de l'ouverture à la clôture).
Le point fort de la journée : le secteur mémoire en demi-reprise
Le complexe mémoire et stockage qui s'est effondré mercredi et jeudi a rebondi lundi, mais seulement partiellement.
Le SQL exact derrière chaque chiffre
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-06 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-07-06 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-07-06 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-07-06 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-06 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'SNDK', 'STX', 'WDC')
AND ((window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 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, 2) AS day_high,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
round(day_low, 2) AS day_low,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
day_dollar_bn
FROM per_name
ORDER BY tickerLes deux fabricants de disques ont mené le rebond : Western Digital 7.14% et Seagate 6%, atteignant leur sommet en milieu de matinée (10:44 et 10:39 ET). Les deux plus gros titres n'ont pas suivi : MU a ajouté 0.88%, marquant son point bas sur la bougie de clôture (15:59) ; SanDisk a terminé à -0.03% dans une fourchette de 7.27%. MU a tout de même échangé 30.9 milliard de dollars d'actions, soit plus que les trois autres réunis (l'analyse détaillée de MU traite de son trimestre).
L'autre moitié de la rotation s'est concentrée sur les megacaps :
Le SQL exact derrière chaque chiffre
WITH per_name AS (
SELECT
ticker,
toFloat64(argMaxIf(close, window_start, window_start < '2026-07-06 00:00:00')) AS prior_close,
toFloat64(argMaxIf(close, window_start, window_start >= '2026-07-06 00:00:00')) AS day_close,
maxIf(toFloat64(high), window_start >= '2026-07-06 00:00:00') AS day_high,
minIf(toFloat64(low), window_start >= '2026-07-06 00:00:00') AS day_low,
argMinIf(window_start, toFloat64(low), window_start >= '2026-07-06 00:00:00') AS low_bar,
argMaxIf(window_start, toFloat64(high), window_start >= '2026-07-06 00:00:00') AS high_bar,
round(sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-07-06 00:00:00') / 1e9, 2) AS day_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'TSLA')
AND ((window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00')
OR (window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 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, 2) AS day_high,
formatDateTime(toTimeZone(high_bar, 'America/New_York'), '%H:%i') AS day_high_et,
round(day_low, 2) AS day_low,
formatDateTime(toTimeZone(low_bar, 'America/New_York'), '%H:%i') AS day_low_et,
round((day_high / day_low - 1) * 100, 2) AS range_pct,
day_dollar_bn
FROM per_name
ORDER BY tickerTSLA a progressé de manière constante jusqu'à 6.86% — avec un point bas à 09:37 ET et un point haut sur la bougie de clôture (15:59) — à l'opposé de sa chute de jeudi. AAPL a ajouté 1.49% et NVDA 0.57% ; MSFT était la seule megacap en baisse à -0.7%, son point haut ayant été atteint à l'ouverture de 09:30.
Flux de capitaux
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-06 13:30:00' AND window_start < '2026-07-06 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-06 13:30:00' AND window_start < '2026-07-06 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) DESCSPY a dominé les échanges avec 31.49 milliards $, suivi de près par MU ($30.9 milliards). Cela met fin à la série de quatre sessions de MU en tête (Lundi à Jeudi). Sur le marché des actions, l'ETF inverse 3x sur les semi-conducteurs SOXS a échangé 467.1 millions de titres, affichant à nouveau le plus gros volume malgré la hausse des actions qu'il suit.
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-06 13:30:00' AND window_start < '2026-07-06 20:00:00'
GROUP BY et_time
ORDER BY et_time1.96 milliards d'actions lors de la première demi-heure, un creux de 0.68 milliards à 14:30, puis 2.1 milliards lors de la clôture à 15:30 — une courbe intraday classique, avec des volumes plus élevés en début et en fin de séance.
Le tape des options
Le SQL exact derrière chaque chiffre
WITH
(
SELECT (any(underlying_symbol), any(toFloat64(strike_price)), any(option_type),
any(toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6)))),
sum(size), count(), round(avg(toFloat64(price)), 3))
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-07 00:00:00'
GROUP BY ticker
ORDER BY sum(size) DESC
LIMIT 1
) AS top_contract,
(
SELECT round(toFloat64(argMax(close, window_start)), 2)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 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) = '260706') / sum(size), 1) AS same_day_expiry_pct,
round(toFloat64(sumIf(size, substring(ticker, length(ticker) - 14, 6) = '260706')) / 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 = 'TSLA')) / 1e6, 2) AS tsla_contracts_m,
top_contract.1 AS top_contract_underlying,
top_contract.2 AS top_contract_strike,
top_contract.3 AS top_contract_type,
if(top_contract.3 = 'C', 1, 0) AS top_contract_is_call,
top_contract.4 AS top_contract_expiry,
round(toFloat64(top_contract.5) / 1e6, 2) AS top_contract_volume_m,
round(top_contract.7, 3) AS top_contract_avg_price,
round(spy_regular_close - top_contract.2, 2) AS spy_close_minus_strike
FROM global_markets.options_trades
WHERE sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-07 00:00:00'Le volume d'options échangées s'est élevé à 60.98 millions de contrats pour 10.53 millions de transactions, dont 58.4% de calls. Les expirations le jour même (0DTE) ont représenté 38.7% du volume (23.57 millions de contrats) — un lundi 0DTE classique, inférieur au chiffre de jeudi, chargé en volume avant le jour férié. Le contrat le plus actif était le call SPY $751 à expiration le jour même, avec 1.08 millions de contrats à un prix moyen de $0.564, le SPY clôturant à $0.3 au-dessus du strike — en position "in the money". Un call en tête de liste, alors que jeudi s'était terminé sur un put.
The quote tape: did the gap up trade at wide markets?
Under every price above sits the quote stream — the National Best Bid and Offer, re-quoted continuously across every listed name. A gap open is where quotes can turn hostile, so we measure it, every session.
Le SQL exact derrière chaque chiffre
SELECT
round(countIf(toDate(sip_timestamp) = toDate('2026-07-06')) / 1e6, 2) AS jul6_updates_m,
round(countIf(toDate(sip_timestamp) = toDate('2026-07-02')) / 1e6, 2) AS jul2_updates_m,
round((countIf(toDate(sip_timestamp) = toDate('2026-07-06')) / countIf(toDate(sip_timestamp) = toDate('2026-07-02')) - 1) * 100, 1) AS day_over_day_pct,
round(countIf(sip_timestamp >= '2026-07-06 13:30:00' AND sip_timestamp < '2026-07-06 14:00:00') / 1e6, 2) AS jul6_open_half_hour_m,
round(countIf(sip_timestamp >= '2026-07-06 17:30:00' AND sip_timestamp < '2026-07-06 18:00:00') / 1e6, 2) AS jul6_midday_half_hour_m,
round(countIf(sip_timestamp >= '2026-07-06 19:30:00' AND sip_timestamp < '2026-07-06 20:00:00') / 1e6, 2) AS jul6_close_half_hour_m
FROM global_markets.cache_stocks_quotes
WHERE (sip_timestamp >= '2026-07-02 00:00:00' AND sip_timestamp < '2026-07-03 00:00:00')
OR (sip_timestamp >= '2026-07-06 00:00:00' AND sip_timestamp < '2026-07-07 00:00:00')The tape carried 391.96 million NBBO updates on Monday against 597.22 million Thursday — -34.4%, a third fewer messages than the pre-holiday session — and they piled into the open: 58.66 million in the first half hour against 20.74 million at 1:30pm and 33.7 million into the close. Fewer quotes than Thursday, but not wider ones:
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-06 13:30:00' AND sip_timestamp < '2026-07-06 13:42:00'), 2) AS open_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-06 17:30:00' AND sip_timestamp < '2026-07-06 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-06 13:30:00' AND sip_timestamp < '2026-07-06 13:42: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-06 17:30:00' AND sip_timestamp < '2026-07-06 17:42:00'), 2) AS spread_delta_bps,
round(countIf(sip_timestamp >= '2026-07-06 13:30:00' AND sip_timestamp < '2026-07-06 13:42:00') / 1e3, 1) AS open_updates_k,
round(countIf(sip_timestamp >= '2026-07-06 17:30:00' AND sip_timestamp < '2026-07-06 17:42:00') / 1e3, 1) AS midday_updates_k,
round(countIf(sip_timestamp >= '2026-07-06 13:30:00' AND sip_timestamp < '2026-07-06 13:42:00') / countIf(sip_timestamp >= '2026-07-06 17:30:00' AND sip_timestamp < '2026-07-06 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 ('DIA', 'IWM', 'MSFT', 'MU', 'QQQ', 'SNDK', 'SPY', 'STX', 'TSLA', 'WDC')
AND sip_timestamp >= '2026-07-06 13:30:00' AND sip_timestamp < '2026-07-06 20:00:00'
GROUP BY ticker
ORDER BY tickerThe bid-ask spread is the cost of crossing, in basis points of the mid-price — 1 bp is a penny on a $100 stock. No checked name quoted tighter in the gap's first twelve minutes than midday, and SPY's touch was identical in both (0.27 bps, 0 bps of change) even as it re-quoted 3x faster into the open. The width penalty landed on single names, not index funds: SanDisk paid the most (+12.9 bps, 8.16 to 21.07), MU +3.63, TSLA +2.89, against QQQ's 0.42 bps on a 0.83 bps touch. Seagate answers "isn't everything liquid?": 30.94 bps wide at the open, over a hundred times SPY's touch.
Le SQL exact derrière chaque chiffre
SELECT
round(anyIf(avg_spread_cents, d = toDate('2026-07-06')), 3) AS jul6_avg_spread_cents,
arrayCount(x -> x < anyIf(avg_spread_cents, d = toDate('2026-07-06')), groupArrayIf(avg_spread_cents, d != toDate('2026-07-06'))) + 1 AS tightness_rank,
count() AS sessions_compared,
round(max(avg_spread_cents), 3) AS widest_session_cents,
round(avgIf(avg_spread_cents, d != toDate('2026-07-06')), 3) AS other_sessions_avg_cents,
replaceAll(formatDateTime(min(d), '%M %e, %Y'), ' ', ' ') 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-04 00:00:00')
AND sip_timestamp < toDateTime('2026-07-07 00:00:00')
AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY d
)Across the whole regular day, July 6 was SPY's tightest session of the trailing month: an update-weighted average quoted spread of 1.815 cents, rank 1 of 21 sessions since June 4, 2026, against a month averaging 2.337 cents and reaching 2.865 at its widest. A holiday-thinned quote count still gave the index buyer the cheapest touch on the board.
Taux : une courbe stable durant le long week-end
Le SQL exact derrière chaque chiffre
SELECT
t.1 AS curve_point,
round(t.2, 2) AS jul6_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-06') AS d,
(SELECT * FROM global_markets.treasury_yields WHERE date = '2026-07-02') AS p
)La courbe a peu évolué durant le long week-end. Le taux à 10 ans s'est maintenu à 4.48% et le spread 2s10s à 0.35 points de base, soit un écart de seulement un ou deux points de base par rapport à la clôture du 2 juillet ; le taux à 3 mois a été le seul élément notable avec une variation de 5 points de base.
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-06'
) AS news,
(
SELECT (argMax(t, n), max(n))
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-06'
)
WHERE t != 'SPCX'
GROUP BY t
)
) AS top_news
SELECT
(SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date = '2026-07-06') AS ex_dividend_records,
(SELECT count() FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS splits_executed,
(SELECT countIf(toFloat64(split_from) > toFloat64(split_to)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS reverse_splits,
(SELECT countIf(toFloat64(split_to) > toFloat64(split_from)) FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06') AS forward_splits,
(SELECT count() FROM global_markets.stocks_ipos WHERE listing_date = '2026-07-06') AS ipos_listed,
(SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-06') AS sec_filings,
(SELECT uniqExactIf(accession_number, form_type = '4') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-06') AS insider_form4_filings,
(SELECT uniqExactIf(accession_number, form_type = '8-K') FROM global_markets.stocks_sec_edgar_index WHERE filing_date = '2026-07-06') AS filings_8k,
news.1 AS news_articles,
news.2 AS news_publishers,
top_news.1 AS most_covered_ticker,
top_news.2 AS most_covered_articles118 titres sont passés en ex-dividend, 15 splits ont été effectués, 0 nouvelles cotations ont été enregistrées et l'index de la SEC a répertorié 3161 dépôts — 1219 Form 4s, 201 8-Ks — un volume inférieur à celui du jeudi précédant les fêtes. Le flux d'actualités a diffusé 236 articles, le titre le plus couvert étant NVDA avec 25 articles.
Le mur des reverse-splits derrière les écrans de mouvement
14 des splits du 15 étaient des reverse-splits — des consolidations d'actions, principalement sur des titres sous la barre du dollar — contre 1 en forward splits. Un reverse-split transforme plusieurs anciennes actions en une seule à un prix proportionnellement plus élevé. Un écran non ajusté rapporte alors un « gain » à trois chiffres alors qu'aucune plus-value n'a été réalisée. Voici l'ensemble du mur :
Le SQL exact derrière chaque chiffre
SELECT
s.ticker AS ticker,
toFloat64(s.split_from) AS old_shares,
toFloat64(s.split_to) AS new_shares,
round(toFloat64(s.split_from) / toFloat64(s.split_to), 0) AS old_shares_per_new,
p.prev_close AS jul2_close,
d.day_close AS jul6_close,
round((d.day_close / p.prev_close - 1) * 100, 1) AS unadjusted_pct_chg
FROM (
SELECT ticker, any(split_from) AS split_from, any(split_to) AS split_to
FROM global_markets.stocks_splits
WHERE execution_date = '2026-07-06'
GROUP BY ticker
) s
INNER JOIN (
SELECT ticker, round(toFloat64(argMax(close, window_start)), 2) AS prev_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= '2026-07-02 13:30:00' AND window_start < '2026-07-02 20:00:00'
AND ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06')
GROUP BY ticker
HAVING prev_close > 0
) p ON s.ticker = p.ticker
INNER JOIN (
SELECT ticker, round(toFloat64(argMax(close, window_start)), 2) AS day_close
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'
AND ticker IN (SELECT ticker FROM global_markets.stocks_splits WHERE execution_date = '2026-07-06')
GROUP BY ticker
HAVING day_close > 0
) d ON s.ticker = d.ticker
ORDER BY unadjusted_pct_chg DESC, ticker ASCChaque ligne du 12 est une consolidation affichant un « gain » de trois chiffres ou plus sur le tape brut — de 31450% en haut (une consolidation de 200 pour 1, cours de clôture non ajusté passant de $0.02 à $6.31) jusqu'à 226.1% pour le ratio le plus faible (3 pour 1). À mi-chemin dans le tableau se trouve l'exemple le plus explicite : un reverse-split de 10 pour 1 a fait passer la clôture non ajustée de TXXS de $2.35 jeudi à $24.34 lundi — dix anciennes actions devenant une seule, et non un rallye décuplé. Un screener basé sur les variations de prix bruts placerait ce tableau entier au-dessus de chaque véritable mouvement ; le nôtre exclut les splits. Le forward split de CRWD de jeudi a simulé l'effet inverse : un krach.
La session, confirmée — le premier retour après la pause
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-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS regular_session_bars,
uniqExactIf(toDate(toTimeZone(window_start, 'America/New_York')), window_start >= '2026-07-06 13:30:00' AND window_start < '2026-07-06 20:00:00') AS day_sessions,
(SELECT count() FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-03 00:00:00' AND window_start < '2026-07-04 00:00:00') AS jul3_spy_bars,
(SELECT replaceAll(formatDateTime(min(date), '%M %e, %Y'), ' ', ' ') FROM global_markets.stocks_market_holidays WHERE date > '2026-07-06' AND status = 'closed') AS next_closure_date,
(SELECT argMin(name, date) FROM global_markets.stocks_market_holidays WHERE date > '2026-07-06' AND status = 'closed') AS next_closure_name
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-07-06 00:00:00' AND window_start < '2026-07-07 00:00:00'Le 6 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. Le vendredi précédent, le 3 juillet, le SPY a affiché 0 bougies — une clôture complète car le 4 juillet (Independence Day) tombait un samedi. Prochaine clôture : Labor Day, September 7, 2026. La semaine de quatre sessions précédant la pause est détaillée dans le récapitulatif hebdomadaire.
FAQ
How did the stock market do on July 6, 2026?
All four big index ETFs closed higher — QQQ 1.39%, SPY 0.87%, IWM 0.45%, DIA 0.42% — with 62.4% of liquid names advancing, most of it an overnight gap.
Which sector led on July 6, 2026?
Technology (XLK) led the eleven sector ETFs at 1.71%, the defensive end as low as -1.08% — a best-to-worst spread of 2.79 percentage points, several times the S&P tracker's 0.87% move.
Was the stock market open on Independence Day 2026?
No. July 4 fell on a Saturday, and the exchanges observed Independence Day on Friday July 3 — a closure receipted above by the 0 SPY minute bars that printed. July 6 was the first session back.
Why did some stocks show huge one-day gains on July 6?
14 reverse splits executed. Consolidating many old shares into one at a proportionally higher price makes an unadjusted screen report a "gain" of hundreds of percent where the holder's position value is unchanged — the 12 names above are all of that kind.
Were spreads wide on the gap open?
Only in single stocks. SPY's median quoted spread in the first twelve minutes was 0.27 basis points, identical to its midday level; SanDisk quoted 12.9 bps wider than midday.
Notes sur les données
- Le volume en dollars est une approximation par minute — calculé par la somme de (cours de clôture × volume) pour chaque barre d'une minute.
- Le panier sectoriel est une méthode déclarée, pas un champ fournisseur : il comprend les onze principaux ETF sectoriels du S&P (XLB, XLC, XLE, XLF, XLI, XLK, XLP, XLRE, XLU, XLV, XLY), ce même ensemble à chaque session.
- Les spreads cotés sont les médianes de (ask − bid) ÷ mid sur les cotations bidirectionnelles valides ; les cotations unidirectionnelles, nulles ou croisées sont exclues et comptabilisées dans le panel.
- Une cotation avec symbole réutilisé est exclue des classements en attendant la vérification de l'entité (reçus).
Méthodologie
- La période correspond à une seule session de trading (session 1, vérifiée par l'observation des bougies). Les horodatages sont stockés en UTC et convertis en heure de New York lors des requêtes. Le terme « Close » désigne la dernière bougie d'une minute de la session régulière ; le changement de jour compare le 6 juillet au 2 juillet — la session précédente avant la clôture du 3 juillet, vérifiée par les bougies et non supposée.
- Les décimales sont converties en flottants 64 bits avant les calculs de ratios. Les panneaux sont lus une seule fois, lors de la rédaction, via le chemin de lecture seule sécurisé.
Chaque panneau 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 : 2 juillet. Suivante : 7 juillet.