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

O que é o NBBO e como funciona

Entenda o que é o National Best Bid and Offer e como essa cotação consolidada define o melhor preço de compra e venda para o seu ticker.

O NBBO, o melhor preço de compra e venda nacional, é a cotação consolidada de uma ação nos EUA: o maior preço de um comprador e o menor preço de um vendedor, considerando todas as bolsas simultaneamente. É a cotação exibida em seu aplicativo e o benchmark que sua corretora deve igualar ou superar em sua ordem. Todos os números abaixo vêm de registros de cotações reais, consulta anexada.

O que é o NBBO? Uma definição simples

Uma ação dos EUA não é negociada em apenas um lugar. A NYSE, a Nasdaq e mais de uma dúzia de outras bolsas operam livros de ofertas para o mesmo ticker, cada uma com seu próprio melhor bid e ask. O NBBO consolida esses valores: o maior bid de qualquer lugar e o menor ask de qualquer lugar, lado a lado com a quantidade de ações disponível em cada um. Essa consolidação é feita pelos processadores de informações de valores mobiliários, ou SIPs — utilidades de mercado operadas conjuntamente pelas bolsas.

Dois detalhes são importantes desde o início. O bid e o ask podem estar em duas bolsas diferentes ao mesmo tempo. Além disso, uma mudança de preço não é necessária para uma atualização: uma mudança no tamanho da ordem no mesmo melhor preço também gera um novo registro. Traders chamam os dois melhores preços de the touch; a diferença entre eles é o bid-ask spread.

Como ler uma cotação NBBO: preços, tamanhos e ritmo

Aqui estão dez registros consecutivos do NBBO para Coca-Cola (KO) das 13:30 ET de uma sessão completa recente — a cotação nacional conforme ela chega.

QueryKO — dez atualizações consecutivas do NBBO a partir das 13h30 ET em uma sessão recente
O SQL exato por trás de cada número
WITH (
    SELECT max(session_date)
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
               countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS regular_bars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime(today() - 10)
          AND window_start < toDateTime(today() - 3)
        GROUP BY session_date
        HAVING regular_bars = 390
    )
) AS last_session
SELECT substring(toString(toTimeZone(sip_timestamp, 'America/New_York')), 12, 12) AS et_time,
       round((toUnixTimestamp64Nano(sip_timestamp) - min(toUnixTimestamp64Nano(sip_timestamp)) OVER ()) / 1e6, 2) AS elapsed_ms,
       bid_size AS bid_shares,
       toFloat64(bid_price) AS best_bid,
       toFloat64(ask_price) AS best_ask,
       ask_size AS ask_shares,
       round((toFloat64(ask_price) - toFloat64(bid_price)) * 100, 1) AS spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'KO'
  AND sip_timestamp >= toDateTime(last_session, 'America/New_York') + INTERVAL 13 HOUR + INTERVAL 30 MINUTE
  AND sip_timestamp < toDateTime(last_session, 'America/New_York') + INTERVAL 14 HOUR
  AND bid_price > 0
  AND ask_price > bid_price
ORDER BY sip_timestamp, sequence_number
LIMIT 10

Leia a primeira linha como duas ofertas vigentes, registradas às 13:30:02.886 ET. Melhor oferta de compra: $83.3 para 200 ações. Melhor oferta de venda: $83.31 para 200 ações. O spread entre elas foi de 1¢.

As quantidades de ações representam o size at the touch — a liquidez exibida nos dois melhores preços. Uma ordem maior que esse tamanho esgota a oferta e executa o restante nos próximos preços do book. O tamanho exibido é o mínimo, não o inventário total: há frequentemente mais interesse não exibido nos dois preços ou entre eles, inclusive em dark pools.

Agora leia as linhas abaixo. Todos os 10 registros ocorreram dentro de 484.95 milissegundos do primeiro. Não há um cronograma — o SIP publica sempre que um vencedor muda, e qualquer um destes quatro eventos gera uma linha: um bid melhor, um ask melhor, uma mudança na quantidade de ações em qualquer um dos dois melhores preços, ou uma bolsa substituindo outra no topo. Para uma visão detalhada da microestrutura, veja o estudo profundo de microestrutura.

