Strasmore Research
Rekap pasar Matt ConnorOleh Matt Connor · Diperbarui 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Daftar Saham 52-Week Highs dan Lows

Pantau saham yang ditutup pada level 52-week high atau 52-week low berdasarkan data exchange tape sebagai indikator breadth pasar terkini.

52-week high adalah harga penutupan tertinggi sebuah saham selama satu tahun terakhir, sedangkan 52-week low adalah harga terendahnya. Pada sesi terakhir yang telah selesai, Jul 21, 2026, 26 saham dalam layar ini ditutup pada atau dalam rentang 1% dari 52-week high dan 7 ditutup pada atau dalam rentang 1% dari 52-week low. Layar ini mencakup perusahaan operasional AS yang besar dan likuid, serta disusun ulang dari exchange tape.

Saham di level tertinggi 52-minggu

Saham dengan kenaikan tertinggi tahun berjalan (year-to-date) tercantum di bawah, hingga dua belas saham. Masing-masing menutup sesi pada atau dalam rentang 1% dari harga penutupan tertinggi dalam 52 minggu terakhir.

QuerySaham di 52-week highs, diurutkan berdasarkan year-to-date return
SQL tepat di balik setiap angka
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 memimpin dengan kenaikan 99.6% untuk tahun ini, menutup pada $439.18. Dalam daftar ini, harga penutupan secara otomatis merupakan harga tertinggi 52-minggu dalam rentang 1%, sehingga kolom harga juga berfungsi sebagai level yang sedang diuji. DINO menyusul pada 99% dan MPC pada 96.6%. Di bagian akhir tabel, ROKU mencatat 33% untuk tahun ini.

Intinya adalah spread tersebut. Harga tertinggi 52-minggu hanya menjelaskan posisi harga di dalam rentang satu tahunnya sendiri, tidak lebih. Saham yang jatuh tajam musim panas lalu dan berhasil bangkit kembali memiliki label yang sama dengan saham yang terus naik tanpa henti.

Saham di level terendah 52-minggu

Layar yang sama, namun dibalik. Nama-nama ini ditutup pada atau dalam rentang 1% dari harga penutupan terendah dalam 52 minggu terakhir, diurutkan dari performa year-to-date terlemah, hingga dua belas nama.

QuerySaham di 52-week lows, diurutkan berdasarkan year-to-date return
SQL tepat di balik setiap angka
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 memiliki performa year-to-date terlemah dalam daftar ini sebesar -41%, ditutup pada $61.48, berada dalam rentang 1% dari harga penutupan terendah 52-minggu miliknya. CPRT menyusul berikutnya pada -30.6%.

Level terendah 52-minggu adalah posisi dalam rentang harga, bukan penilaian terhadap bisnis. Perusahaan yang menguntungkan dapat masuk ke dalam daftar ini melalui periode stagnasi yang panjang, begitu pula perusahaan yang sedang mengalami kesulitan nyata. Harga penutupan saja tidak dapat membedakan keduanya. Untuk versi pasar luas dari pertanyaan yang sama, lihat bagaimana pasar pulih dari crash.

Apa yang ditunjukkan oleh jumlah high dan low terhadap market breadth

Breadth mengukur seberapa banyak saham yang berpartisipasi dalam sebuah pergerakan, bukan seberapa jauh indeks bergerak. Perbandingan antara jumlah new highs terhadap new lows adalah salah satu indikator breadth tertua, dan pada halaman ini, angka tersebut adalah angka yang perlu diperhatikan.

QueryNew 52-week highs vs new lows, harian, selama enam minggu terakhir
SQL tepat di balik setiap angka
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

Pada Jul 21, 2026, layar menunjukkan 26 saham pada atau mendekati 52-week high berbanding 7 pada atau mendekati low, dengan angka neto 19. Enam minggu sebelumnya, pada Jun 9, 2026, layar yang sama menunjukkan 35 highs dan 3 lows.

Sepanjang 29 sesi yang dipetakan, kedua jumlah tersebut berfluktuasi tajam dari hari ke hari, sehingga level pada satu sesi saja kurang penting dibandingkan tren selama beberapa minggu. Indeks yang stabil sementara jumlah high menipis menunjukkan market yang lebih sempit daripada yang ditunjukkan oleh indeks itu sendiri. Kondisi di mana jumlah low melonjak adalah latar belakang di balik membeli saat orang lain takut, yang telah kami uji terhadap sentimen berita.

