Strasmore Research
Tổng hợp thị trường Matt ConnorBởi Matt Connor · Cập nhật 2026-07-23 · data as of July 23, 2026 · refreshed weekly

Danh sách cổ phiếu đạt đỉnh và đáy 52 tuần

Xem các cổ phiếu đóng cửa tại mức cao nhất và thấp nhất 52 tuần được lọc từ dữ liệu sàn chứng khoán để theo dõi chỉ số breadth của thị trường.

Giá cao nhất 52 tuần là mức giá đóng cửa cao nhất của một cổ phiếu trong vòng một năm qua, và giá thấp nhất 52 tuần là mức giá thấp nhất. Trong phiên giao dịch gần nhất, Jul 21, 2026, 26 cổ phiếu trong danh sách này đã đóng cửa tại mức cao nhất 52 tuần hoặc chỉ cách mức đó trong khoảng 1%, và 7 cổ phiếu đóng cửa tại mức thấp nhất 52 tuần hoặc chỉ cách mức đó trong khoảng 1%. Danh sách này bao gồm các công ty hoạt động tại Mỹ có vốn hóa lớn và tính thanh khoản cao, được tổng hợp từ dữ liệu giao dịch của sàn chứng khoán.

Các cổ phiếu đạt mức cao nhất 52 tuần

Danh sách các cổ phiếu có mức tăng trưởng mạnh nhất từ đầu năm đến nay được liệt kê dưới đây, với tối đa mười hai mã. Mỗi mã đều kết thúc phiên giao dịch tại mức giá cao nhất hoặc trong phạm vi 1% so với mức giá đóng cửa cao nhất trong 52 tuần qua.

Truy vấnCổ phiếu đạt đỉnh 52 tuần, sắp xếp theo lợi nhuận YTD
Câu lệnh SQL chính xác đằng sau mỗi con số
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 đứng đầu danh sách với mức tăng 99.6% trong năm, đóng cửa ở mức $439.18. Trong danh sách này, mức giá đóng cửa mặc nhiên là mức cao nhất 52 tuần trong phạm vi 1%, do đó cột giá đóng cửa cũng đồng thời là mức giá đang được kiểm chứng. DINO theo sau với mức 99% và MPC ở mức 96.6%. Ở cuối bảng, ROKU ghi nhận mức tăng 33% trong năm.

Mục tiêu chính là xem xét spread. Một mức cao nhất 52 tuần chỉ mô tả vị trí của giá trong phạm vi biến động một năm của chính nó, không hơn không kém. Một cổ phiếu từng giảm mạnh vào mùa hè năm ngoái rồi nỗ lực hồi phục sẽ có cùng nhãn dán này với một cổ phiếu chưa bao giờ ngừng tăng trưởng.

Các cổ phiếu chạm đáy 52 tuần

Cùng một bộ lọc, nhưng đảo ngược lại. Những mã này đóng cửa tại mức thấp nhất hoặc trong phạm vi 1% so với mức đóng cửa thấp nhất trong 52 tuần qua, được sắp xếp theo thứ tự từ mức tăng trưởng từ đầu năm (year-to-date) yếu nhất, lên đến mười hai mã.

Truy vấnCổ phiếu chạm đáy 52 tuần, sắp xếp theo lợi nhuận YTD
Câu lệnh SQL chính xác đằng sau mỗi con số
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 có mức tăng trưởng từ đầu năm yếu nhất trong danh sách ở mức -41%, đóng cửa tại $61.48, nằm trong phạm vi 1% so với mức đóng cửa thấp nhất trong 52 tuần của chính nó. CPRT đứng tiếp theo với mức -30.6%.

Mức thấp nhất 52 tuần chỉ là một vị thế trong phạm vi giá, không phải là kết luận về tình hình kinh doanh. Các công ty có lợi nhuận có thể lọt vào danh sách này sau những giai đoạn đi ngang kéo dài, và các công ty đang gặp khó khăn thực sự cũng vậy. Chỉ riêng giá đóng cửa không thể phân biệt được hai nhóm này. Để xem phiên bản trên toàn thị trường cho câu hỏi tương tự, hãy xem cách các thị trường phục hồi sau các đợt sụt giảm.

