Strasmore Research
Récap des marchés Matt ConnorPar Matt Connor · data as of July 22, 2026 · refreshed weekly

Plus hauts et plus bas sur 52 semaines

Quelles actions ont clôturé à un plus haut sur 52 semaines et lesquelles sont à un plus bas, filtrées depuis la cote, avec le compte de chaque côté.

Un plus haut sur 52 semaines est le cours de clôture le plus élevé d'une action sur l'année écoulée, et un plus bas sur 52 semaines est le plus faible. À la dernière séance terminée, le Jul 20, 2026, 19 actions de ce filtre ont clôturé à un plus haut sur 52 semaines ou à moins de 1% de celui-ci, et 10 ont clôturé à un plus bas sur 52 semaines ou à moins de 1% de celui-ci. Le filtre couvre de grandes sociétés d'exploitation américaines liquides et se reconstruit à partir de la cote.

Actions à un plus haut sur 52 semaines

Les plus fortes hausses depuis le début de l'année sur la liste des plus hauts figurent ci-dessous, jusqu'à douze valeurs. Chacune a terminé la séance à sa plus haute clôture sur les 52 dernières semaines, ou à moins de 1% de celle-ci.

RequêteActions à un plus haut sur 52 semaines, classées par rendement depuis le début de l'année
Le SQL exact derrière chaque chiffre
WITH universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 20 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
                     WHERE period_end >= today() - 400)
      AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 460 AND today())
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
    SELECT max(toDate(et)) AS d
    FROM (
        SELECT toTimeZone(window_start, 'America/New_York') AS et
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
),
daily AS (
    SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
    FROM (
        SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 375 DAY
          AND ticker IN (SELECT ticker FROM universe)
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
    GROUP BY ticker, dt
    HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
    SELECT ticker,
           argMax(c, dt) AS last_close,
           max(c) AS hi,
           min(c) AS lo,
           argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
           count() AS n_sessions,
           min(dt) AS first_dt,
           max(dt) AS last_dt
    FROM daily
    GROUP BY ticker
    HAVING n_sessions >= 200
       AND countIf(dt <= toDate('2025-12-31')) > 0
       AND last_dt = (SELECT d FROM last_session)
       AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT ticker,
       round(last_close, 2) AS close,
       round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
WHERE last_close >= hi * 0.99
ORDER BY ytd_return_pct DESC, ticker ASC
LIMIT 12

DINO occupe la première place à 96.3% sur l'année, en clôturant à $90.42. Sur cette liste, la clôture est le plus haut sur 52 semaines à moins de 1% près, par construction, si bien que la colonne du cours fait aussi office de niveau testé. MPC suit à 94% et VLO à 92.5%. À l'autre bout du tableau, MO affiche 29.5% sur l'année.

Cet écart est précisément le propos. Un plus haut sur 52 semaines décrit où se situe un cours à l'intérieur de sa propre fourchette annuelle, rien de plus. Une action qui a lourdement chuté l'été dernier puis s'est refait péniblement porte la même étiquette qu'une action qui n'a jamais cessé de grimper.

Actions à un plus bas sur 52 semaines

Le même filtre, en sens inverse. Ces valeurs ont clôturé à leur plus basse clôture sur les 52 dernières semaines, ou à moins de 1% de celle-ci, classées à partir de la lecture la plus faible depuis le début de l'année, jusqu'à douze valeurs.

RequêteActions à un plus bas sur 52 semaines, classées par rendement depuis le début de l'année
Le SQL exact derrière chaque chiffre
WITH universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 20 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
                     WHERE period_end >= today() - 400)
      AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 460 AND today())
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
    SELECT max(toDate(et)) AS d
    FROM (
        SELECT toTimeZone(window_start, 'America/New_York') AS et
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
),
daily AS (
    SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
    FROM (
        SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 375 DAY
          AND ticker IN (SELECT ticker FROM universe)
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
    GROUP BY ticker, dt
    HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
    SELECT ticker,
           argMax(c, dt) AS last_close,
           max(c) AS hi,
           min(c) AS lo,
           argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
           count() AS n_sessions,
           min(dt) AS first_dt,
           max(dt) AS last_dt
    FROM daily
    GROUP BY ticker
    HAVING n_sessions >= 200
       AND countIf(dt <= toDate('2025-12-31')) > 0
       AND last_dt = (SELECT d FROM last_session)
       AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT ticker,
       round(last_close, 2) AS close,
       round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
WHERE last_close <= lo * 1.01
ORDER BY ytd_return_pct ASC, ticker ASC
LIMIT 12

PNR porte la lecture la plus faible de la liste depuis le début de l'année à -40.3%, en clôturant à $62.14, son propre plus bas de clôture sur 52 semaines à moins de 1% près. ORCL suit à -37.7%.

Un plus bas sur 52 semaines est une position dans une fourchette de cours, pas un verdict sur une entreprise. Des sociétés rentables dérivent vers cette liste au fil de longues périodes calmes, tout comme des sociétés en réelle difficulté. Le seul cours de clôture ne permet pas de les distinguer. Pour la version à l'échelle du marché entier de la même question, voir comment les marchés se remettent des krachs.

Ce que les comptes de plus hauts et de plus bas disent de l'ampleur du marché

L'ampleur de marché mesure combien d'actions prennent part à un mouvement plutôt que la distance parcourue par l'indice. Le compte des nouveaux plus hauts face aux nouveaux plus bas est l'une des plus anciennes lectures d'ampleur qui soient, et c'est le chiffre à surveiller sur cette page.

RequêteNouveaux plus hauts sur 52 semaines face aux nouveaux plus bas, quotidien, sur les six dernières semaines
Le SQL exact derrière chaque chiffre
WITH universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 20 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
                     WHERE period_end >= today() - 400)
      AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 460 AND today())
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
    SELECT max(toDate(et)) AS d
    FROM (
        SELECT toTimeZone(window_start, 'America/New_York') AS et
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
),
daily AS (
    SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
    FROM (
        SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 425 DAY
          AND ticker IN (SELECT ticker FROM universe)
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
    GROUP BY ticker, dt
    HAVING nbars >= 20 AND dt <= (SELECT d FROM last_session)
),
rolled AS (
    SELECT ticker, dt, c,
           max(c) OVER w AS hi,
           min(c) OVER w AS lo,
           count() OVER w AS n_sessions,
           min(dt) OVER (PARTITION BY ticker) AS first_dt
    FROM daily
    WINDOW w AS (PARTITION BY ticker ORDER BY dt RANGE BETWEEN 364 PRECEDING AND CURRENT ROW)
)
SELECT formatDateTime(dt, '%b %e, %Y') AS date,
       countIf(c >= hi * 0.99) AS at_52w_high,
       countIf(c <= lo * 1.01) AS at_52w_low,
       countIf(c >= hi * 0.99) - countIf(c <= lo * 1.01) AS net_highs
FROM rolled
WHERE n_sessions >= 200
  AND first_dt <= dt - 350
  AND dt > (SELECT d FROM last_session) - 43
GROUP BY dt
ORDER BY dt

Le Jul 20, 2026, le filtre comptait 19 valeurs à un plus haut sur 52 semaines ou à proximité, contre 10 à un plus bas ou à proximité, soit une lecture nette de 9. Six semaines plus tôt, le Jun 8, 2026, le même filtre affichait 23 plus hauts et 11 plus bas.

Sur les 29 séances tracées, les deux comptes oscillent fortement d'un jour à l'autre, si bien que le niveau d'une seule séance compte moins que la dérive sur plusieurs semaines. Un indice qui tient bon pendant que le compte de plus hauts s'amenuise dessine un marché plus étroit que ce que l'indice seul suggère. Une cote où le compte de plus bas enfle est le décor derrière acheter quand les autres ont peur, que nous avons confronté au sentiment de l'actualité.

À quelle distance le reste du marché se tient de son propre plus haut

Les plus hauts et les plus bas sont les deux extrémités d'une distribution ; la plupart des actions vivent au milieu. Ce panneau trie l'ensemble du filtre par distance sous son plus haut sur 52 semaines et indique le rendement médian depuis le début de l'année dans chaque tranche.

RequêteÀ quelle distance l'ensemble du filtre se tient sous son plus haut sur 52 semaines
Le SQL exact derrière chaque chiffre
WITH universe AS (
    SELECT ticker
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 20 DAY
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
      AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
      AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
                     WHERE period_end >= today() - 400)
      AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
                         WHERE execution_date BETWEEN today() - 460 AND today())
    GROUP BY ticker
    HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
    SELECT max(toDate(et)) AS d
    FROM (
        SELECT toTimeZone(window_start, 'America/New_York') AS et
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
),
daily AS (
    SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
    FROM (
        SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 375 DAY
          AND ticker IN (SELECT ticker FROM universe)
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
    GROUP BY ticker, dt
    HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
    SELECT ticker,
           argMax(c, dt) AS last_close,
           max(c) AS hi,
           min(c) AS lo,
           argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
           count() AS n_sessions,
           min(dt) AS first_dt,
           max(dt) AS last_dt
    FROM daily
    GROUP BY ticker
    HAVING n_sessions >= 200
       AND countIf(dt <= toDate('2025-12-31')) > 0
       AND last_dt = (SELECT d FROM last_session)
       AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT multiIf(p < 1, 'At the high (under 1%)',
               p < 5, '1% to 5% below',
               p < 10, '5% to 10% below',
               p < 20, '10% to 20% below',
               p < 35, '20% to 35% below',
               'More than 35% below') AS bucket,
       count() AS stocks,
       round(100.0 * count() / sum(count()) OVER (), 1) AS share_pct,
       round(quantileExact(0.5)(ytd), 1) AS median_ytd_pct
FROM (
    SELECT (1 - last_close / hi) * 100 AS p,
           (last_close / base_close - 1) * 100 AS ytd,
           multiIf(p < 1, 0, p < 5, 1, p < 10, 2, p < 20, 3, p < 35, 4, 5) AS ord
    FROM ranged
)
GROUP BY bucket, ord
ORDER BY ord

3.9% du filtre, soit 19 valeurs, ont clôturé à moins de 1% d'un plus haut sur 52 semaines. À l'autre extrémité, 20.2% ont clôturé à plus de 35% en dessous d'un tel plus haut. Le rendement médian depuis le début de l'année dans la tranche du haut est de 32% ; dans la tranche du bas, il est de -23.9%, et le graphique dessine la forme entre les deux.

Ce gradient tient davantage de l'arithmétique que de la découverte : une action proche de son plus haut sur 52 semaines a, par construction, passé l'essentiel de l'année à monter. Le panneau se justifie par l'échelle : à quel point les extrêmes sont inhabituels, et quelle part du marché se tient loin de son propre meilleur cours. Détenir l'une de ces valeurs en position importante, c'est l'exposition que mesure le vrai risque d'une seule action.

Où se situe le marché lui-même dans sa fourchette sur 52 semaines

Une action isolée à un plus haut se lit différemment face à un marché proche de son propre plus haut que face à un marché qui en est loin. Les cinq ETF de marché large ci-dessous sont mesurés exactement comme les actions ci-dessus.

RequêteOù se situent cinq ETF de marché large dans leur propre fourchette sur 52 semaines
Le SQL exact derrière chaque chiffre
WITH last_session AS (
    SELECT max(toDate(et)) AS d
    FROM (
        SELECT toTimeZone(window_start, 'America/New_York') AS et
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
),
daily AS (
    SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
    FROM (
        SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE window_start >= now() - INTERVAL 375 DAY
          AND ticker IN ('SPY', 'QQQ', 'DIA', 'IWM', 'RSP')
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
          AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
    )
    GROUP BY ticker, dt
    HAVING nbars >= 20
       AND dt > (SELECT d FROM last_session) - 365
       AND dt <= (SELECT d FROM last_session)
),
ranged AS (
    SELECT ticker,
           argMax(c, dt) AS last_close,
           max(c) AS hi,
           min(c) AS lo,
           argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
           count() AS n_sessions,
           min(dt) AS first_dt,
           max(dt) AS last_dt
    FROM daily
    GROUP BY ticker
    HAVING n_sessions >= 200
       AND countIf(dt <= toDate('2025-12-31')) > 0
       AND last_dt = (SELECT d FROM last_session)
       AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT multiIf(ticker = 'SPY', 'S&P 500 (SPY)',
               ticker = 'QQQ', 'Nasdaq 100 (QQQ)',
               ticker = 'DIA', 'Dow 30 (DIA)',
               ticker = 'RSP', 'S&P 500 equal weight (RSP)',
               'Russell 2000 (IWM)') AS label,
       round((1 - last_close / hi) * 100, 2) AS pct_below_high,
       round((last_close / lo - 1) * 100, 1) AS pct_above_low,
       round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
ORDER BY pct_below_high ASC

S&P 500 equal weight (RSP) a clôturé à 1.24% sous son plus haut sur 52 semaines, le plus proche des cinq, et à 17% au-dessus de son plus bas sur 52 semaines. Nasdaq 100 (QQQ) se tient le plus loin de son plus haut, à 6.71%. Depuis le début de l'année, les deux affichent 10.9% et 13.3%.

L'écart entre une version équipondérée et une version pondérée par la capitalisation d'un même indice est en soi une lecture d'ampleur. Quand la ligne équipondérée se tient plus près de son plus haut, le membre moyen distance les plus grands membres. Quand la ligne pondérée par la capitalisation est plus proche, une poignée de très grandes sociétés porte l'indice. Aucune des deux configurations ne prédit quoi que ce soit, et sortir du marché au mauvais moment a le coût exposé dans rater les meilleurs jours du marché.

Comment cette mesure est construite

Chaque chiffre de cette page provient des barres à la minute de la cote boursière américaine, agrégées en cours de clôture quotidiens. Les règles, en intégralité :

  • L'univers. Uniquement des sociétés d'exploitation cotées aux États-Unis, identifiées par un compte de résultat déposé auprès de la SEC pour une période se terminant dans les 400 derniers jours, si bien que les ETF et les fonds restent hors des deux listes. Les ETF à effet de levier et inverses sont aussi exclus nommément, par précaution supplémentaire.
  • Plancher de liquidité. Une action doit avoir négocié au moins 2 milliards de dollars sur les 20 derniers jours calendaires. Une fois les week-ends et les jours fériés retirés, cette fenêtre contient une douzaine de séances environ, si bien que la barre revient à environ 150 millions de dollars par séance. Cela limite les listes aux valeurs qu'un lecteur pourrait réellement négocier, et empêche une cote peu liquide de fabriquer un extrême.
  • Les fractionnements sont exclus, pas ajustés. Tout symbole ayant subi un fractionnement d'actions dans les 460 derniers jours est écarté du filtre. La fenêtre dépasse volontairement une année pleine, assez large pour couvrir les cours les plus anciens que le graphique d'ampleur ci-dessous atteint. C'est la façon la plus probable pour une page comme celle-ci de publier quelque chose de faux : un regroupement d'actions à raison de 1 pour 20 multiplie par vingt le cours coté sans aucune transaction derrière lui, et un filtre non ajusté rapporterait un spectaculaire nouveau plus haut sur 52 semaines. Un fractionnement classique produit l'effet inverse et simule un plus bas sur 52 semaines.
  • Cours de clôture, pas extrêmes intrajournaliers. Le plus haut et le plus bas sont mesurés sur les clôtures. Une action peut franchir son plus haut sur 52 semaines en cours de séance, clôturer en dessous, et n'apparaître nulle part ici. Les filtres construits sur les transactions intrajournalières rapportent des comptes plus élevés.
  • La séance doit être complète. La clôture d'une journée est la dernière barre à la minute entre 15 h 30 et 16 h 00, heure de New York. Une séance encore en cours de chargement n'a aucune barre dans cette demi-heure, si bien qu'elle ne peut pas entrer dans le calcul, et la séance en cours n'y entre jamais. Les séances de jour férié à clôture anticipée sortent pour la même raison. La date indiquée plus haut est celle de la dernière séance ayant passé ce test, elle peut donc se situer un jour ou deux derrière le calendrier.
  • Une année complète d'historique. Une action a besoin d'au moins 200 séances à l'intérieur de la fenêtre de 52 semaines et d'une première séance remontant à au moins 350 jours. Une société entrée en bourse il y a trois mois ne peut pas imprimer de plus haut sur 52 semaines ici.
  • La marge de 1%. « À un plus haut sur 52 semaines » signifie que la clôture se situe à ce plus haut ou à moins de 1% de celui-ci sur les 52 dernières semaines, et la liste des plus bas fonctionne à l'identique. Les rendements depuis le début de l'année sont mesurés à partir de la dernière clôture de 2025.

FAQ

Acheter à un plus haut sur 52 semaines, est-ce une bonne idée ?

Il n'existe pas de réponse générale, et rien ici n'est un conseil. Ce que cette page peut montrer est rétrospectif : les actions à moins de 1% d'un plus haut sur 52 semaines portent un rendement médian depuis le début de l'année de 32%, contre -23.9% pour les actions à plus de 35% en dessous de leur plus haut. Cela décrit l'année passée de ces actions, pas l'année à venir. L'étiquette marque une position dans une fourchette de cours, pas une valorisation.

Que signifie un plus bas sur 52 semaines pour une action ?

Cela signifie que l'action a clôturé plus bas qu'à tout autre moment des 52 semaines précédentes. Le Jul 20, 2026, cela concernait 10 valeurs de ce filtre. Un plus bas peut accompagner une entreprise en dégradation ou une longue dérive au sein d'une entreprise rentable, et le cours seul ne permet pas de distinguer laquelle.

Combien d'actions sont à un plus haut sur 52 semaines en ce moment ?

À la clôture du Jul 20, 2026, 19 actions de ce filtre ont clôturé à un plus haut sur 52 semaines ou à moins de 1% de celui-ci, contre 10 à un plus bas ou à moins de 1% de celui-ci. Le filtre retient de grandes sociétés d'exploitation américaines liquides franchissant un plancher de 2 milliards de dollars de volume sur les 20 derniers jours calendaires, si bien que ces comptes sont plus bas que ceux d'un filtre portant sur l'ensemble des cotations.

Comment un plus haut sur 52 semaines est-il calculé ?

Prenez chaque cours de clôture sur les 52 dernières semaines et retenez le plus élevé. Si la dernière clôture lui est égale, l'action a établi un plus haut de clôture sur 52 semaines. Cette page compte aussi toute action à moins de 1% de ce niveau, et écarte tout symbole ayant subi un fractionnement dans les 460 derniers jours, car un fractionnement modifie le cours coté sans changer la valeur d'une position.


Chaque panneau ci-dessus conserve le SQL qui le produit. Ouvrez la requête sous n'importe quel tableau pour auditer le filtre, ou exécutez-la sur le terminal Strasmore. Pour les plus grands mouvements de la semaine plutôt que les extrêmes de l'année, voir les plus fortes hausses et baisses de la semaine.

#52-week high#52-week low#market breadth#stock screener#market data