O NBBO inclui odd lots?

Na maioria das vezes, não. A cotação nacional é composta apenas por interesse de round-lot. Uma ordem com menos ações do que um round lot é um odd lot: ele pode estar no livro de uma bolsa com um preço melhor que o melhor bid nacional, ser negociado e nunca aparecer no NBBO.

O round lot não é mais fixo em 100 ações. Sob as regras de cotação alteradas pela Reg NMS da SEC, ele é dividido por preço da ação: 100 ações até $250, 40 de $250,01 a $1.000, 10 de $1.000,01 a $10.000, e uma acima disso. Os níveis são visíveis no tape — o painel utiliza o menor tamanho de bid que aparece no quote consolidado para seis nomes através das faixas.

QueryO menor tamanho exibido pelo NBBO — seis ativos em diferentes faixas de preço
O SQL exato por trás de cada número
WITH (
    SELECT max(session_date)
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
               countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS regular_bars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime(today() - 10)
          AND window_start < toDateTime(today() - 3)
        GROUP BY session_date
        HAVING regular_bars = 390
    )
) AS last_session
SELECT ticker,
       round(quantileDeterministic(0.5)(toFloat64(bid_price), toUInt64(sequence_number)), 2) AS share_price,
       min(bid_size) AS smallest_quoted_size,
       round(quantileDeterministic(0.5)(toFloat64(bid_size), toUInt64(sequence_number)), 0) AS median_bid_size
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('F', 'KO', 'NVDA', 'AAPL', 'SPY', 'AZO')
  AND sip_timestamp >= toDateTime(last_session, 'America/New_York') + INTERVAL 10 HOUR
  AND sip_timestamp < toDateTime(last_session, 'America/New_York') + INTERVAL 11 HOUR
  AND bid_price > 0
  AND bid_size > 0
GROUP BY ticker
ORDER BY share_price

Ford, cotando em torno de $13.9, nunca mostra um bid menor que 100 ações naquela hora; nem a Coca-Cola a $84.18. Apple, a $314.36, cai para 40; AutoZone, a $3030.52 por ação, desce para 10, com um bid mediano exibido de 10. O floor acompanha a faixa de preço. O interesse de odd-lot com preço melhor pode ficar dentro do spread publicado sem ser exibido, portanto, o verdadeiro melhor preço disponível às vezes é melhor do que o NBBO sugere.

Por que a cotação do seu app não é exatamente o NBBO em tempo real

A cotação que você vê no celular percorreu o seguinte caminho: motor de correspondência da bolsa → SIP → fornecedor de dados → corretora → tela. Cada registro possui dois carimbos de tempo — o da própria bolsa e o do SIP no momento da publicação — e a diferença entre eles é o passo de consolidação.

QueryTimestamp da Exchange ao SIP — o passo de consolidação, em microssegundos
O SQL exato por trás de cada número
WITH (
    SELECT max(session_date)
    FROM (
        SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
               countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS regular_bars
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND window_start >= toDateTime(today() - 10)
          AND window_start < toDateTime(today() - 3)
        GROUP BY session_date
        HAVING regular_bars = 390
    )
) AS last_session
SELECT ticker,
       round(quantileDeterministic(0.5)((toUnixTimestamp64Nano(sip_timestamp) - toUnixTimestamp64Nano(participant_timestamp)) / 1000.0, toUInt64(sequence_number)), 1) AS median_micros,
       round(quantileDeterministic(0.99)((toUnixTimestamp64Nano(sip_timestamp) - toUnixTimestamp64Nano(participant_timestamp)) / 1000.0, toUInt64(sequence_number)), 1) AS p99_micros
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'NVDA', 'AAPL', 'KO')
  AND sip_timestamp >= toDateTime(last_session, 'America/New_York')
  AND sip_timestamp < toDateTime(last_session + 1, 'America/New_York')
  AND participant_timestamp > toDateTime64('2020-01-01 00:00:00', 9)