Ý nghĩa của số lượng mã tăng và giảm đối với độ rộng thị trường

Độ rộng thị trường đo lường số lượng cổ phiếu tham gia vào một xu hướng thay vì chỉ nhìn vào mức độ biến động của chỉ số. Tỷ lệ giữa số mã đạt mức cao mới so với số mã đạt mức thấp mới là một trong những chỉ số đo lường độ rộng lâu đời nhất, và trên trang này, đây là con số đáng để theo dõi.

Truy vấnSố lượng đỉnh và đáy 52 tuần mới, theo ngày, trong 6 tuần qua
Câu lệnh SQL chính xác đằng sau mỗi con số
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

Vào ngày Jul 21, 2026, màn hình ghi nhận 26 mã ở mức hoặc gần mức cao nhất 52 tuần so với 7 mã ở mức hoặc gần mức thấp nhất, cho kết quả thuần là 19. Sáu tuần trước đó, vào ngày Jun 9, 2026, cùng màn hình này ghi nhận 35 mã đạt mức cao và 3 mã đạt mức thấp.

Trong suốt 29 phiên được biểu đồ hóa, cả hai con số này đều biến động mạnh theo từng ngày, vì vậy mức độ của một phiên đơn lẻ ít quan trọng hơn xu hướng dịch chuyển trong nhiều tuần. Một chỉ số đi ngang trong khi số lượng mã tăng giảm dần cho thấy thị trường đang hẹp hơn so với những gì chỉ số đó thể hiện. Một thị trường mà số lượng mã giảm tăng mạnh là bối cảnh đằng sau chiến lược mua khi người khác sợ hãi, điều mà chúng tôi đã kiểm chứng so với tâm lý tin tức.

Khoảng cách của phần còn lại của thị trường so với mức đỉnh

Mức cao và mức thấp là hai đầu của một phân phối; hầu hết các cổ phiếu nằm ở giữa. Bảng này sắp xếp toàn bộ danh mục theo khoảng cách so với mức cao nhất 52 tuần và báo cáo mức lợi nhuận trung vị từ đầu năm đến nay trong mỗi nhóm.

Truy vấnKhoảng cách từ toàn bộ danh mục so với đỉnh 52 tuần
Câu lệnh SQL chính xác đằng sau mỗi con số
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% danh mục, tương ứng với 26 mã, đã đóng cửa trong phạm vi 1% so với mức cao nhất 52 tuần. Ở đầu ngược lại, 17% mã đóng cửa thấp hơn hơn 35% so với mức đó. Mức lợi nhuận trung vị từ đầu năm đến nay ở nhóm trên cùng là 32.8%; ở nhóm dưới cùng là -28.9%, và biểu đồ mô tả hình thái giữa hai nhóm này.

Sự thay đổi dần dần đó thiên về tính toán toán học hơn là một sự phát hiện: một cổ phiếu gần mức cao nhất 52 tuần, về bản chất, đã dành phần lớn thời gian trong năm để tăng giá. Bảng này có giá trị dựa trên quy mô: mức độ bất thường của các thái cực, và bao nhiêu phần của thị trường đang nằm cách xa mức giá tốt nhất của chính chúng. Việc nắm giữ một trong những mã đó với tỷ trọng lớn chính là mức độ rủi ro được đo lường trong rủi ro thực tế của một cổ phiếu.

Vị thế của thị trường trong phạm vi biến động 52 tuần

Một cổ phiếu ở mức cao sẽ có ý nghĩa khác nhau khi so với một thị trường đang ở gần mức cao nhất của chính nó, so với một thị trường đang ở xa mức đó. Năm ETF đại diện cho thị trường rộng dưới đây được đo lường tương tự như các cổ phiếu ở trên.

Truy vấnVị trí của 5 ETF thị trường rộng trong biên độ 52 tuần của chúng
Câu lệnh SQL chính xác đằng sau mỗi con số
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) đóng cửa thấp hơn 1.08% so với mức cao nhất 52 tuần, là chỉ số gần mức cao nhất nhất trong năm chỉ số, và cao hơn 17.2% so với mức thấp nhất 52 tuần. Nasdaq 100 (QQQ) nằm xa mức cao nhất nhất ở mức 4.98%. Tính từ đầu năm đến nay, hai chỉ số này lần lượt là 11.1% và 15.4%.

