Mercado de ações dos EUA está aberto hoje?
Veja se o mercado de ações dos EUA está aberto hoje: status aberto/fechado calculado, calendário do dia, próximos feriados e o que ocorre com ordens enviadas durante o fechamento.
O mercado de ações dos EUA funciona de segunda a sexta-feira, das 9h30 às 16h00, horário do leste dos EUA, exceto em feriados programados e em alguns dias de fechamento antecipado às 13h00. Por isso, a pergunta "o mercado de ações está aberto hoje?" se reduz a três verificações: se é um dia útil, se consta no calendário de feriados e em que ponto do pregão o relógio se encontra. Esta página confere esses três pontos em registos de bolsa em tempo real a cada atualização, e o selo "dados em" acima é o seu comprovativo de atualidade. Para o horário sessão a sessão, veja horário do mercado de ações; para o calendário completo, feriados do mercado e fechamentos antecipados.
O mercado de ações está aberto agora?
O painel abaixo calcula a resposta no momento em que os dados desta página foram atualizados pela última vez. Ele verifica o dia da semana, consulta a data de hoje na lista de feriados da bolsa e posiciona o relógio no horário do leste dos EUA dentro ou fora das janelas oficiais: pré-mercado a partir das 4h, o pregão regular a partir das 9h30 e o after-hours do fechamento até as 20h.
| data verificada | dia da semana | hora verificada (ET) | calendário de hoje | status do mercado | próxima sessão regular | dias até a próx. sessão |
|---|---|---|---|---|---|---|
| 2026-10-17 | Saturday | 20:18 | weekend | CLOSED | 2026-10-19 | 2 |
O SQL exato por trás de cada número
WITH
toTimeZone(now(), 'America/New_York') AS now_et,
toDate(now_et) AS today_et,
toHour(now_et) * 60 + toMinute(now_et) AS min_now,
(SELECT countDistinct(date) FROM global_markets.stocks_market_holidays
WHERE date = toDate(toTimeZone(now(), 'America/New_York')) AND status = 'closed') AS today_full_holiday,
(SELECT countDistinct(date) FROM global_markets.stocks_market_holidays
WHERE date = toDate(toTimeZone(now(), 'America/New_York')) AND status = 'early-close') AS today_early,
(SELECT any(name) FROM global_markets.stocks_market_holidays
WHERE date = toDate(toTimeZone(now(), 'America/New_York'))) AS today_holiday_name,
if(today_early = 1, 780, 960) AS close_min,
if(today_early = 1, 1020, 1200) AS after_hours_end,
(SELECT min(d) FROM (SELECT toDate(toTimeZone(now(), 'America/New_York')) + arrayJoin(range(1, 11)) AS d)
WHERE toDayOfWeek(d) <= 5
AND d NOT IN (SELECT date FROM global_markets.stocks_market_holidays WHERE status = 'closed')) AS next_sess_after_today,
toDayOfWeek(today_et) <= 5 AND today_full_holiday = 0 AS today_is_session
SELECT
toString(today_et) AS date_checked,
formatDateTime(today_et, '%W') AS weekday,
formatDateTime(now_et, '%H:%i') AS time_checked_et,
multiIf(toDayOfWeek(today_et) >= 6, 'weekend',
today_full_holiday = 1, concat('holiday — ', today_holiday_name),
today_early = 1, concat('early close (1:00 pm) — ', today_holiday_name),
'normal weekday') AS todays_calendar,
multiIf(NOT today_is_session, 'CLOSED',
min_now < 240, 'CLOSED (overnight)',
min_now < 570, 'PREMARKET',
min_now < close_min, 'OPEN',
min_now < after_hours_end, 'AFTER-HOURS',
'CLOSED (overnight)') AS market_status,
toString(if(today_is_session AND min_now < close_min, today_et, next_sess_after_today)) AS next_regular_session,
dateDiff('day', today_et, if(today_is_session AND min_now < close_min, today_et, next_sess_after_today)) AS days_to_next_sessionÀs 20:18 (horário do leste dos EUA) de Saturday, 2026-10-17, o status calculado indicava CLOSED, com a entrada de calendário de hoje "weekend". A próxima abertura do pregão regular na programação — o próprio dia de hoje sempre que o status indicar PREMARKET ou OPEN — é 2026-10-19. Essa data já ignora fins de semana e todos os feriados de fechamento total, e nunca fica a mais de poucos dias de distância, mesmo em feriados prolongados de fim de semana. Está lendo isto depois do horário indicado? As mesmas três verificações levam segundos para fazer manualmente: o dia da semana, a tabela de feriados abaixo, o relógio no horário do leste dos EUA.
O próximo fechamento programado, e tudo o que vem depois
O calendário futuro vem diretamente do feed da bolsa. Um detalhe que vale conhecer: a tabela inclui o dia de hoje sempre que hoje for um feriado ou um pregão com encerramento antecipado — a consulta busca todos os fechamentos a partir de hoje, inclusive, e não apenas os posteriores a hoje — por isso, numa manhã de feriado, a primeira linha e o painel de status acima concordam entre si.
| data de fechamento | cai em | feriado | status do dia | fecha às (ET) | dias restantes |
|---|---|---|---|---|---|
| 2026-11-26 | Thu | Thanksgiving | closed | 39 | |
| 2026-11-27 | Fri | Thanksgiving | early-close | 13:00 | 40 |
| 2026-12-24 | Thu | Christmas | early-close | 13:00 | 67 |
| 2026-12-25 | Fri | Christmas | closed | 68 | |
| 2027-01-01 | Fri | New Years Day | closed | 75 | |
| 2027-01-18 | Mon | Martin Luther King, Jr. Day | closed | 92 | |
| 2027-02-15 | Mon | Washington's Birthday | closed | 120 | |
| 2027-03-26 | Fri | Good Friday | closed | 159 | |
| 2027-05-31 | Mon | Memorial Day | closed | 225 | |
| 2027-06-18 | Fri | Juneteenth | closed | 243 | |
| 2027-07-05 | Mon | Independence Day | closed | 260 | |
| 2027-09-06 | Mon | Labor Day | closed | 323 |
O SQL exato por trás de cada número
SELECT toString(date) AS closure_date,
formatDateTime(date, '%a') AS falls_on,
any(name) AS holiday,
any(status) AS day_status,
any(if(status = 'early-close', formatDateTime(toTimeZone(close, 'America/New_York'), '%H:%i'), '')) AS closes_at_et,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE exchange = 'NYSE' AND date >= today()
GROUP BY date
ORDER BY date
LIMIT 16A próxima interrupção programada é Thanksgiving, em 2026-11-26 (closed), 39 dias a partir do horário de atualização. Qualquer dia de semana que não conste nesta tabela é um pregão normal, das 9:30 às 16:00. Os dias de encerramento antecipado terminam a negociação regular às 13h, horário do leste dos EUA, e concentram-se no Dia de Ação de Graças, na véspera de Natal e no 4 de julho; o leilão de fechamento continua a ocorrer nesses dias, só que é realizado três horas mais cedo.
Quantos dias o mercado fica fechado por ano?
"Cerca de nove ou dez feriados por ano" é a resposta de livro, mas esta página consegue contar em vez de estimar. O feed da bolsa só traz os fechamentos ainda por vir, então os que já passaram são recuperados a partir do pregão: um dia da semana em que a SPY registrou zero barras de um minuto no pregão regular foi um fechamento total, e um dia que registrou aproximadamente metade de uma sessão (cerca de 210 barras em vez de 390) foi um fechamento antecipado.
| categoria | já passados | ainda à frente | total | ano calendário |
|---|---|---|---|---|
| full closure | 8 | 2 | 10 | 2026 |
| early close (1:00 pm) | 0 | 2 | 2 | 2026 |
O SQL exato por trás de cada número
WITH day_bars AS (
SELECT cal.day AS day, ifNull(t.bars, 0) AS bars
FROM (SELECT makeDate(toYear(today()), 1, 1) + arrayJoin(range(370)) AS day) AS cal
LEFT JOIN (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime(makeDate(toYear(today()), 1, 1), 'America/New_York')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
) AS t ON t.d = cal.day
WHERE toDayOfWeek(cal.day) BETWEEN 1 AND 5
AND cal.day <= today() - 4
),
past AS (
SELECT countIf(bars = 0) AS past_full, countIf(bars BETWEEN 120 AND 330) AS past_early
FROM day_bars
),
ahead AS (
SELECT countDistinctIf(date, status = 'closed') AS ahead_full,
countDistinctIf(date, status = 'early-close') AS ahead_early
FROM global_markets.stocks_market_holidays
WHERE date > today() - 4 AND toYear(date) = toYear(today())
)
SELECT category, already_passed, still_ahead, already_passed + still_ahead AS total, toString(toYear(today())) AS calendar_year
FROM (
SELECT 'full closure' AS category, past.past_full AS already_passed, ahead.ahead_full AS still_ahead, 1 AS ord FROM past, ahead
UNION ALL
SELECT 'early close (1:00 pm)' AS category, past.past_early AS already_passed, ahead.ahead_early AS still_ahead, 2 AS ord FROM past, ahead
)
ORDER BY ord2026 soma 10 fechamentos totais, 8 já ocorridos, 2 ainda por vir, além de 2 fechamentos antecipados programados para as 13h, 2 deles ainda a acontecer. (Um fechamento ocorrido nos últimos dias pode, por um breve período, não entrar em nenhuma das duas contagens enquanto a defasagem de ingestão do pregão não se resolve; a divisão se autocorrige na atualização seguinte.) Os fins de semana completam o restante dos fechamentos: subtraindo de 365 os aproximadamente 104 dias de fim de semana e esses feriados, um ano resulta em cerca de 250 sessões de negociação.
O recibo da fita: a sessão mais recente
Um calendário diz o que deveria acontecer; a fita diz o que aconteceu. O painel abaixo extrai a sessão mais recente efetivamente observada na nossa fita de barras de um minuto do SPY, a contagem de barras dessa sessão, o número de negócios com opções do SPY registrados no mesmo dia, e o meio-pregão mais recente em toda a fita histórica.
| Sessão mais recente | dia da semana | Barras de minuto regulares | SPY prints de opções (milhares) | Último fechamento antecipado | Barras de fechamento antecipado |
|---|---|---|---|---|---|
| 2026-10-16 | Friday | 211 | 2025 | 2026-10-16 | 211 |
O SQL exato por trás de cada número
WITH rth AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 450
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
),
last_sess AS (
SELECT max(d) AS last_d
FROM rth
WHERE bars >= 120 AND d < toDate(toTimeZone(now(), 'America/New_York'))
),
opt AS (
SELECT round(count() / 1e3, 0) AS spy_option_prints_thousands
FROM global_markets.options_trades
WHERE ticker >= 'O:SPY2' AND ticker < 'O:SPY3'
AND sip_timestamp >= toDateTime((SELECT last_d FROM last_sess), 'America/New_York')
AND sip_timestamp < toDateTime((SELECT last_d FROM last_sess) + 1, 'America/New_York')
),
last_early AS (
SELECT toString(max(d)) AS last_early_close_date,
argMax(bars, d) AS its_bars
FROM rth WHERE bars BETWEEN 120 AND 330
)
SELECT toString((SELECT last_d FROM last_sess)) AS most_recent_session,
formatDateTime((SELECT last_d FROM last_sess), '%W') AS weekday,
(SELECT bars FROM rth WHERE d = (SELECT last_d FROM last_sess)) AS regular_minute_bars,
(SELECT spy_option_prints_thousands FROM opt) AS spy_option_prints_thousands,
(SELECT last_early_close_date FROM last_early) AS last_early_close,
(SELECT its_bars FROM last_early) AS early_close_barsA sessão mais recente na nossa fita é 2026-10-16 (Friday), que registrou 211 barras de um minuto do pregão regular; um dia completo tem cerca de 390, e um fechamento antecipado, cerca de 210. A mesma sessão registrou aproximadamente 2025 mil negócios individuais com opções do SPY: o mercado de opções segue o calendário do mercado de ações, incluindo feriados e meios-pregões, e vencimentos que caem numa sexta-feira de mercado fechado são antecipados em um dia. O fechamento antecipado mais recente na fita foi em 2026-10-16, com 211 barras de um minuto, o padrão característico de um meio-pregão com fechamento às 13h00. Uma observação sobre a borda mais recente dos dados: este repositório é alimentado com uma defasagem de um a dois dias, de modo que a "sessão mais recente" aqui pode ficar um ou dois dias atrás da sessão mais recente de fato.
Quando o mercado fecha sem aviso
Os fechamentos programados constam no calendário; os não programados nunca constam. São raros, poucos por década, e a fita mantém o registro: um dia de semana que deveria ter registrado 390 barras e não registrou nenhuma.
| data de fechamento | cai em | Nome | Barras da sessão regular do SPY |
|---|---|---|---|
| 2012-10-29 | Mon | Hurricane Sandy — day 1 | 0 |
| 2012-10-30 | Tue | Hurricane Sandy — day 2 | 0 |
| 2012-10-31 | Wed | Reopening after Sandy | 390 |
| 2018-12-05 | Wed | Mourning — George H. W. Bush | 0 |
| 2025-01-09 | Thu | Mourning — Jimmy Carter | 0 |
O SQL exato por trás de cada número
WITH events AS (
SELECT arrayJoin([
(toDate('2012-10-29'), 'Hurricane Sandy — day 1'),
(toDate('2012-10-30'), 'Hurricane Sandy — day 2'),
(toDate('2012-10-31'), 'Reopening after Sandy'),
(toDate('2018-12-05'), 'Mourning — George H. W. Bush'),
(toDate('2025-01-09'), 'Mourning — Jimmy Carter')
]) AS e
),
tape AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d, count() AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2012-10-29 00:00:00' AND window_start < '2012-11-01 12:00:00')
OR (window_start >= '2018-12-05 00:00:00' AND window_start < '2018-12-06 12:00:00')
OR (window_start >= '2025-01-09 00:00:00' AND window_start < '2025-01-10 12:00:00'))
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
)
SELECT toString(e.1) AS closure_date,
formatDateTime(e.1, '%a') AS falls_on,
e.2 AS name,
toUInt32(ifNull(t.bars, 0)) AS spy_regular_session_bars
FROM events
LEFT JOIN tape AS t ON t.d = events.e.1
ORDER BY e.1O furacão Sandy manteve as duas principais bolsas fechadas em 2012-10-29 e 2012-10-30, o primeiro fechamento climático de múltiplos dias desde 1888, e o pregão de reabertura em 2012-10-31 registrou um total de 390 barras. Dias nacionais de luto fecharam o mercado em 2018-12-05 (presidente George H. W. Bush) e 2025-01-09 (presidente Jimmy Carter). O fechamento não programado mais longo da era moderna, de 11 a 14 de setembro de 2001, quatro pregões consecutivos, antecede nossos dados de minuto, que começam em 2003. Cada fechamento acima aparece na fita como 0 barras do pregão regular: nada foi negociado.
O que acontece com uma ordem enviada enquanto o mercado está fechado?
Nada é executado enquanto o mercado está fechado. Uma ordem enviada num sábado, num feriado ou às 2h da manhã fica simplesmente em fila na corretora até ao próximo pregão, e uma ordem a mercado em fila transaciona ao preço que o leilão de abertura determinar, dias depois de ter sido clicada. O intervalo entre o fecho de um pregão e o primeiro negócio do pregão seguinte é a exposição que se aceita, e ela é mensurável:
| Última sessão antes | Sessão de reabertura | Dias sem pregão | Fechamento antes da pausa | Preço de reabertura | Gap (%) |
|---|---|---|---|---|---|
| Fri 2026-08-07 | Mon 2026-08-10 | 3 | 773.2 | 772.6 | -0.08 |
| Fri 2026-08-14 | Mon 2026-08-17 | 3 | 776.3 | 776.18 | -0.02 |
| Fri 2026-08-21 | Mon 2026-08-24 | 3 | 765.69 | 764.78 | -0.12 |
| Fri 2026-08-28 | Mon 2026-08-31 | 3 | 769.34 | 767.33 | -0.26 |
| Fri 2026-09-04 | Tue 2026-09-08 | 4 | 770.23 | 769.07 | -0.15 |
| Fri 2026-09-11 | Mon 2026-09-14 | 3 | 764.2 | 759 | -0.68 |
| Fri 2026-09-18 | Mon 2026-09-21 | 3 | 761.64 | 766.25 | 0.61 |
| Fri 2026-09-25 | Mon 2026-09-28 | 3 | 771.3 | 768.35 | -0.38 |
| Fri 2026-10-02 | Mon 2026-10-05 | 3 | 769.65 | 769.69 | 0.01 |
| Fri 2026-10-09 | Mon 2026-10-12 | 3 | 778.53 | 778.78 | 0.03 |
O SQL exato por trás de cada número
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round(argMin(toFloat64(open), window_start), 2) AS open_px,
round(argMax(toFloat64(close), window_start), 2) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 75
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
),
paired AS (
SELECT d,
open_px,
lagInFrame(d) OVER (ORDER BY d) AS prev_d,
lagInFrame(close_px) OVER (ORDER BY d) AS prev_close
FROM daily
)
SELECT concat(formatDateTime(prev_d, '%a '), toString(prev_d)) AS last_session_before,
concat(formatDateTime(d, '%a '), toString(d)) AS reopening_session,
dateDiff('day', prev_d, d) AS days_dark,
toString(prev_close) AS close_before_break,
toString(open_px) AS reopening_print,
round((open_px - prev_close) / prev_close * 100, 2) AS gap_pct
FROM paired
WHERE prev_close > 0 AND dateDiff('day', prev_d, d) >= 3
ORDER BY dA tabela cobre os últimos 10 fins de semana e fins de semana prolongados, e a coluna days_dark marca as pausas de quatro dias por feriado. A mais recente ocorreu entre Fri 2026-10-09 e Mon 2026-10-12 (3 dias corridos sem negociação): o fecho do pregão regular da SPY antes da pausa foi de $778.53, o preço de reabertura foi $778.78, um gap de 0.03% que uma ordem a mercado em fila teria aceitado sem ver. Uma ordem limitada fixa um teto para o preço, ao custo de talvez não ser executada; por que as ações fazem gap durante a noite cobre a mecânica por detrás desses movimentos.
Fusos horários, o mercado de obrigações e o resto do mundo
Três desencontros geram a maior parte da confusão restante sobre "está aberto ou não". Fusos horários: o horário oficial é o do Leste dos EUA, as 9h30 ET correspondem às 6h30 no Pacífico e às 14h30 em Londres na maior parte do ano, e as datas do mercado são datas ET, pelo que um leitor na Ásia pode ter o seu "hoje" repartido entre duas sessões americanas. O mercado de obrigações: os Treasuries negoceiam segundo o calendário da SIFMA, não o da NYSE, que observa todos os feriados da bolsa de ações mais dois adicionais, e os seus encerramentos antecipados são recomendações às 14h00 que ocorrem com mais frequência do que as sessões reduzidas de 13h00 do mercado acionista. A divergência de dia completo é visível nos dados:
| Data da sessão | dia da semana |
|---|---|
| 2025-11-11 | Tuesday |
| 2026-10-12 | Monday |
O SQL exato por trás de cada número
WITH stock_days AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 370
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
HAVING count() >= 100
)
SELECT toString(d) AS session_date,
formatDateTime(d, '%W') AS weekday
FROM (
SELECT d
FROM stock_days
WHERE d <= (SELECT max(date) FROM global_markets.treasury_yields)
AND d NOT IN (SELECT date FROM global_markets.treasury_yields WHERE date >= today() - 370)
ORDER BY d DESC
LIMIT 1 BY toMonth(d)
)
ORDER BY dNo último ano houve exatamente 2 dias úteis em que o mercado acionista teve sessão completa e nenhuma yield do Tesouro foi divulgada, 2025-11-11 e 2026-10-12, um em outubro e outro em novembro: o Columbus Day e o Veterans Day, os dois feriados federais em que as ações negoceiam normalmente. O resto do mundo: as bolsas estrangeiras seguem os seus próprios calendários, e os futuros de índices negoceiam praticamente de forma contínua, o que explica como uma manchete pode dizer "as ações estão a cair" às 3h00 ET quando todas as bolsas de ações dos EUA estão fechadas. O horário estendido em torno de cada sessão dos EUA decorre das 4h00 às 9h30 e das 16h00 às 20h00 ET, com menor liquidez e spreads mais largos; os detalhes operacionais estão em o guia de horário estendido.
Perguntas frequentes
O mercado de ações está aberto agora?
Na última atualização de dados desta página, às 20:18 ET de 2026-10-17, o status calculado era CLOSED. Depois desse registro, a regra é simples: dias úteis das 9h30 às 16h00 ET, excluindo as datas da tabela de feriados acima.
O mercado de ações está aberto amanhã?
Amanhã é um pregão normal, a menos que seja sábado, domingo ou uma data da tabela de fechamentos acima. O próximo pregão regular do calendário a partir da atualização desta página, incluindo hoje, em que o mercado está aberto, é 2026-10-19.
O mercado de ações está aberto na véspera de Natal?
Quando 24 de dezembro cai em dia útil, as bolsas dos EUA costumam ter um pregão reduzido, que encerra às 13h00 ET; quando cai no fim de semana, não há pregão. O dia de Natal é sempre um fechamento total; as datas exatas deste ano estão na tabela do calendário acima.
O mercado de ações está aberto na Black Friday?
Sim. A sexta-feira após o Dia de Ação de Graças tem um meio-pregão programado: a negociação regular termina às 13h00 ET em vez de 16h00, o equivalente a cerca de 210 barras de um minuto no pregão, em vez de 390.
O mercado de títulos está aberto hoje?
Geralmente sim, quando o mercado de ações também está, mas não sempre. O mercado do Tesouro segue o calendário da SIFMA: todos os feriados do mercado de ações, mais o Columbus Day e o Veterans Day, com fechamentos antecipados mais frequentes (e mais cedo, às 14h00). O histórico do último ano mostra 2 dias úteis em que houve negociação de ações, mas os rendimentos do Tesouro não foram cotados.
Cada painel acima é uma consulta armazenada e versionada, com o SQL exato por trás dela — expanda qualquer painel para auditá-lo. Para verificar você mesmo qualquer data, pregão ou intervalo, pergunte em português simples no terminal da Strasmore.