GROUP BY ticker
ORDER BY indexOf(['SPY', 'NVDA', 'AAPL', 'KO'], ticker)

A mediana do gap no SPY foi de 229.1 microssegundos — milionésimos de segundo — e no da Apple foi de 203.4. A cauda é mais larga que o centro: o percentil 99 da Nvidia ficou em 536.9 microssegundos. O SIP não é lento em um sentido humano. Outros dois fatores são.

Primeiro, seus dados podem estar atrasados propositalmente. Feed de cotações gratuitos em apps de varejo e sites de análise costumam ter 15 minutos de atraso devido aos termos de licenciamento das bolsas; o streaming em tempo real é um serviço pago.

Segundo, empresas profissionais não esperam pelo SIP. Cada bolsa também vende um feed direto de seu próprio motor de correspondência. Uma firma com colocação (colocation) lê esse feed e calcula seu próprio melhor bid e offer antes que a versão do SIP para esse evento chegue — uma vantagem de microssegundos, decisiva para um market maker que atua nos dois lados durante todo o dia.

Com que frequência o NBBO é atualizado? Ações líquidas vs. pouco negociadas

Cada ação listada possui um NBBO, e sua taxa de atualização serve como um indicador de liquidez. A tabela apresenta a média de sessões completas recentes para quatro ativos de alto volume e duas small caps pouco negociadas — Nathan's Famous (NATH) e Seneca Foods (SENEA).

QueryAtualizações do NBBO por sessão — quatro ativos de alta liquidez vs. duas small caps de baixa liquidez
O SQL exato por trás de cada número
SELECT ticker,
       uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) AS sessions,
       round(count() / uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York')))) AS avg_updates_per_session,
       round(count() / uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) / 1e6, 3) AS avg_updates_per_session_m,
       round((count() / uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York')))) / min(count() / uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York')))) OVER (), 0) AS multiple_of_quietest
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'NVDA', 'AAPL', 'KO', 'SENEA', 'NATH')
  AND sip_timestamp >= toDateTime(today() - 10)
  AND sip_timestamp < toDateTime(today() - 3)
  AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) IN (
      SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
      FROM global_markets.delayed_stocks_minute_aggs
      WHERE ticker = 'SPY'
        AND window_start >= toDateTime(today() - 10)
        AND window_start < toDateTime(today() - 3)
      GROUP BY session_date
      HAVING countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) = 390
  )
GROUP BY ticker
ORDER BY indexOf(['SPY', 'NVDA', 'AAPL', 'KO', 'SENEA', 'NATH'], ticker)

O SPY, ETF do S&P 500, registrou uma média de 3.428 milhões de atualizações de NBBO por sessão — 2031 vezes o valor do ativo menos negociado da tabela. A Nvidia registrou uma média de 1.85 milhões, e a Apple 1.336 milhões. Em seguida, a queda brusca: a Seneca Foods apresentou 8097 atualizações em uma sessão média, e a Nathan's Famous 1688. Nenhum operador consegue ler uma tela na velocidade do SPY: o NBBO é um feed desenvolvido para softwares.

Quando o NBBO atualiza mais rápido: abertura vs. meio do dia

A taxa de atualização também segue um ritmo diário. O gráfico mostra a média de atualizações do NBBO da Apple por minuto em intervalos de meia hora (Horário do Leste); a última coluna apresenta cada intervalo como um percentual do intervalo das 9:30.

QueryAAPL — média de atualizações do NBBO por minuto por intervalo de meia hora (ET, 4h às 20h)
O SQL exato por trás de cada número
SELECT et_time,
       avg_updates_per_minute,
       round(100 * avg_updates_per_minute / maxIf(avg_updates_per_minute, et_time = '09:30') OVER (), 1) AS pct_of_opening_bucket
