Strasmore Research
مارکیٹ خلاصہ Matt Connorاز Matt Connor · اپ ڈیٹ شدہ 2026-07-24 · data as of July 24, 2026 · refreshed weekly

اسٹاکس 52-week high اور low کی فہرست

exchange tape سے حاصل کردہ ڈیٹا کے مطابق 52-week high اور 52-week low پر کلوز ہونے والے stocks کی مکمل تفصیلات اور مارکیٹ breadth کا تجزیہ یہاں دیکھیں۔

52-week high سے مراد وہ بلند ترین قیمت ہے جس پر گزشتہ ایک سال کے دوران کسی stock نے کلوزنگ کی ہو۔ اسی طرح، 52-week low سے مراد سب سے کم قیمت ہے۔ گزشتہ مکمل سیشن، Jul 21, 2026، اس اسکرین پر موجود 26 stocks نے 52-week high کے برابر یا اس کے 1% کے اندر کلوزنگ کی، جبکہ 7 نے 52-week low کے برابر یا اس کے 1% کے اندر کلوزنگ کی۔ یہ اسکرین امریکہ کی بڑی اور liquid operating companies کا احاطہ کرتی ہے اور exchange tape سے ڈیٹا ری بلڈ کرتی ہے۔

52-week highs پر اسٹاکس

سال کے آغاز سے اب تک سب سے زیادہ اضافہ کرنے والے اسٹاکس نیچے دیے گئے ہیں، جن میں بارہ تک اسٹاکس شامل ہیں۔ ان میں سے ہر ایک نے گزشتہ 52 ہفتوں کے اپنے بلند ترین close کے برابر یا اس کے 1% کے اندر سیشن کا اختتام کیا۔

استفسار کریں52-week highs پر اسٹاکس، year-to-date return کے مطابق
ہر عدد کے پیچھے موجود درست SQL
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 سال کے لیے 99.6% کے ساتھ سب سے اوپر ہے، جس کا close $439.18 رہا۔ اس فہرست میں، ساخت کے مطابق، close گزشتہ 52 ہفتوں کے 52-week high کے 1% کے اندر ہے، اس لیے قیمت کا کالم اس سطح کے طور پر بھی کام کرتا ہے جس کا امتحان لیا جا رہا ہے۔ DINO کے بعد 99% اور MPC 96.6% پر ہیں۔ ٹیبل کے آخری حصے میں ROKU سال کے لیے 33% پر ہے۔

اصل نکتہ یہ فرق ہے۔ 52-week high صرف یہ بتاتا ہے کہ قیمت اپنی ایک سالہ رینج کے اندر کہاں واقع ہے، اس سے زیادہ کچھ نہیں۔ وہ اسٹاک جو گزشتہ موسم گرما میں تیزی سے گرا اور واپس اوپر آیا، اسے اسی لیبل کے ساتھ پیش کیا جاتا ہے جو اس اسٹاک کو ملتا ہے جس میں کبھی اضافہ نہیں رکا۔

Stocks 52-week lows پر

اسی اسکرین کا الٹ ورژن۔ یہ نام گزشتہ 52 ہفتوں کے اپنے کم ترین کلوزنگ پر یا اس سے 1% کے اندر بند ہوئے، جنہیں سال کے آغاز سے اب تک کی کم ترین کارکردگی کے لحاظ سے ترتیب دیا گیا ہے، جن میں بارہ نام شامل ہیں۔

استفسار کریں52-week lows پر اسٹاکس، year-to-date return کے مطابق
ہر عدد کے پیچھے موجود درست SQL
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 کی سال کے آغاز سے اب تک کی کارکردگی سب سے کم ہے جو کہ -41% ہے، اور یہ $61.48 پر بند ہوا، جو کہ اپنے 52-week کلوزنگ لو سے 1% کے اندر ہے۔ اس کے بعد -30.6% پر CPRT کا نمبر ہے۔

