Strasmore Research
تحلیل بازار Matt Connorتوسط Matt Connor · به‌روزرسانی شده در 2026-07-24 · data as of July 24, 2026 · refreshed weekly

سهام کاندیدای Short squeeze در این هفته

بررسی سهام با پتانسیل Short squeeze بر اساس میزان Days to Cover و افزایش قیمت در کنار تحلیل حجم معاملات Short نسبت به کل معاملات بازار.

سهام دارای پتانسیل Short squeeze بر اساس دو عامل بررسی می‌شوند: حجم معاملات Short نسبت به حجم معاملات کل سهم بالا باشد و قیمت سهم در حال افزایش باشد. این صفحه بر اساس آخرین گزارش‌های رسمی از میزان Short-interest که در تاریخ Jun 30, 2026 تسویه شده است، این فیلتر را اجرا می‌کند و تغییرات قیمت را در پنج جلسه معاملاتی منتهی به Jul 22, 2026 اندازه‌گیری می‌کند. این مکانیسم‌ها مشابه موارد مشاهده شده در Squeezeهای گذشته هستند. مطالب این صفحه پیش‌بینی بازار نیستند و اکثر سهامی که حجم Short بالایی دارند، هرگز دچار Squeeze نمی‌شوند.

پیش از نام‌ها، به تاریخ‌ها توجه کنید. طبق قوانین، بخش مربوط به Short-interest در این صفحه دو هفته قدیمی است و این موضوع به دلیل نقص در سیستم انتقال داده نیست: کارگزاران دو بار در ماه در تاریخ‌های مشخص برای تسویه، موقعیت‌های Short خود را به FINRA گزارش می‌دهند و فایل تجمیع‌شده تقریباً هشت روز کاری بعد منتشر می‌شود. تازه‌ترین داده قابل مشاهده برای عموم، مربوط به Jun 30, 2026 و 24 روز گذشته است، در حالی که روند تغییرات قیمت تا Jul 22, 2026 محاسبه می‌شود. هر اتفاقی که در این فاصله زمانی برای بخش Short رخ داده باشد، برای هیچ ابزار غربالگری از جمله این صفحه، قابل مشاهده نیست. چرا داده‌های Short interest همیشه دو هفته قدیمی هستند چرخه گزارش‌دهی را گام‌به‌گام بررسی می‌کند.

پرس‌وجوتمامی ورودی‌های این صفحه و قدمت آن‌ها
کد دقیق SQL پشت هر عدد
WITH prints AS (
    SELECT DISTINCT settlement_date AS d
    FROM global_markets.stocks_short_interest
    ORDER BY d DESC
    LIMIT 2
),
loaded AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND 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
    GROUP BY session
    HAVING count() >= 380
),
legs AS (
    SELECT arrayJoin([
        ('Short interest, previous settlement', (SELECT min(d) FROM prints)),
        ('Short interest, latest settlement', (SELECT max(d) FROM prints)),
        ('Price tape, last fully loaded session', (SELECT max(session) FROM loaded))]) AS row
)
SELECT formatDateTime(row.2, '%b %e, %Y') AS as_of_date,
       row.1 AS leg,
       dateDiff('day', row.2, today()) AS age_days
FROM legs

دو گزارش تسویه مربوط به 39 و 24 روز گذشته هستند که نشان‌دهنده چرخه گزارش‌دهی دو بار در ماه به‌اضافه تأخیر در تجمیع داده‌ها است. داده‌های قیمت نیز 2 روز تأخیر دارند که این تأخیر ناشی از فرآیند ورود داده به انبار داده‌ها است و نه قوانین نظارتی. هر دو بازه زمانی دارای محدودیت هستند؛ بنابراین اگر انتقال داده‌ها متوقف شود، این صفحه به‌جای انتشار مجدد یک تاریخ قدیمی با تیتر جدید، همان اطلاعات قبلی را نمایش می‌دهد.

لیست سهام با پتانسیل Short squeeze: فیلتر فعلی