FROM (
    SELECT formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
           round(count() / (uniqExact(toDate(toTimeZone(sip_timestamp, 'America/New_York'))) * 30)) AS avg_updates_per_minute
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
      AND toDate(toTimeZone(sip_timestamp, 'America/New_York')) IN (
      SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session_date
      FROM global_markets.delayed_stocks_minute_aggs
      WHERE ticker = 'SPY'
        AND window_start >= toDateTime(today() - 10)
        AND window_start < toDateTime(today() - 3)
      GROUP BY session_date
      HAVING countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) = 390
  )
    GROUP BY et_time
    HAVING et_time >= '04:00' AND et_time < '20:00'
)
ORDER BY et_time

Na meia hora após o leilão de abertura, a cotação nacional da Apple atualizou 5657 vezes por minuto em média, e o intervalo das 10:00 manteve esse ritmo em 89.5% do valor inicial. O volume de dados diminui durante o meio do dia: o intervalo das 14:30 registrou 1973 atualizações por minuto, ou 34.9% do ritmo de abertura. A aproximação do fechamento às 15:30 recupera apenas parte do volume — 3345 por minuto, ou 59.1% da abertura — portanto, a maior intensidade de cotações ocorreu na primeira hora, não na última. Fora do horário regular, o fluxo de dados é quase nulo, caindo para 17 atualizações por minuto após o sino das 16:00.

O que acontece com o NBBO durante uma suspensão de negociação?

Quando uma ação apresenta volatilidade excessiva em curto intervalo, as regras de limit-up/limit-down suspendem a negociação por cinco minutos. A cotação não desaparece nem permanece ativa: ela para de ser atualizada, e o último registro antes da pausa é o que permanece na tela. A GameStop (GME) sofreu uma suspensão dessas logo após as 11:00 Eastern de 14 de maio de 2024; o painel monitora suas atualizações de cotação e negociações, minuto a minuto, durante o período.

QueryGME, 2024-05-14 — atualizações do NBBO e trades por minuto durante uma pausa LULD de cinco minutos
O SQL exato por trás de cada número
WITH spine AS (
    SELECT toStartOfMinute(toTimeZone(window_start, 'America/New_York')) AS et_min
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2024-05-14 10:57:00', 'America/New_York')
      AND window_start < toDateTime('2024-05-14 11:12:00', 'America/New_York')
),
gme_trades AS (
    SELECT toStartOfMinute(toTimeZone(window_start, 'America/New_York')) AS et_min,
           sum(transactions) AS trades
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'GME'
      AND window_start >= toDateTime('2024-05-14 10:57:00', 'America/New_York')
      AND window_start < toDateTime('2024-05-14 11:12:00', 'America/New_York')
    GROUP BY et_min
),
gme_quotes AS (
    SELECT toStartOfMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS et_min,
           count() AS nbbo_updates
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'GME'
      AND sip_timestamp >= toDateTime('2024-05-14 10:57:00', 'America/New_York')
      AND sip_timestamp < toDateTime('2024-05-14 11:12:00', 'America/New_York')
    GROUP BY et_min
)
SELECT formatDateTime(spine.et_min, '%H:%i') AS et_time,
       ifNull(gme_quotes.nbbo_updates, 0) AS nbbo_updates,
       toUInt64(ifNull(gme_trades.trades, 0)) AS trades
FROM spine
LEFT JOIN gme_quotes ON gme_quotes.et_min = spine.et_min
LEFT JOIN gme_trades ON gme_trades.et_min = spine.et_min
ORDER BY spine.et_min

No minuto anterior à suspensão, 11:00, a cotação consolidada da GameStop atualizou 4511 vezes contra 12419 trades. Em seguida, ambos os volumes caem drasticamente: 0 registros de cotação a 11:02 e 0 a 11:03, com 0 trades correspondentes — uma cotação que parou de se mover em uma ação que parou de negociar. As cotações retornam às 11:06, o minuto de reabertura, com 4155 atualizações e 14007 trades, o minuto com maior volume de negociação na tabela. O último NBBO de uma ação suspensa é um registro estático, não um preço negociável; a sessão da GameStop de janeiro de 2021 mostra o impacto de uma sequência dessas pausas no tape.

