Short squeeze stocks wey dey rise dis week
We dey check stocks with high short interest and rising price for this screen. We look for days to cover and high shares short for every stock listed here.
Dem dey use two mechanics screen short squeeze stocks: one na short position wey big relative to how much the stock dey trade, and the other na price wey don start to rise already. This page dey run that screen for the latest exchange-reported short-interest file, wey settle Jun 30, 2026, and e dey measure the price leg across the five sessions wey end for Jul 22, 2026. These mechanics resemble how past squeezes dey happen. Nothing for here na forecast, and most heavily shorted stocks no dey ever squeeze.
Read the dates before the names. The short-interest part of this page dey weeks old because of regulation, no be because the feed bad: brokers dey report their short positions to FINRA twice a month for scheduled settlement dates, and the compiled file dey become public roughly eight business days later. The freshest print wey anyone fit see dey dated Jun 30, 2026, 24 days back, while the price leg dey run through Jul 22, 2026. Whatever the short side do inside that gap, no screener dey see am, including this one. Why short interest data is always two weeks old dey explain the reporting cycle step by step.
The exact SQL behind every number
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 legsThe two settlement prints sit 39 and 24 days back, wey na the twice-monthly counting cycle plus the compilation lag. The price tape dey 2 days behind, and that one na warehouse ingest lag rather than regulation. Both ages get bounds, so if feed stall, e go hold this page instead of to republish old date under fresh headline.
Short squeeze stocks list: the current screen
Every name wey dey below pass the same gate for the same file: five million shares of average daily volume, five or more days to cover, and one positive move across the five sessions wey end for Jul 22, 2026. 31 names pass all of that, and the 12 most crowded ones dey here. Days to cover na shares sold short divided by average daily volume: e dey show how many full days of the stock's entire tape the short side go need to buy back their position.
The exact SQL behind every number
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 12The most crowded name for here, MPT, show 16.9 days to cover out of 138.1 million shares sold short, and e rise 2.8% across the five sessions wey end for Jul 22, 2026. The last row wey dey show na 6.4 days to cover, na where the display cut rather than where the screen floor dey. Ranking na by crowding instead of by size, so one moderate position for thin tape go rank higher than one much larger position for busy tape. For the size ranking, the most shorted stocks right now dey run both leaderboards side by side.
The rising-price gate get one mechanical reason. A squeeze na forced buying wey short sellers dey do as dem dey close out, and to close a short means to buy the stock back, and dat one only start once the price don move against the position. How a short squeeze works, wey dem trace through GameStop's 2021 records, show the sequence for numbers.
The rules, and wetin each one remove
Screen na just opinion wey get numbers join, so na here dem dey put de field.
The exact SQL behind every number
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
)De Jun 30, 2026 file carry 22207 securities. De liquidity floor and de exclusion list leave 883, de crowding threshold cut am down to 96, and de rising-price gate leave 31. Every threshold na choice, and if person change de choice, de list go change too. Na why de rules dey for de page instead of inside footnote.
How much of each company dey sold short
The figure wey most people dey look for na short interest as a percent of float, but e no dey inside this data. The exchange file report only shares short and average daily volume, without any kind of share count. Wetin we fit calculate na the position wey dem measure against total shares outstanding, by taking each company's market value divide by its share price.
KSS dey top that list with 26.3% of shares outstanding wey dem sold short: 29.9 million shares against 113 million shares wey dey exist. The 10 rows wey dem show na the biggest readings among the screened names wey get published share count, and the last one still dey 15.5%. No look that column as the float number, see am as the floor. Float count only the shares wey dey really change hands, after dem don remove insider stakes and other locked-up holdings. Float na the smaller denominator, so the true percentage of float wey dem sold short go higher pass every figure wey dem show here. How much e go higher depend on each company's ownership, wey this warehouse no carry.
Short crowding dey build or e dey fade?
One print na just one snapshot. The same file go back many years, so market-wide question get data answer.
The exact SQL behind every number
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_dateFor all the 12 settlements wey dem show, the count of liquid names wey get five or more days to cover move from 58 go 96. The rare end of the distribution still thin well-well: 5 names sit at ten or more days to cover for the latest print. The median liquid name na 1.87 days, na why five-day threshold get meaning instead of just to pick number. The highest days-to-cover stocks page dey track that extreme tail for its own.
What has usually happened next
Screens like this are easy to build and easy to over-read, so here is the same screen run backward, at the same offset from the file. For every settlement print in the past year, take the names that cleared the crowding gate on that print and were rising over the six sessions ending twenty calendar days later, which is where this page sits today, then measure what each one did over the following 30 calendar days.
The exact SQL behind every number
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 bucket51.7% of those name-and-settlement observations traded lower 30 days later. That is close to a coin flip, and it is the honest headline of this page: short sellers are frequently right, and crowded-plus-rising describes a setup rather than an edge. The tails are where a squeeze would show up, and both of them are thin. 68 observations fell by more than a fifth; 73 gained by more than a fifth, the bucket a genuine squeeze would land in. 87.8% of the sample never got there.
Treat that panel as a distribution, not as a trading result. It ignores costs, borrow fees and position sizing, and it weights every flagged name identically. Both legs are anchored twenty calendar days after each settlement date, the same offset this page uses, so every flagged name rests on prices a reader could have seen. A year of settlements is a short sample.
Wey dem dey use measure am
Every rule and exclusion wey dey behind the numbers wey dey above.
- The short-interest file na exchange-reported and dem dey release am twice monthly. The print wey dem use here settle Jun 30, 2026, 24 days ago. No daily disclosed short interest number for US, na only vendor estimates wey dem model from securities-lending data.
- Liquidity floor: five million shares of average daily volume, as dem report am for the same file. If dem no use am, the list go full with microcaps wey get enormous days-to-cover reading because their volume zero.
- Crowding threshold: five or more days to cover, wey far pass the liquid median wey dem show above.
- Momentum leg: the change between the closing prices of the last six fully loaded regular sessions, wey na five-session return. A session enter the window only when the benchmark tape carry full day of minute bars for am. If a session still dey arrive for the feed, dem go hold am instead make dem measure am half-formed, so the window fit end one session behind the calendar even when that session don close. Prices na regular-session closes.
- Both dates get bounds. The panel for top dey store the age of each input in days, and those ages get sanity bounds. If settlement print old pass one month, or price tape dey lag pass normal ingest lag, dem go hold this page for review instead make dem publish stale date under fresh headline.
- Exclusions. Dem dey drop leveraged and inverse exchange-traded funds from every panel (their short interest na mostly hedging artifact), along with one ambiguous symbol wey vendor feeds dey reuse for two companies. Panels wey dey measure price move also dey drop name wey stock split land inside that panel measurement window, because split dey fake large move. For the backtest, that test dey run per settlement, so split for one month no go ever remove name observations from other months.
- Funds dey sit for this file alongside operating companies. A bond or index ETF fit carry large short position wey come from creation-and-redemption plumbing instead of anyone betting against am.
- No float and no share count for this file, and no options open interest anywhere for the warehouse. The shares-outstanding column wey dey above come from separate fundamentals table, so any name wey no get published market value go drop from that panel.
- Nothing for here na prediction or recommendation. E dey describe measurable conditions, with the outcome panel wey dey join am.
FAQ
How you go take find short squeeze candidates?
Check the exchange-reported short-interest file for any position wey big compared to the stock's daily volume. Pick only names wey get enough liquidity to trade, then check if the price don start to rise. This screen of the Jun 30, 2026 short-interest file use five or more days to cover, five million shares of average daily volume, and one positive five-session move, wey leave 31 names.
Which short interest percentage dey cause squeeze?
No magic number dey, and anybody wey talk one dey guess. Squeezes don start from different readings for the whole range, and many times, nothing even dey happen: across one year of past settlement prints, 51.7% of the names wey this screen for flag dey lower thirty days later. High short interest na precondition, e no be trigger.
How old short interest data be?
The newest settlement for file here dey dated Jun 30, 2026, 24 days back, and the price data run reach Jul 22, 2026. That gap na because of the reporting cycle, no be say the feed don stale: dem dey count positions twice a month and dem dey publish dem roughly eight business days after each settlement date, so every short-interest figure anywhere don already be weeks old when e reach person.
Which stocks dem dey short pass right now?
The unfiltered leaderboards, one for days to cover and one for raw shares short, dey the most shorted stocks page. This page answer one narrow question: among the names for the Jun 30, 2026 file wey price dey rise, the most crowded one na MPT with 16.9 days to cover, wey na screen leader rather than the market's most shorted stock.
Every panel na stored, versioned query over the exchange-reported file. Expand the SQL under any table, or run the screen with your own thresholds for the Strasmore terminal.