تمام نام‌های زیر معیارهای یکسانی را در یک فایل مشابه پشت سر گذاشته‌اند: میانگین حجم معاملات روزانه پنج میلیون سهم، پنج روز یا بیشتر برای پوشش معاملات (days to cover)، و حرکت مثبت در پنج جلسه معاملاتی منتهی به Jul 22, 2026. نام‌های 31 تمام این شرایط را دارا هستند و 12 مورد از شلوغ‌ترین آن‌ها در اینجا نمایش داده شده است. Days to cover حاصل تقسیم سهام فروخته شده در حالت Short بر میانگین حجم معاملات روزانه است: این عدد نشان می‌دهد که فروشندگان Short برای بازخرید موقعیت خود، به چند روز کامل از کل حجم معاملات سهم نیاز دارند.

پرس‌وجومکانیسم‌های شکل‌گیری Squeeze: تجمع Shortها در نمادهای پرنقدینگی با روند صعودی قیمت
کد دقیق SQL پشت هر عدد
WITH latest AS (
    SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest
),
sessions AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND 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
    GROUP BY session
    HAVING count() >= 380
    ORDER BY session DESC
    LIMIT 6
),
crowded AS (
    SELECT ticker, days_to_cover, short_interest
    FROM global_markets.stocks_short_interest
    WHERE settlement_date = (SELECT d FROM latest)
      AND avg_daily_volume >= 5000000
      AND days_to_cover >= 5
      AND ticker NOT IN ('SPCX')
      AND ticker NOT IN ('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() - 60 AND today())
),
tape AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN (SELECT ticker FROM crowded)
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT session FROM sessions)
      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
    GROUP BY ticker, session
),
moves AS (
    SELECT ticker,
           round((argMax(rth_close, session) / argMin(rth_close, session) - 1) * 100, 1) AS return_5d_pct
    FROM tape
    GROUP BY ticker
    HAVING count() = 6 AND return_5d_pct > 0
)
SELECT c.ticker AS ticker,
       round(c.days_to_cover, 1) AS days_to_cover,
       round(c.short_interest / 1e6, 1) AS shares_short_m,
       m.return_5d_pct AS return_5d_pct
FROM crowded c
INNER JOIN moves m ON m.ticker = c.ticker
ORDER BY c.days_to_cover DESC, c.ticker
LIMIT 12

شلوغ‌ترین نام در این لیست، یعنی MPT، با 16.9 روز پوشش معاملات از مجموع 138.1 میلیون سهم فروخته شده در حالت Short، در حالی که در پنج جلسه منتهی به Jul 22, 2026، با 2.8% درصد رشد همراه بوده است. آخرین ردیف نمایش داده شده، نشان‌دهنده 6.4 روز پوشش معاملات است که نشان‌دهنده نقطه قطع نمایش است، نه کفِ لیست. رتبه‌بندی بر اساس میزان شلوغی (crowding) انجام شده است نه اندازه معاملات؛ بنابراین یک موقعیت متوسط در یک سهم با حجم معاملات کم، رتبه‌ای بالاتر از یک موقعیت بسیار بزرگ در یک سهم با حجم معاملات بالا دارد. برای رتبه‌بندی بر اساس اندازه، the most shorted stocks right now هر دو جدول را در کنار هم ارائه می‌دهد.

معیار افزایش قیمت دلیل مکانیکی دارد. یک Short squeeze در واقع خرید اجباری است که بر اثر بستن موقعیت‌های فروشندگان Short ایجاد می‌شود؛ بستن یک موقعیت Short به معنای بازخرید سهم است که این فرآیند تنها زمانی آغاز می‌شود که قیمت برخلاف موقعیت معاملاتی حرکت کند. How a short squeeze works که با بررسی سوابق GameStop در سال 2021 تحلیل شده است، این توالی را با اعداد نشان می‌دهد.

قوانین و موارد حذف شده توسط هر یک

یک فیلتر، در واقع دیدگاهی است که با اعداد همراه شده است؛ بنابراین، جزئیات در اینجا ارائه می‌شود.

