Strasmore Research
Market Recap

Récap marché : semaine du 29 juin 2026

Matt ConnorBy Matt Connor Updated 2026-07-22

La dernière semaine de juin a compté quatre séances : le marché a coté du lundi 29 juin au jeudi 2 juillet, puis a fermé le vendredi 3 juillet pour la fête de l'Indépendance. Le 4 juillet tombait un samedi, donc le jour férié a été observé le vendredi précédent. Les preuves de cette fermeture, comme de tout le reste ici, se trouvent dans les panneaux. Le fait mesuré le plus marquant de la semaine se trouve dans le tableau des volumes : un fabricant de puces mémoire a fait transiter 190.2 milliards de dollars sur la bande en quatre jours, soit une fois et demie le volume de SPY lui-même. Chaque chiffre de cette page provient d'un résultat de requête enregistré ; déployez n'importe quel panneau pour voir le SQL exact.

Le tableau de la semaine

La bande a-t-elle effacé la baisse de la semaine précédente, ou l'a-t-elle prolongée ? Le tableau de bord répond : effacée. Ce panneau calcule la variation hebdomadaire de chaque ETF indiciel et, pour comparaison, celle de la semaine d'avant, les deux calculées dans la même requête.

RequêteSemaine par semaine : les quatre ETF indiciels face à la clôture du vendredi précédent
Le SQL exact derrière chaque chiffre
SELECT ticker,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS prior_friday_close,
    round(argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS week_close,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS week_change_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
         / argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-18') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) - 1) * 100, 1) AS prior_week_change_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
  AND window_start >= toDateTime('2026-06-15 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY ticker
ORDER BY ticker

SPY a terminé la semaine à 744.8 $, en hausse de 2.2 % par rapport au vendredi précédent, après une semaine précédente à -2.3 %. QQQ a gagné 1 % après une semaine précédente à -4.6 %, DIA a progressé de 2 %, et IWM a clôturé à 297.53, 0 % sur la semaine, plat pendant que les grandes capitalisations montaient.

La semaine face à l'année écoulée

RequêteCette semaine face à l'année écoulée : SPY, ouverture-clôture par semaine (rang 1 = meilleur ; semaines courtes exclues)
Le SQL exact derrière chaque chiffre
SELECT round(anyIf(ret, wk = toDate('2026-06-29')), 2) AS week_2026_pct,
       arrayCount(x -> x > anyIf(ret, wk = toDate('2026-06-29')), groupArrayIf(ret, wk != toDate('2026-06-29'))) + 1 AS rank_best,
       count() AS weeks_compared,
       toString(min(wk)) AS first_week,
       anyIf(sessions, wk = toDate('2026-06-29')) AS sessions_this_week
FROM (
    SELECT toStartOfWeek(toDate(toTimeZone(window_start, 'America/New_York')), 1) AS wk,
           uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,
           (argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100 AS ret
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2025-06-29 00:00:00')
      AND window_start < toDateTime('2026-07-03 00:00:00')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY wk
    HAVING sessions >= 3
)

Mesurée en ouverture-clôture à l'intérieur de la semaine (de la première barre en heures régulières du lundi à la dernière du jeudi, un angle légèrement différent du tableau de bord basé sur la clôture du vendredi ci-dessus, et le relevé le précise), la semaine de SPY se classe 14e sur les 53 semaines précédentes (rang 1 = la meilleure) : dans la moyenne, au sein d'une année écoulée qui a contenu à la fois la chute et la reprise. Les semaines de moins de trois séances sont exclues par un garde-fou ; celle-ci en comptait 4. Le contexte historique s'étend avec la fenêtre observée : les récaps mensuel, trimestriel et semestriel classent leur période contre chaque année de la bande minute.

Quatre séances, puis un jour férié

Une semaine de bourse à cinq jours est une hypothèse, pas un fait : celle-ci n'en a compté que quatre. Le panneau de relevé vérifie la fermeture directement sur la bande : zéro barre SPY imprimée le 3 juillet, contre 1560 barres de séance régulière sur les quatre jours cotés.

RequêteLe relevé des séances : quatre jours cotés, une fermeture le vendredi, vérifiée sur la bande
Le SQL exact derrière chaque chiffre
SELECT
    (SELECT uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS sessions_in_week,
    (SELECT countIf((toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')) AS regular_bars_week,
    (SELECT count() FROM global_markets.delayed_stocks_minute_aggs
     WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-07-03 00:00:00') AND window_start < toDateTime('2026-07-04 00:00:00')) AS jul3_spy_bars
RequêteSéance par séance : clôture de SPY, variation et volume de la journée entière
Le SQL exact derrière chaque chiffre
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
    round(argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199), 2) AS spy_close,
    round((argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) / any(prev) - 1) * 100, 1) AS change_pct,
    round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
INNER JOIN (
    SELECT d, lagInFrame(c) OVER (ORDER BY d ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, argMaxIf(toFloat64(close), window_start, (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
        GROUP BY d
    )
) AS p ON toDate(toTimeZone(window_start, 'America/New_York')) = p.d
WHERE ticker = 'SPY' AND window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
GROUP BY et_date
ORDER BY et_date

Les quatre séances ont suivi l'horaire régulier complet : les 1560 barres régulières correspondent exactement à quatre séances de 390 minutes. La semaine a clôturé quasiment plate (-0.1 %) le 2026-07-02, à l'approche du jour férié. Les gains de la semaine ont été réalisés sur ses trois premières séances.

Ampleur du marché : quelle part a progressé

Un indice qui monte peut masquer un marché qui recule. Ce panneau compte chaque titre disposant d'une clôture des deux côtés de la semaine, l'ensemble exclu étant affiché plutôt que retiré en silence.

RequêteHausses et baisses sur la semaine, avec le filtre de liquidité affiché
Le SQL exact derrière chaque chiffre
SELECT
    countIf(chg > 0 AND NOT dropped) AS advancers,
    countIf(chg < 0 AND NOT dropped) AS decliners,
    countIf(chg = 0 AND NOT dropped) AS unchanged,
    countIf(dropped) AS dropped_by_liquidity_filter,
    count() AS tickers_with_both_closes
FROM (
    SELECT ticker,
        argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199)
      - argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) AS chg,
        sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29')) < 1e6 AS dropped
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-26 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
    GROUP BY ticker
    HAVING countIf(toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-26') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
       AND countIf(toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-06-29') AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199) > 0
)

5049 titres ont progressé sur la semaine contre 3529 en baisse (39 inchangés) : l'avance était large, bien au-delà des indices seuls. Le filtre de liquidité a mis de côté 3157 titres qui ont échangé moins d'1 million de dollars sur toute la semaine ; ils sont comptés ici, pas cachés.

Les leaders de la bande : une action au-dessus des ETF

RequêteVolume en dollars aux heures régulières, semaine du 29 juin (une cotation à symbole réutilisé exclue en attendant vérification de l'entité)
Le SQL exact derrière chaque chiffre
SELECT ticker,
    round(sum(toFloat64(close) * toFloat64(volume)) / 1e9, 1) AS dollar_bn,
    round(100 * sum(toFloat64(close) * toFloat64(volume)) / max(sum(toFloat64(close) * toFloat64(volume))) OVER (), 1) AS pct_of_leader
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= toDateTime('2026-06-29 00:00:00') AND window_start < toDateTime('2026-07-03 00:00:00')
  AND (toHour(window_start) * 60 + toMinute(window_start)) BETWEEN 810 AND 1199
  AND ticker NOT IN ('SPCX')
GROUP BY ticker
ORDER BY dollar_bn DESC
LIMIT 8

MU a mené toute la bande avec 190.2 milliards de dollars de volume en dollars aux heures régulières. SPY, le plus gros ETF, n'en a fait que 66.4 %. Une seule entreprise dépassant en volume le fonds indiciel par défaut du marché pendant une semaine entière est le fait mesuré marquant de la semaine ; cette page rapporte l'ampleur du flux, pas son explication. Base : heures régulières du 29 juin au 2 juillet ; une cotation de juin à symbole réutilisé est exclue en attendant vérification de l'entité, ses preuves se trouvent dans son propre dossier approfondi.

Le jour férié a déplacé les échéances hebdomadaires

Où part une échéance hebdomadaire du vendredi quand le vendredi est fermé ? La bande des options répond directement : ce panneau extrait la date d'échéance de chaque contrat négocié durant la semaine et les classe.

RequêteContrats négociés durant la semaine, par date d'échéance (parcours en une passe ; généré par lot)
Le SQL exact derrière chaque chiffre
SELECT concat('20', substring(expiry_raw, 1, 2), '-', substring(expiry_raw, 3, 2), '-', substring(expiry_raw, 5, 2)) AS expiry,
    round(sum(size) / 1e6, 1) AS contracts_m,
    round(100 * sum(size) / max(sum(size)) OVER (), 1) AS pct_of_biggest
FROM (
    SELECT substring(ticker, length(ticker) - 14, 6) AS expiry_raw, size
    FROM global_markets.options_trades
    WHERE sip_timestamp >= toDateTime64('2026-06-29 00:00:00', 9) AND sip_timestamp < toDateTime64('2026-07-03 00:00:00', 9)
)
GROUP BY expiry
ORDER BY contracts_m DESC
LIMIT 6

L'échéance la plus active de la semaine a été 2026-07-02, un jeudi, avec 74.1 millions de contrats, 42.2 % devant la date suivante. Le 3 juillet étant fermé, l'échéance « du vendredi » de la semaine s'est réglée le jeudi à la place ; les échéances quotidiennes du lundi au mercredi et l'échéance mensuelle du 17 juillet complètent le tableau. Les dates d'échéance sont ré-extraites du symbole OCC de chaque contrat (la colonne d'échéance native de la bande n'est pas fiable) ; les mécanismes des semaines d'échéance comme celle-ci sont expliqués dans le guide des jours fériés.

Taux : le rendement à dix ans est remonté

RequêteRendements du Trésor sur la semaine (relevé du 2 juillet pas encore intégré à la génération)
Le SQL exact derrière chaque chiffre
SELECT toString(date) AS d,
    round(yield_10_year, 2) AS y10,
    round(yield_2_year, 2) AS y2,
    round((yield_10_year - yield_2_year) * 100, 0) AS spread_2s10s_bp
FROM global_markets.treasury_yields
WHERE date >= toDate('2026-06-26') AND date <= toDate('2026-07-02')
ORDER BY date

Le 10 ans est passé de 4.38 % le vendredi précédent à 4.49 % au 2026-07-02, tandis que le spread 2s10s se maintenait près de 35 points de base. Une précision : le relevé du rendement du 2 juillet n'avait pas encore été intégré au moment de la génération de cette page (5 lignes jusqu'au 1er juillet inclus). Le panneau le portera à la prochaine régénération.

Le calendrier : un trimestre s'achève, un jour de dépôts disparaît

RequêteLe calendrier d'entreprise de la semaine : le trou de l'index des dépôts du 30 juin mis en évidence
Le SQL exact derrière chaque chiffre
SELECT
    (SELECT count() FROM global_markets.stocks_dividends WHERE ex_dividend_date >= toDate('2026-06-29') AND ex_dividend_date <= toDate('2026-07-02')) AS ex_div_events,
    (SELECT count() FROM global_markets.stocks_splits WHERE execution_date >= toDate('2026-06-29') AND execution_date <= toDate('2026-07-02')) AS splits,
    (SELECT count() FROM global_markets.stocks_ipos WHERE listing_date >= toDate('2026-06-29') AND listing_date <= toDate('2026-07-02')) AS ipos,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-29')) AS filings_jun29,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-06-30')) AS filings_jun30,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-01')) AS filings_jul1,
    (SELECT uniqExact(accession_number) FROM global_markets.stocks_sec_edgar_index WHERE filing_date = toDate('2026-07-02')) AS filings_jul2,
    (SELECT count() FROM global_markets.stocks_news WHERE published_utc >= toDateTime('2026-06-29 00:00:00') AND published_utc < toDateTime('2026-07-03 00:00:00')) AS news_articles

La semaine a compté 2220 détachements de dividende, 47 fractionnements et 7 nouvelles cotations à l'entrée du tournant de trimestre. Les colonnes de dépôts portent la trouvaille qualité-données de la semaine : l'index des dépôts SEC affiche 4439 dépôts le 29 juin et 4283 le 1er juillet, mais seulement 31 le 30 juin, dernier jour du trimestre. Les fins de trimestre des années précédentes en portent des milliers. Le trou se situe dans le flux de données, pas dans ce que les entreprises ont déposé ; tout décompte de dépôts de juin ou du T2 incluant le 30 juin est sous-estimé tant que l'index n'a pas été complété. Ce trou fait partie d'un motif de fin de mois observé en 2026 : la note diagnostique en porte les preuves, affichées ici et dans les récaps de juin et du T2.

Les positions courtes : un fichier tronqué, trois complets

RequêteVolume vendeur à découvert hors bourse (FINRA) par séance : couverture et part marquée à découvert
Le SQL exact derrière chaque chiffre
SELECT toString(date) AS d,
    uniqExact(ticker) AS tickers_on_file,
    max(ticker) AS alphabetical_end,
    round(100 * sum(toFloat64(short_volume)) / sum(toFloat64(total_volume)), 1) AS marked_short_pct
FROM (
    SELECT date, ticker, any(short_volume) AS short_volume, any(total_volume) AS total_volume
    FROM global_markets.stocks_short_volume
    WHERE date >= toDate('2026-06-29') AND date <= toDate('2026-07-02')
    GROUP BY date, ticker
)
GROUP BY date
ORDER BY date

Le volume hors bourse était marqué à découvert à environ 48.8 % en milieu de semaine : de la plomberie de routine des teneurs de marché, pas un signal de short squeeze. Les colonnes de couverture portent la réserve : le fichier du 29 juin est tronqué sur l'ensemble du marché (5489 titres s'arrêtant à « SSUS » contre environ 15 000 allant jusqu'à « ZYME » les jours complets), si bien que le 45.8 % du 29 juin est calculé sur un fichier partiel. Le dossier approfondi du 29 juin porte la mesure complète du marché.

Notes sur les données

Notes complètes sur les données
  • Le 3 juillet a été une fermeture COMPLÈTE, pas une clôture anticipée. Le 4 juillet 2026 tombait un samedi ; le NYSE et le Nasdaq ont observé le jour férié le vendredi 3 juillet (0 barres SPY imprimées ce jour-là). Une remarque sur les données découverte lors de la régénération de cette page : la table du calendrier boursier est un flux glissant des prochains jours fériés, et la ligne du 3 juillet en est sortie une fois le jour férié passé (elle figurait dans la première édition de cette page). Le relevé de fermeture reste donc le jour à zéro barre sur la bande ; les mécanismes sont expliqués dans le guide des jours fériés.
  • Les positions courtes s'arrêtent au règlement du 15 juin. Le règlement bimensuel de fin juin n'avait pas encore été publié au moment de la génération de cette page ; rien ici ne s'en sert, et le récap de juin en porte la réserve complète. Cet article sera régénéré à sa publication.
  • Le trou de l'index des dépôts du 30 juin est affiché en ligne ci-dessus ; le relevé du Trésor du 2 juillet est en attente d'intégration.
  • Le fichier de volume vendeur à découvert FINRA du 29 juin est tronqué sur l'ensemble du marché ; son ratio est affiché avec sa couverture en ligne.
  • Exclusion du classement des volumes : une cotation de juin se négocie sous un symbole réutilisé et est exclue du classement en attendant vérification de l'entité (son propre article en porte les preuves).

Méthodologie

  • La période va du 29 juin au 2 juillet 2026 : les quatre séances cotées de la semaine ; le 3 juillet était un jour férié boursier. Les bornes de séance sont vérifiées à partir des barres observées, jamais supposées (le jeu de données du calendrier boursier ne porte que les prochains jours fériés ; voir la note sur les données).
  • Les horodatages sont stockés en UTC et filtrés avec des bornes UTC brutes ; les heures régulières de cette semaine (en heure d'été de l'Est) sont 13 h 30–20 h 00 UTC. Les clôtures correspondent à la dernière barre minute des heures régulières ; le volume en dollars est le produit de la clôture minute par le volume minute, additionné sur les heures régulières.
  • Les chiffres semaine par semaine se comparent à la clôture du vendredi précédent, recalculée dans la même requête que celle de cette semaine, jamais lue depuis une valeur stockée. Le rang sur l'année écoulée se recalcule à l'identique chaque semaine (heures régulières en horloge murale de l'Est, garde-fou de séance minimale, borne supérieure fixée à la fin de cette semaine).
  • La génération passe par le chemin de lecture seule filtré ; la page publique n'exécute jamais de requête en direct. État de l'entrepôt de données au 5 juillet 2026.

FAQ

Combien de séances la Bourse a-t-elle tenues durant cette semaine ?

La semaine a compté 4 séances : le marché a fermé le vendredi 3 juillet pour la fête de l'Indépendance, observée par anticipation puisque le 4 juillet tombait un samedi.

Le marché a-t-il progressé ou reculé durant la semaine du 29 juin ?

SPY a gagné 2.2 % sur la semaine, et l'ampleur du marché a confirmé la hausse : 5049 titres ont progressé contre 3529 en baisse.

Quelle action a généré le plus de volume durant cette semaine ?

MU a mené toute la bande avec 190.2 milliards de dollars de volume en dollars aux heures régulières, davantage que SPY lui-même.

Pourquoi la Bourse était-elle fermée le vendredi précédant la fête de l'Indépendance ?

Le 4 juillet 2026 tombait un samedi. Le NYSE et le Nasdaq ont observé la fête de l'Indépendance le vendredi précédent, le 3 juillet, jour où la bande SPY n'a imprimé aucune barre en heures régulières.

Pourquoi le décompte des dépôts SEC de juin semble-t-il incomplet ?

L'index des dépôts SEC ne montre que 31 dépôts le 30 juin, dernier jour du trimestre, contre 4439 la veille et 4283 le lendemain. Le trou se situe dans le flux de données, pas dans l'activité réelle des entreprises.

Ceci est la première édition du récap hebdomadaire permanent : l'édition de la semaine prochaine couvrira le 6 au 10 juillet et renverra vers celle-ci. Le récap quotidien du 29 juin couvre le lundi dans le détail de la journée.

#market recap#weekly#breadth#rates#volume