Seberapa jauh sisa pasar dari titik tertingginya

High dan low adalah dua ujung dari sebuah distribusi; sebagian besar saham berada di tengah. Panel ini mengurutkan seluruh layar berdasarkan jarak di bawah 52-week high dan melaporkan median year-to-date return pada setiap band.

QueryPosisi seluruh screen terhadap 52-week high
SQL tepat di balik setiap angka
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% dari layar, 26 nama, ditutup dalam rentang 1% dari 52-week high. Di sisi lain, 17% ditutup lebih dari 35% di bawah titik tersebut. Median year-to-date return pada band teratas adalah 32.8%; pada band terbawah adalah -28.9%, dan grafik tersebut menggambarkan bentuk di antara keduanya.

Gradien tersebut lebih dekat ke aritmatika daripada sebuah penemuan: sebuah saham yang mendekati 52-week high, secara konstruksi, telah menghabiskan sebagian besar tahun dengan bergerak naik. Panel ini memiliki peran penting dalam skala: seberapa tidak biasa titik ekstrem tersebut, dan seberapa banyak bagian pasar yang berada jauh dari harga terbaiknya sendiri. Memegang salah satu nama tersebut dalam jumlah besar adalah eksposur yang diukur dalam risiko nyata dari satu saham.

Posisi pasar terhadap rentang 52-minggu miliknya

Satu saham pada level tertinggi memiliki makna yang berbeda jika dibandingkan dengan pasar yang mendekati level tertingginya, dibandingkan dengan pasar yang jauh dari level tersebut. Lima ETF pasar luas di bawah ini diukur dengan cara yang sama persis seperti saham-saham di atas.

QueryPosisi lima broad-market ETF dalam 52-week range masing-masing
SQL tepat di balik setiap angka
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) ditutup 1.08% di bawah level tertinggi 52-minggu, yang paling dekat di antara kelimanya, dan 17.2% di atas level terendah 52-minggu. Nasdaq 100 (QQQ) berada paling jauh dari level tertingginya pada 4.98%. Year to date, keduanya berada pada 11.1% dan 15.4%.

Selisih antara versi equal-weighted dan cap-weighted dari indeks yang sama merupakan indikator breadth tersendiri. Ketika garis equal-weighted mendekati level tertingginya, rata-rata anggota pasar tumbuh lebih cepat daripada anggota terbesar. Ketika garis cap-weighted lebih dekat, segelintir perusahaan sangat besar yang menopang indeks tersebut. Tidak ada dari kedua kondisi ini yang memberikan prakiraan, dan keluar dari pasar pada periode yang salah akan mengakibatkan biaya seperti yang dijelaskan dalam melewatkan hari-hari terbaik pasar.

Cara pengukuran ini dilakukan

