今週のショートスクイーズ候補銘柄
空売り残高と価格上昇率からスクイーズの可能性を分析しました。最新の市場データに基づいたスクリーニング結果を詳しく解説します。
ショートスクイーズ銘柄は、2つのメカニズムに基づいてスクリーニングされます。1つは、売買代金に対して空売り残高が大きいこと、もう1つは、価格がすでに上昇していることです。このページでは、Jun 30, 2026に決済された最新の取引所報告データに基づき、Jul 21, 2026に終了する5取引日の価格推移を測定しています。これらは過去のスクイーズに類似したメカニズムです。ここに記載された内容は予測ではなく、空売り残高が多い銘柄のほとんどはスクイーズを起こしません。
銘柄名の前に日付を確認してください。このページの空売りデータは、規制により数週間前のものです。これはデータフィードの不備ではありません。ブローカーはFINRAに対し、予定された決済日に月2回、空売りポジションを報告し、まとめられたファイルは約8営業日後に公開されます。利用可能な最新のデータはJun 30, 2026のものです。これは23日前のデータであり、価格推移はJul 21, 2026までをカバーしています。その期間中の空売り側の動きは、このスクリーナーを含め、あらゆるスクリーナーで確認できません。空売りデータが常に2週間遅れる理由では、報告サイクルを順を追って説明しています。
各数値の背後にある正確な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 legs2つの決済データは38および23日前のものです。これは月2回の集計サイクルと集計の遅延によるものです。価格データは2日遅れており、これは規制ではなくデータ取り込みの遅延によるものです。どちらのデータにも期限があるため、フィードが停止した場合は、古い日付を新しい見出しで再公開するのではなく、このページの内容を維持します。
ショートスクイーズ銘柄リスト:現在のスクリーニング結果
以下の銘柄はすべて、同一の条件を満たしています。具体的には、1日平均出来高が500万株以上、Days to coverが5日以上、そしてJul 21, 2026に終了する直近5セッションで価格が上昇していることです。36銘柄がこれらの条件をクリアしており、その中でも特に空売りが集中している12銘柄をここに示します。Days to coverは、空売り残高を1日平均出来高で割った数値です。これは、空売りポジションを買い戻すために、全取引高の何日分が必要かを示しています。
各数値の背後にある正確な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は、空売り残高138.1百万株に対し、Days to coverは16.9日です。また、Jul 21, 2026に終了する直近5セッションで5.4%上昇しました。表示されている最後の行は6.5日ですが、これはスクリーニングの基準値ではなく、表示上の制限によるものです。ランキングは時価総額ではなく、空売りの集中度に基づいています。そのため、出来高の少ない銘柄における中規模のポジションが、出来高の多い銘柄における大規模なポジションよりも上位にランクされます。サイズ別のランキングについては、現在最も空売りされている銘柄で、両方のリーダーボードを並べて確認できます。
価格上昇の条件には、メカニズム上の理由があります。ショートスクイーズとは、空売り勢がポジションを解消するために強制的に買い戻しを行う現象です。空売りを解消するには株を買い戻す必要があり、これは価格がポジションに不利な方向に動き始めて初めて発生します。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の証券が含まれています。流動性の下限と除外リストにより885となり、混雑閾値によって96まで減少します。さらに、価格上昇ゲートにより36となります。各閾値は選択事項であり、選択の違いによってリストの内容が変化します。そのため、ルールは脚注ではなく本文に記載されています。
各企業の空売り比率
多くの人が探す指標は「浮動株に対する空売り比率(short interest as a percent of float)」ですが、このデータには含まれていません。取引所のファイルには空売り株数と平均出来高が記載されており、発行済株式総数は記載されていません。ここから算出できるのは、各企業の時価総額を発行済株式数で割った、発行済株式総数に対する空売りポジションです。
KSSは、発行済株式総数の26.3%を空売りしており、その数値は29.9百万株(発行済株式総数113百万株)です。表示されている10行は、発行済株式数が公開されている銘柄の中で最大の数値であり、最後の銘柄でも15.5%となっています。この列の数値は下限として読み取り、浮動株数として扱わないでください。浮動株は、インサイダーの持ち分やロックアップ中の保有分を除外した、実際に市場で取引される株式のみをカウントします。浮動株は分母が小さくなるため、浮動株に対する実際の空売り比率は、表示されているどの数値よりも高くなります。その差は各企業の所有構造によりますが、当データには含まれていません。
空売りの混雑は蓄積しているのか、それとも解消に向かっているのか?
一つのデータは、ある時点の静止画に過ぎません。しかし、同じデータセットを長期間遡れば、市場全体の状況についてデータに基づいた回答が得られます。
各数値の背後にある正確な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日以上を要する流動性の高い銘柄数は、58 から 96 へと変化しました。分布の極端な端は、依然として非常に薄い状態です。直近のデータでは、カバーに10日以上を要する銘柄は 5 でした。中央値は 1.87 日であり、この数値があるため、5日という閾値は恣意的なものではなく意味を持つものとなります。カバーに最も日数を要する銘柄 のページでは、この極端なテール部分を個別に追跡しています。
過去の傾向
このような画面は作成が容易な反面、過剰な解釈を招きやすいものです。そのため、ここでは同じオフセットを用いて、過去のデータを逆方向に検証した結果を示します。過去1年間のすべての決済データについて、混雑条件(crowding gate)をクリアし、かつ決済から20暦日後(本ページの基準日)までの6セッションで上昇していた銘柄を抽出しました。その上で、各銘柄のその後の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日後に下落しました。これはほぼ五分五分の確率であり、本ページの結論は以下の通りです。空売り勢は頻繁に正しい傾向にあり、「混雑かつ上昇中」という条件は、優位性(edge)というよりも単なるセットアップ(準備状態)を示しています。スクイーズが発生するのは分布の両端ですが、その確率はどちらも低いです。68 は5分の1以上下落し、73 は5分の1以上上昇しました。後者が、真のスクイーズが発生する領域です。87.8% は、その水準に一度も到達しませんでした。
このパネルは、トレード結果ではなく分布として捉えてください。コスト、借入手数料、ポジションサイズは考慮されておらず、フラグが立った銘柄はすべて等しく扱われています。両方の検証期間は、各決済日から20暦日後(本ページと同じオフセット)を起点としています。したがって、抽出された銘柄の価格は、読者が実際に目にすることができた価格に基づいています。なお、1年間の決済データは、サンプル数としては限定的です。
算出方法
上記の数値の根拠となる、すべてのルールと除外条件について説明します。
- 空売り残高データは取引所から報告され、月2回更新されます。 ここで使用されている数値は、Jun 30, 2026、23日前の決済に基づいています。米国では空売り残高の当日数値は開示されておらず、証券貸付データからベンダーがモデル化した推定値のみが利用可能です。
- 流動性の下限:同ファイルに報告されている1日平均出来高が500万株以上。 これがないと、出来高が極端に少ないために「Days-to-cover」が異常に高く算出されるマイクロキャップ銘柄がリストに混入してしまいます。
- 混雑度(Crowding)の閾値:Days-to-coverが5日以上。 これは、上に示す流動性の中央値を大きく上回る数値です。
- モメンタメント・レグ:直近6回の完全な定時取引セッションにおける終値の変化(5セッションの収益率)。 セッションがこのウィンドウに含まれるには、ベンチマークのテープに1日分の分足データが完全に記録されている必要があります。データフィードに届いている途中のセッションは、不完全な状態で測定せず、処理を保留します。そのため、セッションが終了していても、ウィンドウの集計がカレンダーより1セッション遅れることがあります。価格は定時取引の終値を使用します。
- 両日付には制限があります。 上部のパネルには各入力データの経過日数が保存されており、これらには妥当性の範囲が設定されています。決済データが1ヶ月以上古い場合、または価格テープの遅延が通常の取り込み遅延を超えている場合、新しい見出しの下に古い日付を掲載するのではなく、ページをレビュー用に保留します。
- 除外事項。 レバレッジ型およびインバース型のETFは、すべてのパネルから除外されます(これらの空売り残高は主にヘッジ目的のものです)。また、ベンダーのフィードにおいて2つの企業で重複して使用されている、判別不能なシンボルも除外されます。価格変動を測定するパネルでは、株式分割によって株価が大きく動いたように見えるのを防ぐため、測定期間内に株式分割が行われた銘柄を除外します。バックテストでは、テストは決済ごとに実行されるため、ある月における株式分割が他の月の観測データに影響を与えることはありません。
- このファイルには事業会社と並んでファンドも含まれます。 債券やインデックスETFは、空売りを仕掛けている者がいなくても、設定・解約の仕組みによって大きな空売りポジションを持つ場合があります。
- このファイルには浮動株数や発行済株式数は含まれず、オプションの未決済建玉も一切含まれません。上記の「発行済株式数」の列は別のファンダメンタルズ・テーブルから取得しているため、時価総額が公表されていない銘柄はパネルから除外されます。
- ここにある情報は、予測や推奨ではありません。 測定可能な状況を記述したものであり、結果を示すパネルがそれに付随しています。
FAQ
ショートスクイーズの候補をどのように見つけるか?
取引所が報告する空売り残高データを使用します。まず、1日の出来高に対して空売りポジションが相対的に大きい銘柄を抽出します。次に、取引に十分な流動性がある銘柄のみを残し、価格が既に上昇しているかを確認します。この Jun 30, 2026 空売り残高データを用いたスクリーニングでは、カバー日数(days to cover)がfive days以上、平均1日出来高がfive million shares以上、かつ5営業日間の騰落率がプラスの銘柄を対象としており、その結果 36 銘柄が抽出されました。
どの程度の空売り比率がスクイーズを引き起こすのか?
特定の数値は存在しません。特定の数値を挙げる者は推測に基づいています。スクイーズは様々な数値から発生しますが、実際には何も起こらないことの方が多いです。過去1年間の決済データに基づくと、このスクリーニングで抽出された銘柄のうち 51.7% は30日後に価格が下落していました。高い short interest は前提条件であり、引き金ではありません。
空売りデータの鮮度はどの程度か?
ここにある最新の決済データは Jun 30, 2026 のもので、23 日前のものです。価格データは Jul 21, 2026 まで含まれています。この差はデータの遅延ではなく、報告サイクルによるものです。ポジションは月に2回集計され、各決済日から約8営業日後に公開されます。そのため、あらゆる場所の空売り数値は、公開される時点で数週間前のものとなります。
現在、最も空売りされている銘柄はどれか?
カバー日数別および空売り株数別のフィルタリングなしのランキングは、最も空売りされている銘柄ページ に掲載されています。このページはより限定的な条件に基づいています。Jun 30, 2026 ファイルの銘柄のうち、価格が上昇している銘柄の中で最も混雑しているのは MPT で、カバー日数は 16.9 days です。これはスクリーニングにおけるリーダーであり、市場全体で最も空売りされている銘柄ではありません。
すべてのパネルは、取引所が報告するファイルに対する、保存・バージョン管理されたクエリです。各テーブルの下にあるSQLを展開するか、Strasmoreターミナルで独自の閾値を用いてスクリーニングを実行してください。