پرس‌وجوفیلتر کردن فایل تسویه از کل داده‌ها تا لیست نهایی، مرحله به مرحله
کد دقیق SQL پشت هر عدد
WITH latest AS (
    SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest
),
sessions AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND 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
    GROUP BY session
    HAVING count() >= 380
    ORDER BY session DESC
    LIMIT 6
),
reported AS (
    SELECT ticker, days_to_cover, avg_daily_volume
    FROM global_markets.stocks_short_interest
    WHERE settlement_date = (SELECT d FROM latest)
),
liquid AS (
    SELECT ticker, days_to_cover
    FROM reported
    WHERE avg_daily_volume >= 5000000
      AND days_to_cover IS NOT NULL
      AND ticker NOT IN ('SPCX')
      AND ticker NOT IN ('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() - 60 AND today())
),
crowded AS (
    SELECT ticker FROM liquid WHERE days_to_cover >= 5
),
tape AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN (SELECT ticker FROM crowded)
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT session FROM sessions)
      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
    GROUP BY ticker, session
),
rising AS (
    SELECT ticker,
           round((argMax(rth_close, session) / argMin(rth_close, session) - 1) * 100, 1) AS return_5d_pct
    FROM tape
    GROUP BY ticker
    HAVING count() = 6 AND return_5d_pct > 0
),
tally AS (
    SELECT (SELECT count() FROM reported) AS all_names,
           (SELECT count() FROM liquid) AS liquid_names,
           (SELECT count() FROM crowded) AS crowded_names,
           (SELECT count() FROM rising) AS rising_names
)
SELECT step.1 AS label, step.2 AS names
FROM (
    SELECT arrayJoin([
        ('Every name in the settlement file', all_names),
        ('Liquid: five million shares a day, no leveraged funds', liquid_names),
        ('Crowded: five or more days to cover', crowded_names),
        ('Rising: a positive move over the price window', rising_names)]) AS step
    FROM tally
)

فایل Jun 30, 2026 شامل 22207 اوراق بهادار است. کف نقدینگی و لیست موارد مستثنی شده، تعداد را به 883 کاهش می‌دهند، آستانه تجمع معاملات (crowding threshold) آن را به 96 می‌رساند و دروازه افزایش قیمت، تنها 31 مورد را باقی می‌گذارد. هر آستانه یک انتخاب است و هر انتخاب متفاوت، لیست متفاوتی ایجاد می‌کند. به همین دلیل است که قوانین به جای پاورقی، در متن اصلی قرار می‌گیرند.

میزان فروش استقراضی هر شرکت چقدر است

بیشتر افراد به دنبال «میزان فروش استقراضی نسبت به شناور» (short interest as a percent of float) هستند که در این داده‌ها موجود نیست. فایل بورس، تعداد سهام فروخته شده به صورت استقراضی و میانگین حجم معاملات روزانه را گزارش می‌دهد، اما هیچ نوع شمارش خاصی برای تعداد سهام ارائه نمی‌کند. آنچه می‌توان استخراج کرد، موقعیت سنجیده شده نسبت به کل سهام منتشر شده است که از تقسیم ارزش بازار هر شرکت بر قیمت هر سهم به دست می‌آید.

پرس‌وجورتبه‌بندی نمادهای منتخب بر اساس Short Interest نسبت به تعداد کل سهام منتشر شده (نه Float)
کد دقیق SQL پشت هر عدد
WITH latest AS (
    SELECT max(settlement_date) AS d FROM global_markets.stocks_short_interest
),
sessions AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND 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
    GROUP BY session
    HAVING count() >= 380
    ORDER BY session DESC
    LIMIT 6
),
crowded AS (
    SELECT ticker, days_to_cover, short_interest
    FROM global_markets.stocks_short_interest
    WHERE settlement_date = (SELECT d FROM latest)
      AND avg_daily_volume >= 5000000
      AND days_to_cover >= 5
      AND ticker NOT IN ('SPCX')
      AND ticker NOT IN ('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() - 60 AND today())
),
tape AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN (SELECT ticker FROM crowded)
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT session FROM sessions)
      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
    GROUP BY ticker, session
),
rising AS (
    SELECT ticker,
           round((argMax(rth_close, session) / argMin(rth_close, session) - 1) * 100, 1) AS return_5d_pct
    FROM tape
    GROUP BY ticker
    HAVING count() = 6 AND return_5d_pct > 0
),
share_count AS (
    SELECT ticker, market_cap / price AS shares_out
    FROM global_markets.stocks_ratios
    WHERE date = (SELECT max(date) FROM global_markets.stocks_ratios)
      AND market_cap > 0
      AND price > 0
)
SELECT c.ticker AS ticker,
       round(100.0 * c.short_interest / s.shares_out, 1) AS si_pct_shares_out,
       round(c.short_interest / 1e6, 1) AS shares_short_m,
       round(s.shares_out / 1e6, 0) AS shares_out_m,
       round(c.days_to_cover, 1) AS days_to_cover