Por que sua corretora deve executar no NBBO ou melhor

O NBBO é um benchmark regulatório. A Regulation NMS — o conjunto de regras de estrutura de mercado da SEC, adotado em 2005 — contém uma regra de proteção de ordens, a Rule 611: uma plataforma não pode executar a um preço pior do que uma cotação protegida exibida em outra bolsa. As corretoras também devem aos clientes a melhor execução (best execution), medida em relação ao NBBO: uma ordem de compra a mercado deve ser executada no melhor ask nacional ou inferior; uma ordem de venda a mercado, no melhor bid nacional ou superior.

A maioria dos investores de varejo não percebe isto: sua ordem a mercado geralmente nunca chega a uma bolsa. A maior parte do fluxo de varejo executável é direcionada para wholesalers — market makers fora de bolsa que pagam pelo direito de executá-lo — e é executada internamente, sendo registrada em um sistema de reporte fora de bolsa. O NBBO ainda os regula: o wholesaler deve igualar ou superar a cotação nacional no momento da execução, e compete pelo fluxo ao superá-lo — executando uma fração de centavo dentro do spread, o que é conhecido como price improvement. O NBBO é o preço de referência, não a plataforma; o tipo de ordem que você escolhe decide se você cruzará o spread ou não.

FAQ

O NBBO inclui lotes ímpares (odd lots)?

Não. A cotação nacional é composta apenas por cotações de lotes redondos (round-lot). A Reg NMS define o lote redondo por preço — 100 ações abaixo de $250, até uma ação acima de $10.000. O menor bid que o tape mostrou para Ford acima foi de 100 ações, contra 10 para AutoZone, cujas ações custam muito mais. Lotes ímpares com preços melhores ficam dentro do spread publicado, mas não são exibidos.

Por que a cotação no meu app da corretora é diferente do NBBO em tempo real?

Existem dois motivos, e nenhum deles é o SIP. Feeds gratuitos para varejo costumam ter atraso de 15 minutos devido às regras de licenciamento das bolsas, a menos que você pague pelo tempo real. Além disso, os dados consolidados são um snapshot publicado: o passo de consolidação mediu 229.1 microssegundos na mediana do SPY, enquanto firmas com feeds diretos da bolsa veem o evento mais cedo.

O que acontece com o NBBO quando uma ação é interrompida (halt)?

Ele congela. Durante a pausa de five-minute limit-up/limit-down da GameStop mencionada acima, o tape registrou 0 atualizações de cotação e 11:03 e 0 negociações. A última cotação permanece na tela, mas não é negociável; um leilão de reabertura define a próxima.

O NBBO existe no after-hours?

Sim. As cotações consolidadas fluem das 4:00 às 20:00 ET, portanto, existe uma cotação nacional durante o premarket e after-hours trading — a uma fração do ritmo diurno: Apple teve 65 atualizações em um minuto no último intervalo do premarket contra 5657 após a abertura.

Notas de dados: janelas e filtros

Janelas móveis terminam três dias antes da geração (há um pequeno atraso de ingestão na borda do feed) e contam apenas sessões completas — dias nos quais o SPY registra todas as 390 barras de um minuto do horário regular. O painel da Coca-Cola exclui registros de um lado só (one-sided) ou cruzados (crossed); os painéis de contagem consideram cada registro como está (locked and crossed markets cobre os excluídos). O painel da GameStop é fixado em uma data específica, usando as barras de um minuto do SPY como base temporal, portanto, minutos com pausa aparecem como zeros.


Cada painel é entregue com o SQL que o produziu — abra um, substitua pelo seu próprio ticker e conte suas atualizações de NBBO no terminal Strasmore.