Strasmore Research
Recaps de mercado Matt ConnorPor Matt Connor · Atualizado 2026-07-23 · data as of July 23, 2026 · refreshed weekly

Ações com potencial de short squeeze

Filtramos tickers com alto short interest e preço em alta para identificar possíveis squeezes. Analisamos dias para cover e volume para medir as probabilidades.

Ações com potencial de short squeeze são filtradas por dois mecanismos: uma posição vendida elevada em relação ao volume de negociação e um preço que já está em tendência de alta. Esta página aplica esse filtro ao último arquivo de interesse de venda (short interest) reportado pelas bolsas, com liquidação em Jun 30, 2026, e mede o movimento de preço nas cinco sessões encerradas em Jul 21, 2026. Estes mecanismos assemelham-se a squeezes passados. Nada aqui é uma previsão, e a maioria das ações com alto short interest nunca sofre um squeeze.

Leia as datas antes dos nomes. Os dados de short interest nesta página têm semanas de atraso por regulamentação, e não por falha no feed: as corretoras reportam suas posições vendidas à FINRA duas vezes por mês em datas de liquidação agendadas, e o arquivo consolidado torna-se público cerca de oito dias úteis depois. O dado mais recente disponível para qualquer pessoa é de Jun 30, 2026, ou seja, 23 dias atrás, enquanto o movimento de preço segue até Jul 21, 2026. Qualquer movimentação do lado vendido dentro desse intervalo é invisível para todos os screeners, inclusive este. Por que os dados de short interest sempre têm duas semanas de atraso explica o ciclo de reporte passo a passo.

QueryMoeda de cada input e dias de atraso
O SQL exato por trás de cada número
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

Os dois registros de liquidação estão com 38 e 23 dias de atraso, o que corresponde ao ciclo de contagem semestral mais o atraso de compilação. O histórico de preços está com 2 dias de atraso, o que se deve ao tempo de processamento de dados (warehouse ingest lag) e não à regulamentação. Ambos os atrasos possuem limites, portanto, se um feed travar, esta página permanece estática em vez de republicar uma data antiga sob um novo título.

Lista de ações em short squeeze: o screen atual

Todos os nomes abaixo passaram pelos mesmos critérios: volume médio diário de cinco milhões de ações, cinco ou mais dias para cobrir (days to cover) e movimento positivo nas cinco sessões encerradas em Jul 21, 2026. Os nomes 36 passaram por todos esses critérios, e os 12 mais congestionados estão listados aqui. Days to cover é o número de ações vendidas a descoberto dividido pelo volume médio diário: quantos dias inteiros de negociação seriam necessários para que os vendedores recomprensem suas posições.

QueryMecânica de squeeze: shorts congestionados em ativos líquidos com alta de preço
O SQL exato por trás de cada número
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

O nome mais congestionado aqui, MPT, apresenta 16.9 days to cover de um total de 138.1 milhões de ações vendidas a descoberto, e subiu 5.4% nas cinco sessões encerradas em Jul 21, 2026. A última linha exibida indica 6.5 days to cover, que é onde a visualização é interrompida, e não onde termina o screen. O ranking é feito por congestionamento e não por tamanho, portanto, uma posição moderada em um volume de negociação baixo supera uma posição muito maior em um volume alto. Para o ranking por tamanho, as ações mais vendidas a descoberto agora apresenta ambos os rankings lado a lado.

O critério de alta de preço tem uma razão mecânica. Um squeeze é uma compra forçada causada pelo fechamento de posições de vendedores a descoberto, e fechar um short significa recomprar a ação, o que só começa quando o preço se move contra a posição. Como funciona um short squeeze, analisado através dos registros da GameStop de 2021, mostra a sequência em números.

As regras e o que cada uma remove

Um screen é uma opinião com números anexados; é aqui que o campo é definido.

QueryDo arquivo de settlement completo até a lista filtrada, regra por regra
O SQL exato por trás de cada número
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
)

O arquivo Jun 30, 2026 contém 22207 ativos. O piso de liquidez e a lista de exclusão deixam 885, o limite de crowding reduz para 96, e o filtro de alta de preço deixa 36. Cada limite é uma escolha, e uma escolha diferente produz uma lista diferente. É por isso que as regras constam no corpo do texto, e não em uma nota de rodapé.

