Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Diferença entre dados de book MBO e MBP no trading

Entenda as diferenças técnicas entre os fluxos de dados MBO e MBP. Analisamos como o market by order e o market by price impactam o custo operacional e a latência do seu sistema.

Dados de book de ofertas MBO versus MBP representam uma distinção significativa escondida sob um rótulo simples. Dois fornecedores podem vender algo chamado "Level 2": MBP (market by price) envia o volume total disponível em cada nível de preço, enquanto MBO (market by order) envia cada ordem individual como um evento próprio com seu ID exclusivo. Um é um resumo do book; o outro é o registro contábil a partir do qual o book é construído, exigindo ordens de magnitude a mais de tráfego para transmissão.

O que os dados de book de ofertas MBP e MBO contêm na prática

MBP, ou market by price, é a profundidade agregada. Cada atualização indica um lado, um nível de preço, o volume total exibido disponível ali e, por vezes, o número de ordens por trás desse nível. Um produto vendido como MBP-10 fornece os dez melhores níveis de preço em cada lado, o ladder em uma plataforma de negociação e a escada em cada gráfico de profundidade.

MBO, ou market by order, é um fluxo de eventos. Cada mensagem identifica uma ordem: seu ID, lado, preço, volume exibido e o que acabou de acontecer com ela. Nada é pré-agregado. Se quarenta ordens estão no mesmo preço, quarenta mensagens separadas as colocaram lá, e você mantém todas as quarenta na memória para saber o total daquele nível.

Nosso guia de dados de mercado Level 1 vs Level 2 cobre o que os rótulos do varejo significam em uma corretora. MBO e MBP são os nomes precisos para o que está dentro da caixa quando um fornecedor diz "Level 2", e o nome do esquema é o que vale a pena questionar.

As ações de mensagem que um feed MBO carrega

Um feed MBO é uma taxonomia de ações aplicadas a IDs de ordens. Quatro delas compõem a maior parte do tráfego:

  • Add (Adicionar): uma nova ordem entra no book em um preço com um novo ID.
  • Modify (Modificar): um ID existente altera preço ou volume. Aumentar o volume ou mover o preço envia a ordem para o final da fila no novo nível; reduzir o volume normalmente mantém sua posição.
  • Cancel (Cancelar): um ID deixa o book, no todo ou em parte.
  • Trade ou fill (Negociar ou executar): uma ordem agressiva executa contra um ou mais IDs passivos, reduzindo ou removendo-os.

O MBP não carrega nada desse vocabulário. Uma atualização MBP é uma declaração sobre um nível: este preço agora possui este volume. Se o volume saiu por um cancelamento ou por uma execução, a atualização parece idêntica. O painel abaixo mostra esse limite no book mais estreito possível, o topo do book consolidado, um nível de preço por lado e MBP-1 nesta nomenclatura.

QueryAlterações no top-of-book entre mensagens consecutivas (AAPL, 10:00 às 10:30 ET, 16 de junho de 2026)
O SQL exato por trás de cada número
WITH
    ordered AS
    (
        SELECT
            row_number() OVER (ORDER BY sip_timestamp, sequence_number) AS msg_index,
            bid_price,
            bid_size,
            lagInFrame(bid_price) OVER (ORDER BY sip_timestamp, sequence_number) AS prev_bid_price,
            lagInFrame(bid_size)  OVER (ORDER BY sip_timestamp, sequence_number) AS prev_bid_size
        FROM global_markets.cache_stocks_quotes
        WHERE ticker = 'AAPL'
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
          AND bid_price > 0
    ),
    classified AS
    (
        SELECT multiIf(
            bid_price != prev_bid_price, 'best bid price changed',
            bid_size  >  prev_bid_size,  'size joined at the best bid',
            bid_size  <  prev_bid_size,  'size left the best bid',
            'bid untouched, ask side updated') AS message_type
        FROM ordered
        WHERE msg_index > 1
    )
SELECT
    message_type,
    count()                                        AS message_count,
    round(100 * count() / sum(count()) OVER (), 1) AS share_pct
FROM classified
GROUP BY message_type
ORDER BY indexOf(['best bid price changed', 'size joined at the best bid', 'size left the best bid', 'bid untouched, ask side updated'], message_type)
Run this yourself

Durante aquela meia hora, 17.6% das mensagens moveram a melhor oferta de compra para um preço diferente, 17.4% adicionaram volume em uma oferta inalterada, 12% removeram volume em uma oferta inalterada e 53% deixaram a oferta intacta enquanto o outro lado se movia. Cada grupo é uma declaração líquida sobre um nível de preço. Nenhum nomeia uma ordem, e nenhum cálculo recupera o ID que está faltando.