FROM crowded c
INNER JOIN rising r ON r.ticker = c.ticker
INNER JOIN share_count s ON s.ticker = c.ticker
ORDER BY si_pct_shares_out DESC, c.ticker
LIMIT 10

KSS با 26.3% درصد از سهام منتشر شده که به صورت استقراضی فروخته شده‌اند، در صدر این لیست قرار دارد: 29.9 میلیون سهم در برابر 113 میلیون سهم موجود. سطرهای 10 نشان‌دهنده بزرگترین مقادیر در میان نام‌های فیلتر شده‌ای هستند که تعداد سهام منتشر شده آن‌ها منتشر شده است، و آخرین مورد از آن‌ها همچنان 15.5% است. این ستون را به عنوان حداقل مقدار در نظر بگیرید و هرگز آن را به عنوان تعداد سهام شناور تلقی نکنید. سهام شناور تنها شامل سهامی است که واقعاً دست به دست می‌شوند و در آن سهم‌های افراد داخل شرکت و سایر دارایی‌های بلوکه شده لحاظ نمی‌شوند. سهام شناور مخرج کوچک‌تری است، بنابراین درصد واقعی فروش استقراضی نسبت به شناور، بالاتر از تمام ارقام نمایش داده شده است. میزان بالاتر بودن این درصد به ساختار مالکیت هر شرکت بستگی دارد که این بانک اطلاعاتی فاقد آن است.

آیا تجمع معاملات فروش است short crowding در حال افزایش است یا کاهش؟

یک گزارش آماری، تنها یک تصویر ثابت است. از آنجایی که این فایل‌های مشابه مربوط به چندین سال گذشته هستند، پاسخ به پرسش کلی بازار در داده‌ها نهفته است.

پرس‌وجونمادهای پرنقدینگی با Days to Cover بالای ۵ و ۱۰ روز، بر اساس دوره‌های تسویه
کد دقیق SQL پشت هر عدد
WITH dates AS (
    SELECT DISTINCT settlement_date AS d
    FROM global_markets.stocks_short_interest
    ORDER BY d DESC
    LIMIT 12
)
SELECT toString(settlement_date) AS settlement_date,
       countIf(days_to_cover >= 5) AS names_5plus_dtc,
       countIf(days_to_cover >= 10) AS names_10plus_dtc,
       round(quantileExact(0.5)(days_to_cover), 2) AS median_dtc_liquid
FROM global_markets.stocks_short_interest
WHERE settlement_date IN (SELECT d FROM dates)
  AND avg_daily_volume >= 5000000
  AND days_to_cover IS NOT NULL
  AND ticker NOT IN ('SPCX')
  AND ticker NOT IN ('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')
GROUP BY settlement_date
ORDER BY settlement_date

در میان 12 تسویه‌حساب‌های نمایش داده شده، تعداد نام‌های نقدشونده با 5 روز یا بیشتر زمان برای پوشش معاملات (days to cover) از 58 به 96 تغییر کرده است. بخش نادری از توزیع همچنان بسیار کم‌تعداد است: در آخرین گزارش، 5 نماد دارای 10 روز یا بیشتر زمان برای پوشش معاملات بودند. میانه نام‌های نقدشونده 1.87 روز است؛ همین موضوع باعث می‌شود آستانه 5 روزه به جای تصادفی بودن، معنادار باشد. صفحه بیشترین سهام‌ها از نظر روزهای پوشش معاملات آن بخش فرین (tail) را به طور جداگانه ردیابی می‌کند.

روند معمول پس از این وضعیت

ساخت چنین نمودارهایی آسان است و احتمال تفسیر اشتباه آن‌ها نیز زیاد است؛ بنابراین، در اینجا همان نمودار را به صورت معکوس و با همان فاصله زمانی از فایل اصلی نمایش می‌دهیم. برای هر مورد تسویه در سال گذشته، نام‌هایی را که از فیلتر «تراکم بالا» عبور کرده و در شش جلسه منتهی به بیست روز تقویمی بعد (یعنی همان تاریخی که این صفحه در آن قرار دارد) در حال رشد بوده‌اند، انتخاب می‌کنیم؛ سپس عملکرد هر یک را در 30 روز تقویمی پس از آن می‌سنجیم.