Quanto de cada empresa está vendido a descoberto

O dado mais procurado é o interesse de venda a descoberto (short interest) como percentual do float, mas ele não consta nestes dados. O arquivo da bolsa reporta o número de ações vendidas e o volume médio diário, sem apresentar o número total de ações. O que é possível derivar é a posição medida em relação ao total de ações em circulação (shares outstanding), dividindo o valor de mercado de cada empresa pelo preço de sua ação.

QueryAtivos filtrados por short interest vs. shares outstanding (não float)
O SQL exato por trás de cada número
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 lidera o corte com 26.3% de ações em circulação vendidas a descoberto: 29.9 milhões de ações contra 113 milhões de ações existentes. As 10 linhas exibidas são os maiores valores entre os nomes filtrados que possuem contagem de ações publicada, e a última delas ainda apresenta 15.5%. Leia essa coluna como um piso, e nunca como o número do float. O Float conta apenas as ações que efetivamente mudam de mãos, excluindo participações de insiders e outras ações bloqueadas. O float é o denominador menor, portanto, o percentual real de float vendido a descoberto é maior do que todos os valores exibidos. O quanto maior depende da estrutura de capital de cada empresa, dado que este banco de dados não armazena essa informação.

O short crowding está aumentando ou diminuindo?

Um único dado é apenas um registro estático. Como o mesmo arquivo abrange vários anos, a pergunta do mercado tem uma resposta baseada em dados.

QueryAtivos líquidos com 5+ e 10+ dias para cover, settlement a settlement
O SQL exato por trás de cada número
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

Entre os liquidações de 12 apresentados, a contagem de ativos líquidos com cinco ou mais dias para cobrir a posição passou de 58 para 96. A extremidade rara da distribuição permanece muito mais fina: 5 ativos apresentaram dez ou mais dias para cobrir no último registro. A mediana de ativos líquidos é de 1.87 dias, o que torna o limite de cinco dias relevante e não arbitrário. A página As ações com maior days-to-cover monitora essa cauda extrema separadamente.

O que costuma acontecer em seguida

Telas como esta são fáceis de construir e fáceis de interpretar erroneamente. Por isso, apresentamos a mesma tela processada de trás para frente, com o mesmo deslocamento do arquivo. Para cada print de settlement no último ano, selecionamos os nomes que passaram pelo filtro de crowding naquela data e que estavam em tendência de alta nas seis sessões terminadas vinte dias corridos depois (data atual desta página). Em seguida, medimos o desempenho de cada um nos 30 dias corridos seguintes.

QueryRetorno de cada ativo filtrado nos 30 dias subsequentes
O SQL exato por trás de cada número
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% das observações de nome e settlement registraram queda 30 dias depois. Isso é próximo de um cara ou coroa, e é o resumo real desta página: vendedores a descoberto frequentemente estão certos, e o cenário "crowded-plus-rising" descreve uma configuração de mercado, não uma vantagem estatística. Os extremos são onde um squeeze apareceria, e ambos são escassos. 68 das observações caíram mais de um quinto; 73 subiram mais de um quinto, o grupo onde um squeeze real ocorreria. 87.8% da amostra nunca atingiu esses níveis.

Considere este painel como uma distribuição, não como um resultado de trading. Ele ignora custos, taxas de aluguel e dimensionamento de posição, e atribui o mesmo peso a cada nome sinalizado. Ambas as etapas estão ancoradas vinte dias corridos após cada data de settlement, o mesmo deslocamento que esta página utiliza, portanto, cada nome sinalizado baseia-se em preços que um investidor poderia ter visto. Um ano de settlements é uma amostra curta.

Como isso é medido