O que cada esquema pode e não pode responder

O MBP-10 responde a perguntas formuladas como "quanto volume havia": a forma do ladder, o desequilíbrio do book, a liquidez próxima ao preço médio, o próprio gráfico de profundidade. Níveis agregados são tudo o que qualquer um desses precisa.

O MBO responde a perguntas formuladas como "o que aconteceu com esta ordem": quanto volume estava à frente da sua quando você entrou, quanto tempo as ordens sobrevivem antes de serem canceladas e a probabilidade de uma ordem passiva no toque negociar antes que o preço se mova. Essas quantidades não existem de forma agregada, e somar ordens em um total de nível destrói a sequência que as definia.

A posição na fila é o exemplo mais claro, e ela só tem significado sob prioridade preço-tempo versus matching pro-rata, onde a ordem de chegada decide quem negocia primeiro. O que torna isso importante é o tamanho do print: um nível é preenchido por muitas pequenas execuções, não por uma grande.

QueryMix de tamanho de trades no mesmo período (AAPL, 10:00 às 10:30 ET, 16 de junho de 2026)
O SQL exato por trás de cada número
SELECT
    multiIf(size < 100,  '1 to 99 shares',
            size < 200,  '100 to 199 shares',
            size < 500,  '200 to 499 shares',
            size < 1000, '500 to 999 shares',
            '1000 or more shares')                 AS trade_size_bucket,
    count()                                        AS trade_count,
    round(100 * count() / sum(count()) OVER (), 1) AS share_pct,
    round(avg(size))                               AS avg_shares
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-16 14:00:00'
  AND sip_timestamp <  '2026-06-16 14:30:00'
  AND size > 0
GROUP BY trade_size_bucket
ORDER BY min(size)
Run this yourself

Prints abaixo de 100 ações, um odd lot, compuseram 92.3% das negociações naquela janela, e o maior bucket presente, 1000 or more shares, compôs 0.1%. Envie prints desse tamanho para um nível exibindo 4.000 ações e uma ordem que entrou na fila por último pode passar por dezenas de execuções sem negociar. O MBP mostra os 4.000. O MBO mostra a fila.

Nenhum dos esquemas mostra volume oculto. Uma ordem iceberg exibe uma pequena ponta e é atualizada com um novo ID cada vez que a ponta é preenchida, portanto, a reserva nunca aparece em nenhuma mensagem.

Reconstruir um book a partir de MBO é uma máquina de estados

Um feed MBP entrega a resposta pronta. Um feed MBO entrega os inputs e espera que você seja preciso:

  1. Comece a partir de um snapshot ou de um book vazio mais a mensagem de limpeza da venue.
  2. Aplique cada add, modify, cancel e fill em ordem sequencial estrita, indexada pelo ID da ordem.
  3. Mantenha um segundo índice por nível de preço, já que é isso que sua estratégia lê.
  4. Monitore os números de sequência e resincronize a partir de um novo snapshot sempre que um faltar.

O modo de falha é silencioso. Se você perder um cancelamento, uma ordem fantasma permanecerá no seu book pelo resto da sessão, inflando aquele nível, sem que nenhuma exceção seja gerada. O MBP degrada de forma muito mais suave: cada atualização reafirma o total de um nível, portanto, um valor corrompido é sobrescrito em poucas mensagens.

O MBO também vive apenas em feeds diretos das venues, um book por bolsa, o que significa executar e fundir vários deles. O consolidated tape é um resumo por construção, uma divisão coberta em SIP versus feeds diretos de bolsa.

O custo do detalhe extra em largura de banda

A contagem de mensagens é a forma honesta de precificar a diferença. O painel abaixo conta as mensagens do topo do book consolidado em relação aos prints reais durante a mesma meia hora para cinco nomes conhecidos.

QueryRelação entre mensagens de top-of-book e prints, 10:00 às 10:30 ET, 16 de junho de 2026
O SQL exato por trás de cada número
WITH
    quote_load AS
    (
        SELECT ticker, count() AS quote_messages
        FROM global_markets.cache_stocks_quotes
        WHERE ticker IN ('SPY', 'AAPL', 'NVDA', 'MSFT', 'KO')
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
        GROUP BY ticker
    ),
    trade_load AS
    (
        SELECT ticker, count() AS trades
        FROM global_markets.stocks_trades
        WHERE ticker IN ('SPY', 'AAPL', 'NVDA', 'MSFT', 'KO')
          AND sip_timestamp >= '2026-06-16 14:00:00'
          AND sip_timestamp <  '2026-06-16 14:30:00'
        GROUP BY ticker
    )