پرس‌وجوعملکرد تمامی نمادهای منتخب در ۳۰ روز پس از فیلتر شدن
کد دقیق SQL پشت هر عدد
WITH screened AS (
    SELECT settlement_date, ticker
    FROM global_markets.stocks_short_interest
    WHERE settlement_date >= today() - 400
      AND settlement_date <= today() - 55
      AND avg_daily_volume >= 5000000
      AND days_to_cover >= 5
      AND ticker NOT IN ('SPCX')
      AND ticker NOT IN ('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')
),
split_hits AS (
    SELECT s.settlement_date AS sd, s.ticker AS tkr
    FROM screened s
    INNER JOIN global_markets.stocks_splits sp ON sp.ticker = s.ticker
    WHERE sp.execution_date > s.settlement_date + 11
      AND sp.execution_date <= s.settlement_date + 50
),
daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           argMax(close, window_start) AS rth_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN (SELECT DISTINCT ticker FROM screened)
      AND window_start >= now() - INTERVAL 400 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
    GROUP BY ticker, session
),
paired AS (
    SELECT s.settlement_date AS sd,
           s.ticker AS tkr,
           (argMaxIf(d.rth_close, d.session, d.session <= s.settlement_date + 20)
            / argMinIf(d.rth_close, d.session, d.session <= s.settlement_date + 20) - 1) * 100 AS prior_pct,
           (argMaxIf(d.rth_close, d.session, d.session >= s.settlement_date + 20)
            / argMinIf(d.rth_close, d.session, d.session >= s.settlement_date + 20) - 1) * 100 AS next_pct
    FROM screened s
    INNER JOIN daily d ON d.ticker = s.ticker
    WHERE d.session > s.settlement_date + 11
      AND d.session <= s.settlement_date + 50
    GROUP BY sd, tkr
    HAVING countIf(d.session <= s.settlement_date + 20) >= 4
       AND countIf(d.session >= s.settlement_date + 20) >= 15
),
outcomes AS (
    SELECT multiIf(next_pct < -20, 1,
                   next_pct < -10, 2,
                   next_pct < 0, 3,
                   next_pct < 10, 4,
                   next_pct < 20, 5, 6) AS bucket,
           multiIf(next_pct < -20, 'Fell more than 20%',
                   next_pct < -10, 'Fell 10% to 20%',
                   next_pct < 0, 'Fell 0% to 10%',
                   next_pct < 10, 'Rose 0% to 10%',
                   next_pct < 20, 'Rose 10% to 20%', 'Rose more than 20%') AS move_over_30_days
    FROM paired
    WHERE prior_pct > 0
      AND (sd, tkr) NOT IN (SELECT sd, tkr FROM split_hits)
),
tallied AS (
    SELECT bucket, move_over_30_days, count() AS name_count
    FROM outcomes
    GROUP BY bucket, move_over_30_days
)
SELECT move_over_30_days,
       name_count,
       round(100.0 * sum(name_count) OVER (ORDER BY bucket) / sum(name_count) OVER (), 1) AS cumulative_share_pct
FROM tallied
ORDER BY bucket

51.7% از آن مشاهداتِ مربوط به نام‌ها و تسویه‌ها، 30 روز بعد با کاهش قیمت مواجه شدند. این نتیجه تقریباً مشابه پرتاب سکه است و واقعیتِ اصلی این صفحه را بیان می‌کند: فروشندگان پوشش‌دهنده (short sellers) اغلب درست عمل می‌کنند و وضعیت «تراکم بالا به‌همراه رشد» بیشتر یک موقعیت است تا یک مزیت معاملاتی. نواحی انتهایی توزیع، جایی هستند که پدیده squeeze در آن‌ها نمایان می‌شود و هر دو ناحیه بسیار محدود هستند. 68 مشاهدات با کاهش بیش از یک‌پنجم مواجه شدند؛ 73 با افزایش بیش از یک‌پنجم رشد کردند که مربوط به دسته واقعی squeeze است. 87.8% از نمونه‌ها هرگز به آن سطح نرسیدند.