Cada regra e exclusão por trás dos números acima.

  • O relatório de short-interest é reportado pelas bolsas e atualizado duas vezes por mês. O registro utilizado aqui encerrou há Jun 30, 2026, 23 dias. Não existe um número diário de short interest divulgado nos EUA, apenas estimativas de fornecedores modeladas a partir de dados de empréstimo de valores mobiliários.
  • Piso de liquidez: cinco milhões de ações de volume diário médio, conforme reportado no mesmo arquivo. Sem isso, a lista ficaria repleta de microcaps cujo enorme days-to-cover é apenas um artefato de volume próximo de zero.
  • Limite de crowding: cinco ou mais dias para cobrir, bem acima da mediana líquida mostrada acima.
  • Leg de momentum: a variação entre os preços de fechamento das últimas seis sessões regulares completas, o que representa um retorno de cinco sessões. Uma sessão entra na janela apenas quando o tape de referência possui um dia inteiro de barras de um minuto para ela. Uma sessão que ainda está chegando no feed é retida em vez de ser medida incompleta, para que a janela possa terminar uma sessão atrás do calendário, mesmo quando essa sessão já fechou. Os preços são fechamentos de sessões regulares.
  • Ambas as datas possuem limites. O painel no topo armazena a idade de cada dado em dias, e essas idades possuem limites de segurança. Um registro de fechamento com mais de um mês, ou um tape de preços com atraso maior que o lag normal de ingestão, retém esta página para revisão em vez de publicar uma data obsoleta sob um título recente.
  • Exclusões. ETFs alavancados e inversos são removidos de todos os painéis (seu short interest é, em grande parte, um artefato de hedge), junto com um símbolo ambíguo que os feeds de fornecedores reutilizaram para duas empresas diferentes. Painéis que medem variação de preço também removem um nome cujo split de ações ocorre dentro da janela de medição do próprio painel, já que um split simula um grande movimento. No backtest, o teste roda por fechamento, portanto, um split em um mês nunca remove as observações de um nome dos outros meses.
  • Fundos aparecem neste arquivo junto com empresas operacionais. Um ETF de bond ou de índice pode carregar uma grande posição vendida que provém da mecânica de criação e resgate, em vez de apostas contra o ativo.
  • Não há float nem contagem de ações neste arquivo, e não há open interest de opções em nenhum lugar do warehouse. A coluna de ações em circulação acima vem de uma tabela de fundamentos separada, portanto, um nome sem valor de mercado publicado é removido daquele painel.
  • Nada aqui é uma previsão ou recomendação. O conteúdo descreve condições mensuráveis, com o painel de resultados anexado.

FAQ

Como encontrar candidatos a short squeeze?

Filtre o arquivo de interesse de venda a descoberto (short-interest) reportado pela bolsa em busca de posições grandes em relação ao volume diário da ação. Mantenha apenas ativos com liquidez suficiente para negociação e verifique se o preço já está em tendência de alta. Este filtro do arquivo de short-interest Jun 30, 2026 utiliza cinco ou mais dias para cobertura, cinco milhões de ações de volume médio diário e um movimento positivo de cinco sessões, o que resultou em 36 nomes.

Qual porcentagem de short interest causa um squeeze?

Não existe um número mágico, e qualquer um que cite um valor está apenas supondo. Squeezes já começaram com leituras em toda a variação de dados, mas na maioria das vezes nada acontece: ao analisar um ano de dados de liquidação passados, 51.7% dos nomes que este filtro teria sinalizado estavam com preços menores 30 dias depois. Um short interest alto é uma condição prévia, nunca um gatilho.

Qual é a defasagem dos dados de short interest?

A liquidação mais recente disponível aqui é datada de Jun 30, 2026, há 23 dias, e os dados de preço vão até Jul 21, 2026. Esse intervalo deve-se ao ciclo de reporte, e não a um feed desatualizado: as posições são contadas duas vezes por mês e publicadas cerca de oito dias úteis após cada data de liquidação. Portanto, qualquer dado de short-interest chega com semanas de atraso.

Quais ações estão com maior short interest agora?

Os rankings sem filtros, um por dias para cobertura e outro por número bruto de ações vendidas, estão na página de ações mais vendidas a descoberto. Esta página responde a uma pergunta mais específica: entre os nomes do arquivo Jun 30, 2026 cujos preços também estão subindo, o mais congestionado é MPT com 16.9 dias para cobertura, o que o torna um líder deste filtro específico, e não a ação mais vendida do mercado.


Cada painel é uma consulta (query) armazenada e versionada sobre o arquivo reportado pela bolsa. Expanda o SQL abaixo de qualquer tabela ou execute o filtro com seus próprios parâmetros no terminal Strasmore.