SELECT
    q.ticker                              AS ticker,
    round(q.quote_messages / 1000, 1)     AS quote_messages_thousands,
    round(t.trades / 1000, 2)             AS trades_thousands,
    round(q.quote_messages / t.trades, 1) AS quotes_per_trade_ratio
FROM quote_load AS q
INNER JOIN trade_load AS t ON t.ticker = q.ticker
ORDER BY quotes_per_trade_ratio DESC
Run this yourself

SPY carregou o tráfego de cotações mais pesado por print, 9.6 mensagens para cada negociação e 510 mil mensagens em trinta minutos. O spread entre os cinco nomes é amplo: na parte inferior do painel, MSFT executou 0.7 mensagens de cotação por print, menos de uma mensagem para cada negociação. Lembre-se do que essa coluna conta: um nível de preço por lado, em um feed que já colapsou todas as venues em uma única melhor oferta de compra e venda. Um produto de profundidade de dez níveis multiplica isso, e um feed por ordem multiplica novamente, já que cada ordem atrás de cada nível em cada venue gera seu próprio add, seu próprio modify e seu próprio cancel, independentemente de negociar ou não. A mesma aritmética aparece em maior escala em o tamanho do feed de cotações de opções.

Qual feed de book de ofertas uma estratégia precisa?

A maior parte do trabalho roda em MBP-10. Gráficos de profundidade, indicadores de desequilíbrio, medição de liquidez por preço, modelos de custo de execução e quase todas as questões de pesquisa sobre quanto volume estava posicionado onde podem ser respondidas a partir de níveis agregados, a uma fração do volume de mensagens.

O MBO é o requisito quando a resposta depende de uma ordem específica: posição na fila, tempo de vida da ordem, comportamento de cancelamento, probabilidade de preenchimento passivo no toque. Uma estratégia que depende de estar 200 ou 20.000 ações dentro da fila não pode ser construída com dados agregados, e paga por isso em taxas de licenciamento, largura de banda, armazenamento e na engenharia para manter um book reconstruído correto durante todo o dia.

Como estes painéis foram construídos
  • O feed por trás de cada painel é o topo do book consolidado, um nível de preço por lado, mais a fita de negociações. Não é um feed de profundidade nem um feed por ordem, portanto, estes painéis ilustram o argumento do volume de mensagens em vez de amostrar o próprio MBO.
  • As janelas estão fixadas em uma data passada, das 10:00 às 10:30 ET de 16 de junho de 2026, armazenadas como 14:00 às 14:30 UTC. Janelas fixas mantêm os números estáveis entre regenerações.
  • O painel de classificação rotula cada mensagem em relação à anterior na sequência. Ele não consegue separar um cancelamento de uma execução, a limitação exata que este post descreve.

FAQ

Qual é a diferença entre dados de mercado MBO e MBP?

MBP, ou market by price, agrega o volume exibido em cada nível de preço e envia uma atualização por nível. MBO, ou market by order, envia cada ordem individual com seu próprio ID, juntamente com os eventos de add, modify, cancel e fill que ocorrem com ela.

Dados de Level 2 são o mesmo que dados MBO?

Geralmente não. "Level 2" em uma corretora de varejo quase sempre significa profundidade agregada, ou seja, MBP com cinco a vinte níveis de preço. Alguns fornecedores comercializam um feed por ordem sob o mesmo nome de nível, portanto, o nome do esquema, e não o nome do nível, define o que chega na conexão.

Quanto maior é um feed MBO do que um feed MBP?

Ordens de magnitude, variando conforme a venue e o ativo. Apenas o topo do book consolidado rodou a 9.6 mensagens por print para o nome mais movimentado no painel acima. Um feed por ordem adiciona cada add, modify e cancel atrás de cada nível em cada venue, incluindo a grande maioria das ordens que nunca negociam.

É possível reconstruir um book MBP a partir de dados MBO?

Sim, e esse é o pipeline normal: aplique cada evento de ordem a um book indexado pelo ID da ordem e, em seguida, publique os totais dos níveis. O inverso é impossível: uma vez que as ordens são somadas em um total de nível, os IDs individuais e sua ordem de chegada são perdidos.


Cada painel aqui é enviado com o SQL exato por baixo dele. Para contar as mesmas mensagens em um ativo ou sessão diferente, faça a pergunta em inglês simples no terminal Strasmore.