Khoảng cách giữa phiên bản bình quân gia quyền (equal-weighted) và phiên bản vốn hóa điều chỉnh (cap-weighted) của cùng một chỉ số là một thước đo về độ rộng của thị trường (breadth). Khi đường bình quân gia quyền nằm gần mức cao nhất, các cổ phiếu thành phần trung bình đang tăng trưởng nhanh hơn các cổ phiếu có vốn hóa lớn nhất. Khi đường vốn hóa điều chỉnh nằm gần mức cao nhất, một nhóm nhỏ các công ty cực lớn đang kéo chỉ số lên. Không có kịch bản nào trong hai trường hợp này dùng để dự báo, và việc rời bỏ thị trường trong giai đoạn không phù hợp sẽ dẫn đến chi phí được nêu trong bỏ lỡ những ngày tăng trưởng tốt nhất của thị trường.

Cách thức đo lường

Mọi số liệu trên trang này đều được tổng hợp từ các thanh nến một phút trên bảng điện tử của sàn giao dịch Hoa Kỳ thành giá đóng cửa hàng ngày. Các quy tắc cụ thể như sau:

  • Phạm vi lựa chọn. Chỉ bao gồm các công ty đang hoạt động niêm yết tại Hoa Kỳ, được xác định thông qua báo cáo kết quả hoạt động kinh doanh nộp cho SEC cho giai đoạn kết thúc trong vòng 400 ngày qua. Do đó, các ETF và quỹ đầu tư không nằm trong cả hai danh sách. Các ETF đòn bẩy và ETF nghịch đảo cũng bị loại trừ để đảm bảo tính chính xác tuyệt đối.
  • Ngưỡng thanh khoản. Một cổ phiếu phải có khối lượng giao dịch ít nhất 2 tỷ USD trong 20 ngày lịch gần nhất. Khi trừ đi các ngày cuối tuần và ngày lễ, khoảng thời gian này còn lại khoảng mười hai phiên giao dịch, tương đương mức trung bình gần 150 triệu USD mỗi phiên. Quy tắc này giúp danh sách chỉ bao gồm các mã mà người đọc thực sự có thể giao dịch và ngăn chặn việc các thanh nến mỏng tạo ra các biến động cực đoan giả tạo.
  • Không điều chỉnh, loại bỏ các đợt chia tách. Bất kỳ ticker nào có thực hiện chia tách cổ phiếu trong vòng 460 ngày qua đều bị loại khỏi màn hình. Khoảng thời gian này được thiết lập dài hơn một năm nhằm bao quát hết các mức giá cũ nhất mà biểu đồ độ rộng bên dưới truy xuất tới. Đây là nguyên nhân phổ biến nhất dẫn đến sai lệch dữ liệu: một đợt chia tách ngược tỷ lệ 1-cho-20 sẽ làm giá niêm yết tăng gấp hai mươi lần mà không có khối lượng giao dịch thực tế, và một màn hình không điều chỉnh sẽ báo cáo một mức cao nhất 52 tuần mới đầy ấn tượng. Ngược lại, chia tách xuôi sẽ tạo ra mức thấp nhất 52 tuần giả.
  • Giá đóng cửa, không phải mức cực trị trong ngày. Giá cao nhất và thấp nhất được đo dựa trên giá đóng cửa. Một cổ phiếu có thể giao dịch vượt mức cao nhất 52 tuần trong ngày, nhưng nếu đóng cửa dưới mức đó, nó sẽ không xuất hiện ở đây. Các màn hình dựa trên dữ liệu trong phiên thường báo cáo số lượng lớn hơn.
  • Phiên giao dịch phải hoàn tất. Giá đóng cửa của một ngày là thanh nến một phút cuối cùng trong khoảng từ 15:30 đến 16:00 theo giờ New York. Một phiên đang được tải sẽ không có thanh nến nào trong nửa giờ đó, nên không thể đưa vào tính toán, và phiên đang diễn ra cũng vậy. Các phiên nghỉ lễ đóng cửa sớm cũng bị loại bỏ vì lý do tương tự. Ngày hiển thị ở trên là phiên cuối cùng vượt qua các bài kiểm tra, vì vậy nó có thể chậm hơn lịch thực tế một hoặc hai ngày.
  • Lịch sử đầy đủ một năm. Một cổ phiếu cần có ít nhất 200 phiên trong phạm vi 52 tuần và phiên đầu tiên phải cách đây ít nhất 350 ngày. Một công ty mới niêm yết ba tháng trước không thể xuất hiện ở mức cao nhất 52 tuần tại đây.
  • Biên độ 1%. "Ở mức cao nhất 52 tuần" có nghĩa là giá đóng cửa nằm tại hoặc trong phạm vi 1% so với mức đóng cửa cao nhất trong 52 tuần qua, và danh sách giá thấp nhất cũng tương tự. Tỷ suất lợi nhuận từ đầu năm (YTD) được đo từ mức đóng cửa cuối cùng của năm 2025.