52-week low قیمت کی حد میں ایک پوزیشن ہے، نہ کہ کسی کاروبار کے بارے میں کوئی حتمی فیصلہ۔ منافع بخش کمپنیاں بھی طویل عرصے تک خاموش رہنے کی وجہ سے اس فہرست میں شامل ہو جاتی ہیں، اور وہی صورتحال ان کمپنیوں کے ساتھ بھی ہوتی ہے جو حقیقی مشکلات کا شکار ہیں۔ صرف کلوزنگ پرائس ان کے درمیان فرق نہیں کر سکتی۔ مارکیٹ کے حوالے سے اسی سوال کے جواب کے لیے، مارکیٹ کریشز سے کیسے بحال ہوتی ہے دیکھیں۔

مارکیٹ برڈتھ (breadth) کے بارے میں ہائی اور لو کاؤنٹ کیا بتاتے ہیں

برڈتھ (breadth) اس بات کی پیمائش کرتی ہے کہ کسی موومنٹ میں کتنے اسٹاکس حصہ لیتے ہیں، بجائے اس کے کہ انڈیکس کتنی دور تک گیا۔ نئے ہائی (new highs) بمقابلہ نئے لو (new lows) کی تعداد برڈتھ کی قدیم ترین ریڈنگز میں سے ایک ہے، اور اس صفحے پر یہی وہ نمبر ہے جس پر نظر رکھنا ضروری ہے۔

استفسار کریںگزشتہ چھ ہفتوں میں روزانہ، نئے 52-week highs بمقابلہ نئے lows
ہر عدد کے پیچھے موجود درست SQL
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

Jul 21, 2026 کو، اس اسکرین پر 26 نام 52-week high کے قریب یا اس پر تھے، جبکہ 7 نام لو (low) کے قریب یا اس پر تھے، جس کا نیٹ ریڈنگ 19 رہا۔ چھ ہفتے قبل، Jun 9, 2026 کو، اسی اسکرین پر 35 ہائی اور 3 لو تھے۔

چند کیے گئے 29 سیشنز کے دوران، دونوں کاؤنٹ روزانہ کی بنیاد پر تیزی سے بدلتے ہیں، اس لیے کسی بھی ایک سیشن کا لیول ہفتوں کے رجحان (drift) کے مقابلے میں کم اہمیت رکھتا ہے۔ اگر انڈیکس مستحکم ہے لیکن ہائی کاؤنٹ کم ہو رہا ہے، تو اس کا مطلب ہے کہ مارکیٹ انڈیکس کے مقابلے میں زیادہ تنگ (narrower) ہے۔ اگر لو (low) کاؤنٹ میں اضافہ ہو رہا ہو، تو یہ خوف کے وقت خریداری کرنے کی صورتحال ہے، جسے ہم نے نیوز سینٹیمنٹ کے حوالے سے ٹیسٹ کیا ہے۔

مارکیٹ اپنے بلند ترین سطح سے کتنی دور ہے

ہائیز (Highs) اور لوز (Lows) تقسیم کے دو کنارے ہیں؛ زیادہ تر اسٹاکس درمیان میں رہتے ہیں۔ یہ پینل تمام اسکرین کو 52-week high سے دوری کے لحاظ سے ترتیب دیتا ہے اور ہر بینڈ میں میڈین (median) year-to-date ریٹرن رپورٹ کرتا ہے۔

استفسار کریںپورے اسکرین کا اپنے 52-week high سے کتنا نیچے ہونا
ہر عدد کے پیچھے موجود درست SQL
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%، یعنی 26 نام، 52-week high کے 1% کے اندر بند ہوا۔ دوسری طرف، 17% ایک 52-week high سے 35% سے زیادہ نیچے بند ہوئے۔ سب سے اوپر والے بینڈ میں میڈین year-to-date ریٹرن 32.8% ہے؛ سب سے نچلے بینڈ میں یہ -28.9% ہے، اور چارٹ ان کے درمیان کی شکل کو ظاہر کرتا ہے۔

یہ اتار چڑھاؤ کسی دریافت کے بجائے ریاضی کے زیادہ قریب ہے: 52-week high کے قریب موجود اسٹاک نے، اپنی ساخت کے مطابق، سال کا زیادہ حصہ اوپر جاتے ہوئے گزارا ہے۔ یہ پینل اپنی اہمیت اس بنیاد پر رکھتا ہے کہ انتہائی صورتحال کتنی غیر معمولی ہے، اور مارکیٹ کا کتنا حصہ اپنی بہترین قیمت سے بہت دور ہے۔ ان میں سے کسی ایک نام میں بڑی سرمایہ کاری کرنا ایک اسٹاک کا حقیقی خطرہ ہے۔

