As lacunas de ações sempre são preenchidas? Dados
Lacunas de ações não são sempre preenchidas em um prazo fixo. Veja as taxas no mesmo pregão, em 5, 20 e 60 sessões, com o SQL por trás dos dados.
As lacunas de preço das ações sempre são preenchidas? Não em nenhum horizonte suficientemente curto para permitir uma operação. A afirmação só parece sobreviver quando ninguém define esse horizonte. Uma lacuna é a distância entre a abertura de hoje e o fechamento da sessão regular de ontem. O preenchimento ocorre quando o preço volta a negociar através desse fechamento anterior. O ponto central é quanto tempo o leitor está disposto a esperar.
O que é uma lacuna e o que é um preenchimento
A lacuna é medida entre a abertura e o fechamento anterior. A sessão de ontem terminou a um preço, a de hoje abriu a outro, e a diferença é a lacuna. Não é a distância em relação à máxima ou à mínima intradiária de ontem. Esse é um alvo diferente e muito mais fácil. Trocar uma referência pela outra é a forma como uma “lacuna” passa discretamente a ser fechada antes do almoço em qualquer dia comum. Lacunas pequenas aparecem em quase todas as sessões. Negociações em outros fusos horários, mudanças em índices, notícias sobre ações específicas e ajustes de ex-dividendos alteram o preço justo enquanto o mercado americano está fechado. Por que as ações abrem com lacunas durante a noite explica a origem dessa reprecificação noturna.
O preenchimento é o primeiro momento em que a ação volta a negociar através do preço de fechamento anterior. Essa definição é incompleta sem um prazo. Em um horizonte ilimitado, uma ação líquida cruza quase qualquer nível indicado pelo leitor em algum momento. Isso torna a afirmação “as lacunas sempre são preenchidas” impossível de refutar, mas não verdadeira. Cada número abaixo tem um horizonte definido.
A mesma amostra é usada em todo o artigo: oito ações americanas de grande capitalização, dias com lacunas entre janeiro de 2021 e fevereiro de 2026, e preenchimentos testados contra as máximas e mínimas de cada minuto da sessão regular. Lacunas inferiores a 0,25% são excluídas por arredondamento.
As lacunas das ações sempre são preenchidas no mesmo dia?
Comece pelo tamanho. Agrupe cada lacuna de acordo com sua amplitude e verifique se o fechamento anterior foi novamente tocado antes do fim da mesma sessão.
O SQL exato por trás de cada número
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
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, d
),
gapped AS
(
SELECT
d,
session_open,
session_high,
session_low,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close
FROM sessions
),
measured AS
(
SELECT
abs(100 * (session_open / prior_close - 1)) AS gap_pct,
toUInt8(if(session_open > prior_close,
session_low <= prior_close,
session_high >= prior_close)) AS filled_same_session
FROM gapped
WHERE prior_close > 0
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 0.25
)
SELECT
multiIf(gap_pct < 0.5, '0.25 to 0.5%',
gap_pct < 1, '0.5 to 1%',
gap_pct < 2, '1 to 2%',
gap_pct < 4, '2 to 4%',
'4% or more') AS gap_bucket,
count() AS gap_days,
round(100 * avg(filled_same_session), 1) AS same_session_fill_pct
FROM measured
GROUP BY gap_bucket
ORDER BY min(gap_pct) ASCAs menores lacunas da amostra, de 0,25% a 0,5%, foram fechadas na mesma sessão em 74.6% dos casos, entre 2381 ocorrências. Lacunas de 4% ou mais foram fechadas na mesma sessão em 14.8% dos casos. A inclinação descendente do gráfico contém a maior parte da conclusão: quanto menor a lacuna, mais frequentemente a ação volta a cruzá-la durante o dia. Em outras palavras, lacunas pequenas são ruído, e o ruído tende a se reverter.
Quanto tempo uma lacuna leva para ser preenchida?
Ao ampliar o prazo, a taxa de preenchimento só pode aumentar. Uma janela mais longa acrescenta preenchimentos e nunca os remove. A questão é quanto do total ocorre tarde demais para ser útil.
O SQL exato por trás de cada número
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
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, d
),
paths AS
(
SELECT
d,
session_open,
session_high,
session_low,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) AS low_5,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) AS high_5,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS low_20,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS high_20,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 59 FOLLOWING) AS low_60,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 59 FOLLOWING) AS high_60
FROM sessions
),
gaps AS
(
SELECT
session_open > prior_close AS gap_up,
prior_close,
session_low,
session_high,
low_5,
high_5,
low_20,
high_20,
low_60,
high_60
FROM paths
WHERE prior_close > 0
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 1
),
flags AS
(
SELECT arrayJoin([
(1, '1 session', toUInt8(if(gap_up, session_low <= prior_close, session_high >= prior_close))),
(2, '5 sessions', toUInt8(if(gap_up, low_5 <= prior_close, high_5 >= prior_close))),
(3, '20 sessions', toUInt8(if(gap_up, low_20 <= prior_close, high_20 >= prior_close))),
(4, '60 sessions', toUInt8(if(gap_up, low_60 <= prior_close, high_60 >= prior_close)))
]) AS f
FROM gaps
)
SELECT
tupleElement(f, 2) AS horizon,
count() AS gaps_measured,
round(100 * avg(tupleElement(f, 3)), 1) AS filled_pct
FROM flags
GROUP BY horizon
ORDER BY min(tupleElement(f, 1)) ASCEntre 2191 lacunas de 1% ou mais, 34% foram preenchidas na mesma sessão e 88.7% haviam sido preenchidas em até 60 sessions. O segundo número é o mais citado, geralmente sem a indicação do horizonte. Sessenta sessões equivalem aproximadamente a três meses de negociação. Esse é um período longo para uma posição baseada em uma distorção de um dia. Uma lacuna preenchida no 47º dia, depois de a ação ter se movido bastante na direção oposta, ainda conta como preenchida nessa estatística.
Lacunas de ruído e lacunas de informação são dois grupos diferentes
Uma lacuna em um dia tranquilo, com volume normal, representa um pequeno ajuste de preço. Uma lacuna após uma notícia de resultados ou uma proposta de aquisição incorpora uma mudança no valor da empresa. Nesse caso, não há necessariamente um preço antigo ao qual o ativo possa reverter. O volume separa razoavelmente bem os dois grupos: quando todo o mercado quer negociar uma reprecificação, há muitos mais prints do que em um dia normal.
O SQL exato por trás de cada número
WITH sessions AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMin(toFloat64(open), window_start) AS session_open,
argMax(toFloat64(close), window_start) AS session_close,
toFloat64(max(high)) AS session_high,
toFloat64(min(low)) AS session_low,
sum(toFloat64(volume)) AS session_volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2021-01-01'
AND window_start < '2026-07-01'
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, d
),
paths AS
(
SELECT
d,
session_open,
session_high,
session_low,
session_volume,
lagInFrame(session_close) OVER (PARTITION BY ticker ORDER BY d ASC
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prior_close,
avg(session_volume) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN 21 PRECEDING AND 2 PRECEDING) AS normal_volume,
min(session_low) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS low_20,
max(session_high) OVER (PARTITION BY ticker ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 19 FOLLOWING) AS high_20
FROM sessions
),
measured AS
(
SELECT
session_volume / normal_volume AS volume_ratio,
toUInt8(if(session_open > prior_close, session_low <= prior_close, session_high >= prior_close)) AS filled_same_session,
toUInt8(if(session_open > prior_close, low_20 <= prior_close, high_20 >= prior_close)) AS filled_20_sessions
FROM paths
WHERE prior_close > 0
AND normal_volume > 0
AND d >= toDate('2021-03-01')
AND d <= toDate('2026-02-28')
AND abs(100 * (session_open / prior_close - 1)) >= 1
)
SELECT
multiIf(volume_ratio < 1.5, 'Under 1.5x normal',
volume_ratio < 3, '1.5x to 3x normal',
'3x or more') AS volume_regime,
count() AS gap_days,
round(100 * avg(filled_same_session), 1) AS same_session_fill_pct,
round(100 * avg(filled_20_sessions), 1) AS within_20_sessions_fill_pct
FROM measured
WHERE isFinite(volume_ratio)
GROUP BY volume_regime
ORDER BY min(volume_ratio) ASCLacunas de 1% ou mais com volume inferior a 1,5 vez o volume normal da ação foram preenchidas na mesma sessão em 35.9% dos casos. Lacunas do mesmo tamanho com volume de pelo menos três vezes o normal foram preenchidas na mesma sessão em 15.3% dos casos e em até 20 sessões em 45.8%, entre 59 ocorrências. O grupo de volume elevado concentra as lacunas após resultados e as lacunas provocadas por operações de aquisição. Tirar a média dos dois grupos em um único número não descreve nenhum deles.
Por que os primeiros minutos da sessão distorcem as estatísticas de preenchimento
Um preenchimento registrado às 9h31 é um dado frágil. O preço de abertura resulta de um leilão, um único cruzamento em lote que define um preço para todas as ordens acumuladas durante a noite. Nosso explicador sobre o leilão de abertura detalha esse mecanismo. Nos minutos seguintes, os spreads cotados ficam nos níveis mais amplos do dia, e um único print pequeno pode registrar uma máxima ou mínima na qual nenhuma quantidade relevante foi negociada. Os spreads aumentam na abertura explica por que a liquidez cotada é tão baixa nesse momento.
O gráfico abaixo mostra esse padrão no próprio histórico da cesta: a amplitude média entre a máxima e a mínima de cada minuto, em pontos-base — um ponto-base equivale a um centésimo de por cento — por intervalo de 15 minutos, até 2025.
O SQL exato por trás de cada número
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 15 MINUTE), '%H:%i') AS et_time,
round(10000 * avg(toFloat64(high) / toFloat64(low) - 1), 1) AS avg_range_bps,
round(avg(toFloat64(volume)) / 1000, 1) AS avg_volume_k
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'JPM', 'KO', 'WMT', 'XOM')
AND window_start >= '2025-01-01'
AND window_start < '2026-01-01'
AND toFloat64(low) > 0
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 et_time
ORDER BY et_time ASCO primeiro intervalo registra, em média, 24.4 pontos-base de amplitude por minuto, contra 6.9 pontos-base no intervalo 12:30, com negociação de 303.9 mil ações por minuto, contra 69.6 mil. Um preenchimento registrado nesse primeiro intervalo se baseia nos preços menos confiáveis do dia. Os números de preenchimento na mesma sessão apresentados acima incluem esses minutos, o que os deixa ligeiramente elevados. Essa ressalva vale para toda estatística de preenchimento no mesmo dia, inclusive esta.
O que verificar antes de tratar uma lacuna como uma operação
- O horizonte. Uma taxa de preenchimento sem prazo definido não é uma estatística.
- A amostra. É preciso saber se as lacunas provocadas por notícias foram separadas das lacunas em dias tranquilos e como essa separação foi definida.
- A medição. Verifique se os preenchimentos foram testados contra faixas efetivamente negociadas e se os primeiros minutos da sessão foram incluídos.
- Os sobreviventes. Verifique se a amostra contém apenas ações que ainda são negociadas hoje. Isso pode eliminar discretamente as lacunas que nunca foram preenchidas.
A versão correta da afirmação é mais limitada do que o slogan. Lacunas pequenas em volume normal revertem com frequência e rapidez. Lacunas grandes em volume elevado representam reprecificações que frequentemente permanecem abertas por meses. Para acompanhar quais ações estão abrindo com lacunas, a página ações com maiores altas e quedas da semana acompanha a semana atual. Já como os mercados se recuperam de crashes aplica a mesma disciplina de horizonte às quedas dos índices.
Perguntas frequentes
As lacunas das ações sempre são preenchidas?
Não. Na amostra apresentada, 88.7% das lacunas de 1% ou mais voltaram a negociar através do fechamento anterior em até 60 sessions. Isso deixa uma parcela relevante sem preenchimento depois de aproximadamente três meses de negociação. A versão com “sempre” só funciona sem limite de tempo. Nesse ponto, deixa de ser testável.
Quanto tempo uma lacuna leva para ser preenchida?
Depende da lacuna. Nesta amostra, 34% das lacunas de 1% ou mais foram preenchidas na mesma sessão. Os demais preenchimentos ocorreram ao longo das semanas e dos meses seguintes. Lacunas pequenas se concentram no grupo preenchido no mesmo dia. As de volume elevado são as mais lentas.
Qual é a diferença entre uma lacuna comum e uma lacuna de rompimento?
A terminologia dos gráficos classifica as lacunas pelo contexto. Uma lacuna comum ocorre em um dia normal, com volume normal e sem uma notícia específica. Uma lacuna de rompimento ocorre com volume elevado, acompanhada de nova informação e, muitas vezes, após a saída de uma faixa de preço que a ação vinha mantendo há algum tempo. A divisão por volume no painel acima é uma versão mensurável dessa mesma distinção.
Por que as estatísticas de preenchimento de lacunas variam tanto entre as fontes?
Quatro escolhas alteram significativamente o número: o horizonte do preenchimento, a cesta de ações, o período analisado e o fato de a lacuna ser medida em relação ao fechamento anterior ou à máxima e à mínima anteriores. Uma taxa de preenchimento sem qualquer um desses quatro elementos não pode ser comparada com outra.
Como esses números foram medidos
As sessões são construídas com barras de um minuto dentro do horário regular de negociação em Nova York. O preço de abertura é a abertura da primeira barra da sessão regular. O fechamento é o fechamento da última barra. A máxima e a mínima do dia são os extremos dessas barras. Cada lacuna é medida em relação ao fechamento da sessão anterior do mesmo ticker.
Os horizontes de 5, 20 e 60 sessões incluem o próprio dia da lacuna. Os dias com lacunas vão até o fim de fevereiro de 2026, enquanto o histórico de negociação se estende até junho de 2026. Assim, todas as lacunas no painel de horizontes têm pelo menos 60 sessões posteriores disponíveis, e nenhuma é classificada como não preenchida por falta de dados.
O volume normal no terceiro painel é o volume médio da sessão regular nas 20 sessões encerradas dois dias antes da lacuna. Isso exclui o dia da lacuna e o dia anterior do próprio parâmetro de referência.
A cesta contém oito ações líquidas de grande capitalização. Ações menos líquidas apresentam lacunas com mais frequência e padrões de preenchimento diferentes. Portanto, essas taxas não devem ser aplicadas a small caps sem refazer o mesmo teste para elas.
Cada painel deste artigo vem acompanhado do SQL exato abaixo dele. Para executar o mesmo teste em um ticker que você acompanha, faça a pergunta em inglês simples no terminal Strasmore.