Setiap angka pada halaman ini berasal dari minute bars pada US exchange tape, yang diagregasikan menjadi harga penutupan harian. Aturan lengkapnya adalah:

  • Universe. Hanya perusahaan operasional yang terdaftar di AS, yang diidentifikasi melalui laporan laba rugi perusahaan yang diajukan ke SEC untuk periode yang berakhir dalam 400 hari terakhir, sehingga ETF dan dana investasi tidak masuk dalam kedua daftar tersebut. ETF leveraged dan inverse juga dikecualikan secara eksplisit sebagai langkah pencegahan tambahan.
  • Ambang batas likuiditas. Sebuah saham harus diperdagangkan setidaknya senilai $2 miliar selama 20 hari kalender terakhir. Setelah memperhitungkan akhir pekan dan hari libur, jendela waktu tersebut mencakup sekitar selusin sesi, sehingga rata-rata per sesi adalah sekitar $150 juta. Hal ini menjaga daftar tetap berisi nama-nama yang dapat diperdagangkan oleh pembaca dan mencegah tape yang tipis menciptakan angka ekstrem.
  • Stock split dikecualikan, bukan disesuaikan. Setiap ticker dengan stock split yang dilakukan dalam 460 hari terakhir akan dihapus dari layar. Jendela waktu ini sengaja dibuat lebih dari satu tahun penuh, cukup luas untuk mencakup harga tertua yang dijangkau oleh grafik breadth di bawah ini. Ini adalah cara paling umum yang dapat menyebabkan halaman seperti ini memublikasikan data yang salah: reverse split 1-untuk-20 akan melipatgandakan harga yang dikutip sebanyak dua puluh kali lipat tanpa adanya perdagangan di baliknya, dan layar yang tidak disesuaikan akan melaporkan rekor 52-week high yang spektakuler. Forward split memberikan hasil sebaliknya dan memalsukan 52-week low.
  • Harga penutupan, bukan ekstrem intraday. Nilai high dan low diukur berdasarkan penutupan. Sebuah saham dapat diperdagangkan melewati 52-week high miliknya selama hari perdagangan, namun ditutup di bawahnya, dan tidak akan muncul di sini. Layar yang dibangun berdasarkan data intraday akan melaporkan jumlah yang lebih besar.
  • Sesi harus sudah selesai. Penutupan harian adalah minute bar terakhir antara pukul 15:30 dan 16:00 waktu New York. Sesi yang masih berjalan tidak memiliki bars dalam setengah jam tersebut, sehingga tidak dapat masuk ke dalam perhitungan, dan sesi yang sedang berlangsung tidak akan pernah masuk. Sesi hari libur dengan penutupan awal juga tidak masuk karena alasan yang sama. Tanggal yang tertera di atas adalah sesi terakhir yang telah lolos tes, sehingga mungkin tertinggal satu atau dua hari dari kalender.
  • Riwayat satu tahun penuh. Sebuah saham membutuhkan setidaknya 200 sesi di dalam jendela 52 minggu dan sesi pertama setidaknya 350 hari ke belakang. Perusahaan yang baru melantai tiga bulan lalu tidak dapat menampilkan 52-week high di sini.
  • Rentang 1%. "Pada 52-week high" berarti harga penutupan berada pada atau dalam rentang 1% dari penutupan tertinggi dalam 52 minggu terakhir, dan daftar low mencerminkan hal yang sama. Year-to-date returns diukur dari penutupan terakhir tahun 2025.

FAQ

Apakah membeli saat harga berada di 52-week high merupakan ide yang bagus?

Tidak ada jawaban umum, dan konten ini bukan merupakan saran investasi. Halaman ini hanya menunjukkan data historis: saham yang berada dalam rentang 1% dari 52-week high memiliki median year-to-date return sebesar 32.8%, dibandingkan dengan -28.9% untuk saham yang harganya lebih dari 35% di bawah level tertinggi tersebut. Data tersebut mendeskripsikan kinerja tahun lalu, bukan tahun mendatang. Label tersebut menandakan posisi dalam rentang harga, bukan valuasi.

Apa artinya jika sebuah saham menyentuh 52-week low?

Artinya harga penutupan saham tersebut lebih rendah dibandingkan titik mana pun dalam 52 minggu terakhir. Pada Jul 21, 2026, hal ini berlaku untuk 7 nama dalam layar ini. Harga rendah dapat disebabkan oleh memburuknya fundamental bisnis atau penurunan harga yang lambat pada perusahaan yang tetap profitabel, dan harga saja tidak dapat menentukan penyebabnya.

Berapa banyak saham yang sedang berada di 52-week highs saat ini?

Hingga penutupan pada Jul 21, 2026, sebanyak 26 saham dalam layar ini ditutup pada atau dalam rentang 1% dari 52-week high, dibandingkan dengan 7 yang berada pada atau dalam rentang 1% dari 52-week low. Layar ini berisi perusahaan operasional AS yang besar dan likuid dengan ambang batas turnover sebesar $2 miliar selama 20 hari kalender terakhir, sehingga jumlah ini lebih kecil daripada laporan dari layar seluruh listing.

Bagaimana 52-week high dihitung?

Ambil setiap harga penutupan selama 52 minggu terakhir dan cari nilai terbesarnya. Jika harga penutupan terbaru sama dengan nilai tersebut, maka saham tersebut telah menetapkan 52-week closing high. Halaman ini juga menghitung saham yang berada dalam rentang 1% dari level tersebut, dan menghapus ticker apa pun yang melakukan stock split dalam 460 hari terakhir, karena split mengubah harga kuotasi tanpa mengubah nilai kepemilikan.


Setiap panel di atas menyimpan query SQL di baliknya. Buka query di bawah tabel mana pun untuk mengaudit layar tersebut, atau jalankan pada terminal Strasmore. Untuk pergerakan terbesar minggu ini alih-alih nilai ekstrem tahunan, lihat pemenang dan pecundang saham terbesar minggu ini.

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