Strasmore Research
Podsumowania rynkowe Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Akcje na 52-tygodniowych szczytach i dołkach

Zestawienie spółek osiągających 52-tygodniowe maksima oraz minima. Analiza szerokości rynku na podstawie kursów zamknięcia największych amerykańskich podmiotów.

Maksimum z 52 tygodni to najwyższa cena zamknięcia akcji w ciągu ostatniego roku, natomiast minimum z 52 tygodni to najniższa cena. Podczas ostatniej zakończonej sesji, Jul 21, 2026, 26 akcji na tym zestawieniu zamknęło się na poziomie maksimum z 52 tygodni lub w granicach 1% od tej wartości, a 7 zamknęło się na poziomie minimum z 52 tygodni lub w granicach 1% od tej wartości. Zestawienie obejmuje duże, płynne amerykańskie spółki operacyjne, a dane są pobierane bezpośrednio z rejestru giełdowego.

Akcje na 52-tygodniowych szczytach

Poniżej wymieniono najsilniejsze wzrosty od początku roku, obejmujące do dwunastu spółek. Każda z nich zamknęła sesję na poziomie szczytowego zamknięcia z ostatnich 52 tygodni lub w granicach 1% od tego poziomu.

ZapytanieAkcje na 52-tygodniowych szczytach, wg stopy zwrotu YTD
Dokładny kod SQL dla każdej liczby
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

DAVE zajmuje pierwsze miejsce z wynikiem 99.6% w skali roku, z zamknięciem na poziomie $439.18. Na tej liście, ze względu na sposób zestawienia, kurs zamknięcia stanowi szczyt z ostatnich 52 tygodni w granicach 1%, zatem kolumna cenowa pełni jednocześnie funkcję testowanego poziomu. DINO znajduje się na pozycji 99%, a MPC na 96.6%. Na końcu tabeli ROKU odnotowuje 33% w skali roku.

Kluczowe jest rozróżnienie tych wartości. Szczyt z 52 tygodni określa jedynie pozycję ceny w obrębie jej własnego rocznego zakresu. Akcja, która gwałtownie spadła latem ubiegłego roku, a następnie odrobiła straty, otrzymuje tę samą etykietę co spółka, która nieprzerwanie rośnie.

Akcje na 52-tygodniowych minimach

Zastosowano ten sam filtr, ale w odwrotnej kolejności. Poniższa lista obejmuje dwanaście spółek, których kursy zamknęły się na poziomie 52-tygodniowego minimum lub w granicach 1% od tego poziomu. Spółki zostały uszeregowane według najsłabszych wyników YoY.

ZapytanieAkcje na 52-tygodniowych dołkach, wg stopy zwrotu YTD
Dokładny kod SQL dla każdej liczby
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

Najsłabszy wynik YoY w zestawieniu odnotowuje PNR na poziomie -41%. Kurs zamknął się na poziomie $61.48, co stanowi wartość w granicach 1% od 52-tygodniowego minimum. Kolejną spółką jest CPRT z wynikiem -30.6%.

52-tygodniowe minimum określa pozycję w zakresie cenowym, a nie kondycję przedsiębiorstwa. Na listę tę mogą trafiać zarówno spółki generujące zyski, które znajdują się w długich okresach stagnacji, jak i podmioty w rzeczywistych problemach. Sama cena zamknięcia nie pozwala na ich rozróżnienie. W przypadku szerszej analizy rynkowej należy zapoznać się z artykułem jak rynki podnoszą się po krachach.

Co wskaźniki liczby rekordowych wzrostów i spadków mówią o szerokości rynku

Szerokość rynku mierzy liczbę akcji uczestniczących w trendzie, a nie samą wielkość zmiany indeksu. Liczba nowych rekordowych wzrostów w stosunku do nowych rekordowych spadków to jeden z najstarszych wskaźników szerokości rynku; na tej stronie jest to kluczowa wartość.

ZapytanieNowe 52-tygodniowe szczyty vs dołki, dziennie, przez ostatnie 6 tygodni
Dokładny kod SQL dla każdej liczby
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

W dniu Jul 21, 2026 wskaźnik wskazywał 26 spółek na poziomie lub blisko 52-tygodniowego maksimum wobec 7 na poziomie lub blisko 52-tygodniowego minimum, co daje wynik netto wynoszący 19. Sześć tygodni wcześniej, Jun 9, 2026, ten sam wskaźnik wykazywał 35 wzrostów i 3 spadków.

W ciągu 29 sesji obie wartości wykazują dużą zmienność dzienną, dlatego poziom z pojedynczej sesji ma mniejsze znaczenie niż trend wielotygodniowy. Jeśli indeks utrzymuje stabilność, podczas gdy liczba spółek osiągających wzrosty maleje, rynek jest węższy, niż sugeruje sam indeks. Sytuacja, w której liczba spółek osiągających spadki rośnie, stanowi tło dla strategii kupowania, gdy inni odczuwają strach, którą przetestowano w odniesieniu do nastrojów rynkowych.