این پنل را به عنوان یک توزیع آماری در نظر بگیرید، نه یک نتیجه معاملاتی. این داده‌ها هزینه‌ها، phí‌های استقراض و حجم معاملات را نادیده می‌گیرند و به هر نامِ علامت‌گذاری‌شده وزن یکسانی می‌دهند. هر دو بخش، بیست روز تقویمی پس از هر تاریخ تسویه و با همان فاصله‌ای که این صفحه استفاده می‌کند، تثبیت شده‌اند؛ بنابراین هر نامِ علامت‌گذاری‌شده بر اساس قیمت‌هایی است که یک خواننده می‌توانست مشاهده کند. یک سال از داده‌های تسویه، نمونه آماری کوتاهی محسوب می‌شود.

نحوه اندازه‌گیری

تمامی قوانین و استثناهای پشت داده‌های فوق.

  • گزارش short-interest توسط بورس منتشر می‌شود و دو بار در ماه به‌روزرسانی می‌گردد. داده‌های استفاده‌شده در اینجا مربوط به Jun 30, 2026، 24 روز پیش است. در ایالات متحده، عدد روزانه برای short interest منتشر نمی‌شود و تنها برآوردها توسط تامین‌کنندگان بر اساس داده‌های وام‌دهی اوراق بهادار مدل‌سازی می‌شوند.
  • حداقل سطح نقدینگی: میانگین حجم معاملات روزانه برابر با پنج میلیون سهم، طبق گزارش همان فایل. بدون این معیار، لیست با شرکت‌های کوچک (microcaps) پر می‌شود که عدد بسیار بالای days-to-cover آن‌ها صرفاً ناشی از حجم معاملات نزدیک به صفر است.
  • آستانه ازدحام (Crowding threshold): پنج روز یا بیشتر برای پوشش معاملات (days to cover)، که بسیار بالاتر از میانگین نقدینگی نشان داده شده در بالا است.
  • بخش مومنتوم: تغییر قیمت بسته‌شدن در شش جلسه کامل و منظم اخیر، که معادل بازدهی پنج جلسه است. یک جلسه معاملاتی تنها زمانی وارد این بازه می‌شود که داده‌های شاخص، یک روز کامل از کندل‌های دقیقه‌ای را ثبت کرده باشد. جلساتی که هنوز در حال ورود به فید هستند، به جای اندازه‌گیری ناقص، با تأخیر محاسبه می‌شوند؛ بنابراین ممکن است بازه زمانی، یک جلسه از تقویم عقب‌تر باشد، حتی اگر آن جلسه بسته شده باشد. قیمت‌ها بر اساس قیمت‌های بسته‌شدن در جلسات منظم هستند.
  • هر دو تاریخ دارای محدودیت هستند. پنل بالا، سن هر ورودی را به روز می‌سنجد و این سن‌ها دارای محدودیت‌های منطقی هستند. اگر داده‌های تسویه قدیمی‌تر از یک ماه باشند، یا داده‌های قیمت بیش از تأخیر معمولِ ورود داده‌ها عقب باشند، این صفحه برای بررسی نگه داشته می‌شود تا از انتشار تاریخ‌های منسوخ تحت تیترهای جدید جلوگیری شود.
  • استثنائات. صندوق‌های ETF اهرمی و معکوس از تمامی پنل‌ها حذف می‌شوند (short interest آن‌ها عمدتاً ناشی از عملیات پوشش ریسک است)، و همچنین یک نماد مبهم که تامین‌کنندگان داده از آن برای دو شرکت مختلف استفاده کرده‌اند، حذف می‌شود. پنل‌هایی که تغییرات قیمت را اندازه‌گیری می‌کنند، نمادی را که تقسیم سهام آن در بازه اندازه‌گیری پنل رخ داده است نیز حذف می‌کنند، زیرا تقسیم سهام باعث ایجاد یک حرکت کاذب و بزرگ در قیمت می‌شود. در بک‌تست، این آزمون بر اساس هر دوره تسویه اجرا می‌شود، بنابراین تقسیم سهام در یک ماه، مشاهدات مربوط به آن نماد را در ماه‌های دیگر حذف نمی‌کند.
  • صندوق‌ها در کنار شرکت‌های عملیاتی در این فایل قرار دارند. یک ETF اوراق قرضه یا شاخص می‌تواند دارای یک موقعیت short بزرگ باشد که ناشی از فرآیندهای ایجاد و بازخرید (creation-and-redemption) است، نه لزوماً شرط‌بندی علیه آن.
  • در این فایل هیچ اطلاعاتی درباره float یا تعداد سهام وجود ندارد و هیچ داده‌ای از open interest اختیار معامله در این انبار داده موجود نیست. ستون shares-outstanding در بالا از یک جدول جداگانه مربوط به عوامل بنیادی (fundamentals) گرفته شده است، بنابراین اگر نمادی ارزش بازار منتشر شده نداشته باشد، از آن پنل حذف می‌شود.
  • هیچ موردی در اینجا پیش‌بینی یا توصیه سرمایه‌گذاری نیست. این داده‌ها شرایط قابل اندازه‌گیری را توصیف می‌کنند که پنل نتایج به آن متصل است.