مارکیٹ اپنی 52-week رینج میں کہاں ہے

ایک اسٹاک کا اپنے بلند ترین درجے (high) پر ہونا، مارکیٹ کے اپنے high کے قریب ہونے یا اس سے دور ہونے کے لحاظ سے مختلف معنی رکھتا ہے۔ نیچے دیے گئے پانچ بڑے مارکیٹ ETFs کو بالکل اسی طرح ناپا گیا ہے جیسے اوپر اسٹاکس کو ناپا گیا ہے۔

استفسار کریںپانچ broad-market ETFs اپنے 52-week range کے اندر کہاں ہیں
ہر عدد کے پیچھے موجود درست SQL
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) اپنے 52-week high سے 1.08% نیچے بند ہوا، جو ان پانچوں میں سب سے قریب ہے، اور 17.2% اپنے 52-week low سے اوپر ہے۔ Nasdaq 100 (QQQ) اپنے high سے سب سے دور 4.98% پر ہے۔ سال کے آغاز سے اب تک (year to date) ان دونوں کی صورتحال 11.1% اور 15.4% ہے۔

ایک ہی انڈیکس کے equal-weighted اور cap-weighted ورژن کے درمیان فرق خود ایک breadth ریڈنگ ہے۔ جب equal-weighted لائن اپنے high کے قریب ہوتی ہے، تو اس کا مطلب ہے کہ اوسط درجے کے ممبران بڑے ممبران کے مقابلے میں تیزی سے بڑھ رہے ہیں۔ جب cap-weighted لائن قریب ہوتی ہے، تو اس کا مطلب ہے کہ چند بہت بڑی کمپنیاں انڈیکس کو سہارا دے رہی ہیں۔ ان میں سے کوئی بھی صورتحال کسی پیش گوئی پر مبنی نہیں ہے، اور غلط وقت پر مارکیٹ سے باہر نکلنے کا نقصان مارکیٹ کے بہترین دنوں سے محروم ہونے کی صورت میں ہوتا ہے۔

اس کا اندازہ کیسے لگایا جاتا ہے