Odległość pozostałej części rynku od własnych szczytów

Szczyty i dołki stanowią dwa krańce rozkładu; większość akcji znajduje się w środku. Poniższa tabela sortuje wszystkie instrumenty według odległości poniżej 52-tygodniowego szczytu i podaje medianę stopy zwrotu od początku roku w każdym przedziale.

ZapytaniePołożenie całego rynku względem 52-tygodniowego szczytu
Dokładny kod SQL dla każdej liczby
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

5.3% wszystkich instrumentów, czyli 26 nazw, zamknęło się w granicach 1% od 52-tygodniowego szczytu. Z kolei 17% zamknęło się poniżej tego poziomu o ponad 35%. Mediana stopy zwrotu od początku roku w górnym przedziale wynosi 32.8%; w dolnym przedziale wynosi ona -28.9%, a wykres obrazuje kształt między nimi.

Ten gradient wynika bardziej z arytmetyki niż z odkrycia: akcja znajdująca się blisko swojego 52-tygodniowego szczytu, ze względu na swoją konstrukcję, spędziła większość roku na wzrostach. Tabela ma znaczenie w kontekście skali: jak nietypowe są wartości ekstremalne oraz jak duża część rynku znajduje się daleko od swoich własnych najwyższych cen. Posiadanie dużej pozycji w jednym z tych instrumentów stanowi ekspozycję mierzoną przez realne ryzyko pojedynczej akcji.

Położenie rynku w zakresie 52-tygodniowym

Pozycja pojedynczej akcji w pobliżu jej szczytu wygląda inaczej w zestawieniu z rynkiem znajdującym się blisko własnego maksimum, a inaczej w zestawieniu z rynkiem oddalonym od szczytu. Poniżej przedstawiono pięć szerokich funduszy ETF, które są mierzone w ten sam sposób co akcje powyżej.

ZapytaniePołożenie 5 szerokorynkowych ETF w ich 52-tygodniowych zakresach
Dokładny kod SQL dla każdej liczby
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) zamknął się 1.08% poniżej swojego 52-tygodniowego szczytu, co stanowi najbliższy wynik spośród pięciu, oraz 17.2% powyżej swojego 52-tygodniowego dołka. Nasdaq 100 (QQQ) znajduje się najdalej od swojego szczytu na poziomie 4.98%. Wskaźniki od początku roku wynoszą odpowiednio 11.1% oraz 15.4%.

Różnica między wersją indeksu o równej wadze a wersją o wadze rynkowej stanowi samodzielny wskaźnik szerokości rynku. Gdy linia indeksu o równej wadze znajduje się bliżej szczytu, średni komponent wyprzedza największe spółki. Gdy bliżej szczytu znajduje się linia indeksu o wadze rynkowej, za wynik indeksu odpowiada kilka bardzo dużych przedsiębiorstw. Żaden z tych układów nie służy jako prognoza, a wycofanie się z rynku w niewłaściwym momencie wiąże się z kosztem opisanym w utracie najlepszych dni rynku.

Metodologia pomiaru