سوالات متداول

چگونه گزینه‌های پتانسیل برای short squeeze را پیدا می‌کنیم؟

فایل گزارش شده از سوی بورس را برای یافتن موقعیت‌هایی که نسبت به حجم معاملات روزانه سهم بزرگ هستند، بررسی کنید. تنها نام‌هایی را انتخاب کنید که نقدینگی کافی برای معامله داشته باشند، سپس بررسی کنید که آیا قیمت از قبل در حال افزایش است یا خیر. این فیلتر از فایل short-interest مربوط به Jun 30, 2026، از معیارهای «بیش از پنج روز برای پوشش معامله»، «میانگین حجم معاملات روزانه پنج میلیون سهم» و «روند مثبت قیمت در پنج جلسه اخیر» استفاده می‌کند که منجر به شناسایی 31 نام شد.

چه میزان درصد short interest باعث ایجاد squeeze می‌شود؟

عدد جادویی وجود ندارد و هر کسی که عددی را اعلام می‌کند، در حال حدس زدن است. سوئیزها (squeezes) با مقادیر متفاوتی شروع شده‌اند و در بسیاری از موارد نیز هیچ اتفاقی نمی‌افتد: بر اساس داده‌های تسویه در یک سال گذشته، 51.7% از نام‌هایی که این فیلتر شناسایی می‌کرد، 30 روز بعد قیمت پایین‌تری داشتند. short interest بالا یک پیش‌شرط است، نه لزوماً یک عامل محرک.

داده‌های short interest چقدر قدیمی هستند؟

جدیدترین داده تسویه موجود در اینجا مربوط به Jun 30, 2026 و به مدت 24 روز پیش است و داده‌های قیمتی تا Jul 22, 2026 ادامه دارد. این فاصله به دلیل چرخه گزارش‌دهی است و نه قدیمی بودن داده‌ها: موقعیت‌ها دو بار در ماه شمارش می‌شوند و تقریباً هشت روز کاری پس از هر تاریخ تسویه منتشر می‌شوند؛ بنابراین هر عدد short-interest در هر جایی، هنگام رسیدن به دست کاربر، چندین هفته قدیمی است.

در حال حاضر پرمعامله‌ترین سهام‌های short شده کدامند؟

لیست‌های بدون فیلتر، یکی بر اساس «روزهای پوشش معامله» و دیگری بر اساس «تعداد خالص سهام short شده»، در صفحه پرمعامله‌ترین سهام‌های short شده قرار دارند. این صفحه به یک پرسش محدودتر پاسخ می‌دهد: در میان نام‌های موجود در فایل Jun 30, 2026 که قیمت آن‌ها نیز در حال افزایش است، پرمعامله‌ترین مورد MPT با 16.9 روز برای پوشش معامله است که یک پیشرو در این فیلتر است، نه پرمعامله‌ترین سهم در کل بازار.


هر پنل یک پرس‌وجوی (query) ذخیره شده و نسخه‌بندی شده بر روی فایل گزارش شده توسط بورس است. می‌توانید کد SQL زیر هر جدول را باز کنید یا فیلتر را با آستانه‌های اختصاصی خود در ترمینال Strasmore اجرا کنید.