FAQ

Mua cổ phiếu ở mức cao nhất 52 tuần có phải là ý tưởng hay không?

Không có câu trả lời chung cho vấn đề này, và nội dung ở đây không phải là lời khuyên đầu tư. Những gì trang này hiển thị là dữ liệu trong quá khứ: các cổ phiếu nằm trong khoảng 1% so với mức cao nhất 52 tuần có tỷ suất sinh lời trung bình kể từ đầu năm là 32.8%, trong khi các cổ phiếu thấp hơn mức cao nhất trên 35% là -28.9%. Con số này mô tả kết quả của năm đã qua, không phải cho năm tới. Nhãn này chỉ xác định vị thế trong một phạm vi giá, không phải là định giá.

Việc một cổ phiếu chạm mức thấp nhất 52 tuần có ý nghĩa gì?

Điều đó có nghĩa là cổ phiếu đã đóng cửa ở mức thấp hơn bất kỳ thời điểm nào trong 52 tuần trước đó. Vào Jul 21, 2026, điều này áp dụng cho 7 mã trong danh sách này. Mức thấp có thể đi kèm với một doanh nghiệp đang suy thoái hoặc một doanh nghiệp đang có lãi nhưng giá giảm dần trong thời gian dài, và bản thân mức giá không cho bạn biết trường hợp nào đang xảy ra.

Hiện có bao nhiêu cổ phiếu đang ở mức cao nhất 52 tuần?

Tính đến thời điểm đóng cửa ngày Jul 21, 2026, có 26 cổ phiếu trong danh sách này đóng cửa tại hoặc trong khoảng 1% so với mức cao nhất 52 tuần, so với 7 cổ phiếu tại hoặc trong khoảng 1% so với mức thấp nhất 52 tuần. Danh sách này chỉ bao gồm các công ty hoạt động tại Mỹ có vốn hóa lớn và tính thanh khoản cao, với doanh thu tối thiểu đạt 2 tỷ USD trong 20 ngày lịch qua, vì vậy các con số này sẽ nhỏ hơn so với báo cáo từ một danh sách bao gồm tất cả các niêm yết.

Mức cao nhất 52 tuần được tính như thế nào?

Hãy lấy tất cả các giá đóng cửa trong vòng 52 tuần gần nhất và tìm mức lớn nhất. Nếu mức đóng cửa gần nhất bằng mức đó, cổ phiếu đã thiết lập mức đóng cửa cao nhất 52 tuần. Trang này cũng tính bất kỳ cổ phiếu nào nằm trong khoảng 1% so với mức đó, và loại bỏ bất kỳ ticker nào có chia tách cổ phiếu trong vòng 460 ngày qua, vì việc chia tách làm thay đổi giá niêm yết mà không làm thay đổi giá trị thực của tài sản nắm giữ.


Mỗi bảng phía trên đều lưu trữ truy vấn SQL đằng sau nó. Hãy mở truy vấn dưới bất kỳ bảng nào để kiểm tra danh sách, hoặc chạy truy vấn đó trên terminal Strasmore. Để xem các biến động lớn nhất trong tuần thay vì các mức cực đại của cả năm, hãy xem những cổ phiếu tăng và giảm mạnh nhất tuần này.

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