Wszystkie dane na tej stronie pochodzą z minutowych słupków obrotu na amerykańskich giełdach, zagregowanych do dziennych cen zamknięcia. Pełne zasady:

  • Zbiór danych. Wyłącznie spółki operacyjne notowane w USA, zidentyfikowane na podstawie rachunku zysków i strat złożonego do SEC za okres kończący się w ciągu ostatnich 400 dni. Fundusze i ETF nie są uwzględniane w żadnej z list. Dodatkowo wyklucza się z dźwignią finansową oraz fundusze typu inverse.
  • Próg płynności. Akcje muszą mieć obrót na poziomie co najmniej 2 mld USD w ciągu ostatnich 20 dni kalendarzowych. Po wyłączeniu weekendów i dni wolnych pozostaje około dwunastu sesji, co daje średnio około 150 mln USD na sesję. Zapobiega to uwzględnianiu w zestawieniach spółek o niskiej płynności, które mogłyby sztucznie generować ekstremalne wyniki.
  • Split nie jest korygowany, lecz wykluczany. Każdy ticker, który przeszedł split akcji w ciągu ostatnich 460 dni, jest usuwany z zestawienia. Okres ten celowo wykracza poza pełny rok, aby pokryć najstarsze ceny widoczne na poniższym wykresie szerokiego rynku. Jest to najczęstsza przyczyna błędnych danych: reverse split w stosunku jeden do dwudziestu zwiększa cytowaną cenę dwudziestokrotnie bez realnego obrotu, co niekorygowany system błędnie odczytałby jako spektakularne 52-tygodniowe maksimum. Forward split działa odwrotnie, tworząc sztuczne 52-tygodniowe minimum.
  • Ceny zamknięcia, a nie ekstremalne wartości intraday. Maksimum i minimum są mierzone na podstawie cen zamknięcia. Akcja może osiągnąć 52-tygodniowe maksimum w trakcie dnia, zamknąć się poniżej tej wartości i nie pojawić w zestawieniu. Systemy oparte na danych intraday wykazują większą liczbę przypadków.
  • Sesja musi być zakończona. Zamknięcie dnia to ostatni słupek minutowy między godziną 15:30 a 16:00 czasu nowojorskiego. Sesja w trakcie trwania nie posiada słupków w tym półgodzinnym oknie, więc nie może zostać uwzględniona w obliczeniach. Sesje skrócone w dni świąteczne są wykluczane z tego samego powodu. Data widoczna powyżej to data ostatniej sesji, która spełniła test, dlatego może ona odbiegać od daty kalendarzowej o jeden lub dwa dni.
  • Pełny rok historii. Akcja musi posiadać co najmniej 200 sesji w oknie 52 tygodni, a pierwsza sesja musi pochodzić sprzed co najmniej 350 dni. Spółka, która zadebiutowała trzy miesiące temu, nie może osiągnąć tutaj 52-tygodniowego maksimum.
  • Pasmo 1%. Status „na poziomie 52-tygodniowego maksimum” oznacza, że cena zamknięcia znajduje się na tym poziomie lub w granicach 1% najwyższego zamknięcia z ostatnich 52 tygodni; lista minimów odzwierciedla tę samą zasadę. Stopy zwrotu Year-to-date są mierzone od ostatniego zamknięcia w 2025 roku.

FAQ

Czy zakup akcji na poziomie 52-tygodniowego maksimum jest dobrym pomysłem?

Nie ma jednej ogólnej odpowiedzi, a powyższe informacje nie stanowią porady inwestycyjnej. Przedstawione dane mają charakter historyczny: akcje znajdujące się w granicach 1% od 52-tygodniowego maksimum osiągnęły medianę stopy zwrotu YoY na poziomie 32.8%, podczas gdy dla akcji wycenianych o ponad 35% poniżej ich maksimum wyniosła ona -28.9%. Dane te opisują wyniki z ubiegłego roku, a nie prognozy na przyszłość. Wskaźnik ten określa pozycję w zakresie cenowym, a nie wycenę spółki.

Co oznacza osiągnięcie przez akcje 52-tygodniowego minimum?

Oznacza to, że cena zamknięcia akcji była niższa niż w dowolnym momencie w ciągu ostatnich 52 tygodni. W dniu Jul 21, 2026 dotyczyło to 7 spółek prezentowanych na tym ekranie. Minimum może wynikać z pogarszającej się kondycji przedsiębiorstwa lub długotrwałego spadku kursu w spółce rentownej; sama cena nie pozwala rozstrzygnąć, która z tych przyczyn wystąpiła.

Ile akcji znajduje się obecnie na poziomie 52-tygodniowych maximów?

Według stanu na zamknięciu w dniu Jul 21, 2026, 26 spółek na tym ekranie zamknęło się na poziomie 52-tygodniowego maksimum lub w granicach 1% od tego poziomu, podczas gdy 7 spółek zamknęło się na poziomie 52-tygodniowego minimum lub w granicach 1% od tego poziomu. Zestawienie obejmuje duże, płynne amerykańskie spółki operacyjne o obrocie przekraczającym 2 miliardy USD w ciągu ostatnich 20 dni kalendarzowych, dlatego liczby te są niższe niż w przypadku zestawień obejmujących wszystkie spółki giełdowe.

Jak obliczane jest 52-tygodniowe maksimum?

Należy zestawić wszystkie ceny zamknięcia z ostatnich 52 tygodni i wybrać najwyższą wartość. Jeśli ostatnia cena zamknięcia jest jej równa, akcja ustanowiła 52-tygodniowe maksimum zamknięcia. Strona uwzględnia również wszystkie akcje znajdujące się w granicach 1% od tego poziomu. Z zestawienia wykluczane są spółki, które dokonały podziału akcji w ciągu ostatnich 460 dni, ponieważ podział zmienia kurs cytowany, nie zmieniając przy tym wartości posiadanych aktywów.


Każdy powyższy panel zawiera kod SQL. Można otworzyć zapytanie pod dowolną tabelą w celu weryfikacji danych lub uruchomić je w terminalu Strasmore. Aby sprawdzić największe tygodniowe zmiany zamiast rocznych ekstremów, zobacz największe wzrosty i spadki akcji w tym tygodniu.

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