اس صفحے پر موجود ہر اعداد و شمار US exchange tape کے minute bars سے لیا گیا ہے، جنہیں روزانہ کی closing prices میں جمع کیا گیا ہے۔ مکمل قواعد درج ذیل ہیں:

  • Universe (مجموعہ)۔ صرف وہ operating companies جو US میں listed ہیں، جن کی SEC کے پاس جمع شدہ income statement گزشتہ 400 دنوں کے عرصے کے اندر ختم ہوتی ہو۔ اس وجہ سے ETFs اور funds دونوں فہرستوں سے باہر رہتے ہیں۔ مزید احتیاط کے طور پر Leveraged اور inverse ETFs کو بھی نام کے لحاظ سے خارج کر دیا گیا ہے۔
  • Liquidity floor (لیکویڈیٹی کی حد)۔ کسی stock کو گزشتہ 20 کیلنڈر دنوں کے دوران کم از کم $2 billion کی تجارت کرنی چاہیے۔ ہفتہ اور تعطیلات نکالنے کے بعد، یہ دورانیہ تقریباً بارہ sessions پر مشتمل ہوتا ہے، جس کا مطلب ہے کہ فی session تقریباً $150 million کا معیار برقرار رہتا ہے۔ یہ اصول فہرستوں کو ان ناموں تک محدود رکھتا ہے جن میں قاری واقعی تجارت کر سکے اور کم liquidity والی tape کے ذریعے غلط نتائج (extreme) پیدا ہونے سے روکتا ہے۔
  • Splits کو شامل نہیں کیا جاتا، ایڈجسٹ بھی نہیں کیا جاتا۔ کوئی بھی ticker جس کا stock split گزشتہ 460 دنوں میں ہوا ہو، اسے اسکرین سے نکال دیا جاتا ہے۔ یہ دورانیہ جان بوجھ کر ایک سال سے زیادہ رکھا گیا ہے تاکہ نیچے دیے گئے breadth chart کی پرانی ترین قیمتوں کا احاطہ کیا جا سکے۔ اس طرح کی ویب سائٹس پر غلط معلومات آنے کا سب سے بڑا سبب یہی ہے: 1-for-20 reverse split قیمت کو بیس گنا بڑھا دیتا ہے جبکہ پیچھے کوئی حقیقی تجارت نہیں ہوتی، اور ایک unadjusted اسکرین اس کو ایک شاندار نیا 52-week high ظاہر کرے گی۔ اس کے برعکس forward split قیمت کو کم کر کے 52-week low کا جھوٹا تاثر دیتا ہے۔
  • Closing prices، نہ کہ intraday extremes۔ High اور low کا اندازہ closing prices پر کیا جاتا ہے۔ ایک stock دن کے دوران اپنے 52-week high سے اوپر تجارت کر سکتا ہے، لیکن اگر وہ اس سے نیچے close ہو جائے تو اس کا نام یہاں ظاہر نہیں ہوگا۔ Intraday prints پر مبنی اسکرینز زیادہ تعداد (counts) رپورٹ کرتی ہیں۔
  • Session کا مکمل ہونا ضروری ہے۔ دن کا close نیویارک وقت کے مطابق 15:30 اور 16:00 کے درمیان آخری minute bar ہوتا ہے۔ جو session ابھی لوڈ ہو رہا ہو، اس کے اس آدھے گھنٹے میں کوئی bars نہیں ہوتے، اس لیے وہ کیلکولیشن میں شامل نہیں ہو سکتا، اور جاری session کبھی شامل نہیں ہوتا۔ چھٹی والے دن کے early-close sessions بھی اسی وجہ سے خارج ہو جاتے ہیں۔ اوپر دی گئی تاریخ وہ آخری session ہے جو اس معیار پر پورا اترا، اس لیے یہ کیلنڈر سے ایک یا دو دن پیچھے ہو سکتی ہے۔
  • ایک سال کی مکمل تاریخ۔ ایک stock کو 52-week window کے اندر کم از کم 200 sessions اور پہلا session کم از کم 350 دن پرانا ہونا چاہیے۔ تین ماہ قبل listed ہونے والی کمپنی یہاں 52-week high ظاہر نہیں کر سکتی۔
  • 1% band۔ "At a 52-week high" کا مطلب ہے کہ close قیمت گزشتہ 52 ہفتوں کے بلند ترین close کے برابر یا اس کے 1% کے اندر ہو، اور low list اس کا عکس ہوتی ہے۔ Year-to-date returns کا اندازہ 2025 کے آخری close سے لگایا جاتا ہے۔

FAQ

Is buying at a 52-week high a good idea?

There is no general answer, and nothing here is advice. What this page can show is backward-looking: stocks within 1% of a 52-week high carry a median year-to-date return of 32.8%, against -28.9% for stocks more than 35% below their high. That describes the year behind those stocks, not the year ahead. The label marks a position in a price range, not a valuation.

What does it mean when a stock hits a 52-week low?

It means the stock closed lower than at any point in the previous 52 weeks. On Jul 21, 2026 that applied to 7 names on this screen. A low can accompany a deteriorating business or a long drift in a profitable one, and the price by itself does not tell you which.

How many stocks are at 52-week highs right now?

As of the close on Jul 21, 2026, 26 stocks on this screen closed at or within 1% of a 52-week high, against 7 at or within 1% of a 52-week low. The screen holds large, liquid US operating companies clearing a $2 billion turnover floor over the past 20 calendar days, so these counts run smaller than an all-listings screen would report.

How is a 52-week high calculated?

Take every closing price over the trailing 52 weeks and find the largest. If the latest close equals it, the stock has set a 52-week closing high. This page also counts any stock within 1% of that level, and drops any ticker with a split in the past 460 days, since a split changes the quoted price without changing what a holding is worth.


Every panel above stores the SQL behind it. Open the query under any table to audit the screen, or run it on the Strasmore terminal. For the week's largest moves rather than the year's extremes, see the biggest stock gainers and losers this week.

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