Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Verschil tussen MBO en MBP orderboekdata uitgelegd

Begrijp het onderscheid tussen MBO en MBP orderboekdata. Wij vergelijken message-by-order event streams met geaggregeerde depth per price level, de toepassingen en de kosten.

MBO- versus MBP-orderboekdata is een groot onderscheid dat schuilgaat achter een klein label. Twee leveranciers kunnen u beiden iets verkopen onder de noemer "Level 2": MBP (market by price) verstuurt de totale omvang die op elk prijsniveau rust, terwijl MBO (market by order) elke individuele order als een eigen event met een eigen ID verstuurt. Het een is een samenvatting van het boek; het ander is het grootboek waaruit het boek is opgebouwd, en het vereist vele malen meer bandbreedte om te verwerken.

Wat MBP- en MBO-orderboekdata daadwerkelijk bevatten

MBP, market by price, is geaggregeerde diepte. Elke update benoemt een zijde, een prijsniveau, de totale getoonde omvang die daar rust, en soms het aantal orders dat daarachter zit. Een product dat wordt verkocht als MBP-10 geeft u de tien beste prijsniveaus aan elke zijde; de ladder in een handelsplatform en de trap in elke dieptegrafiek.

MBO, market by order, is een event-stream. Elk bericht benoemt één order: het ID, de zijde, de prijs, de getoonde omvang en wat er zojuist mee is gebeurd. Niets is vooraf geaggregeerd. Als er veertig orders op dezelfde prijs rusten, plaatsen veertig afzonderlijke berichten deze daar, en u houdt alle veertig in het geheugen om te weten wat het totaal van dat niveau is.

Onze gids voor Level 1- versus Level 2-marktdata behandelt wat de retail-labels betekenen bij een broker. MBO en MBP zijn de precieze namen voor wat er in de doos zit wanneer een leverancier "Level 2" zegt, en de schemanaam is degene waar u naar moet vragen.

De berichtacties die een MBO-feed bevat

Een MBO-feed is een taxonomie van acties toegepast op order-ID's. Vier daarvan beslaan het grootste deel van het verkeer:

  • Add: een nieuwe order komt in het boek op een prijs met een nieuw ID.
  • Modify: een bestaand ID wijzigt van prijs of omvang. Het verhogen van de omvang of het verplaatsen van de prijs stuurt de order naar achteren in de wachtrij op het nieuwe niveau; het verkleinen van de omvang behoudt normaal gesproken de plek.
  • Cancel: een ID verlaat het boek, geheel of gedeeltelijk.
  • Trade of fill: een agressieve order voert een transactie uit tegen een of meer rustende ID's, waardoor deze kleiner worden of verdwijnen.

MBP bevat niets van die woordenschat. Een MBP-update is een verklaring over een niveau: deze prijs bevat nu deze omvang. Of de omvang nu verdween door een cancel of door een fill, de update ziet er identiek uit. Het onderstaande paneel toont die limiet op het dunst mogelijke boek, de geconsolideerde top of book, één prijsniveau per zijde en MBP-1 in deze naamgeving.

QueryWijzigingen in top-of-book berichten (AAPL, 10:00 tot 10:30 uur ET, 16 juni 2026)
De exacte SQL achter elk getal
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

Gedurende dat half uur verplaatste 17.6% van de berichten de best bid naar een andere prijs, voegde 17.4% omvang toe aan een ongewijzigde bid, verwijderde 12% omvang aan een ongewijzigde bid, en liet 53% de bid ongemoeid terwijl de andere zijde bewoog. Elke groep is een netto verklaring over een prijsniveau. Geen enkele benoemt een order, en geen enkele berekening kan het ontbrekende ID herstellen.

Wat elk schema wel en niet kan beantwoorden

MBP-10 beantwoordt vragen die geformuleerd zijn als "hoeveel omvang was daar": de vorm van de ladder, boek-imbalans, liquiditeit die nabij de mid rust, de dieptegrafiek zelf. Geaggregeerde niveaus zijn alles wat daarvoor nodig is.

MBO beantwoordt vragen die geformuleerd zijn als "wat is er met deze order gebeurd": hoeveel omvang zat er voor u toen u toetrad, hoe lang overleven orders voordat ze worden geannuleerd, en de waarschijnlijkheid dat een passieve order op de touch wordt uitgevoerd voordat de prijs weg beweegt. Die hoeveelheden bestaan niet in geaggregeerde vorm, en het sommeren van orders tot een totaal per niveau vernietigt de volgorde die ze definieerde.

Wachtrijpositie is het scherpste voorbeeld, en het heeft alleen betekenis onder price-time priority versus pro-rata matching, waarbij de volgorde van binnenkomst bepaalt wie als eerste handelt. Wat het relevant maakt is de print-omvang: een niveau wordt gevuld door vele kleine uitvoeringen, niet door één grote.

QueryTrade size mix in dezelfde periode (AAPL, 10:00 tot 10:30 uur ET, 16 juni 2026)
De exacte SQL achter elk getal
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 onder de 100 aandelen, een odd lot, vormden 92.3% van de transacties in dat venster, en de grootste aanwezige bucket, 1000 or more shares, vormde 0.1%. Stuur prints van die omvang naar een niveau dat 4.000 aandelen toont en een order die als laatste in de wachtrij kwam, kan tientallen uitvoeringen ondergaan zonder zelf te handelen. MBP toont u de 4.000. MBO toont u de rij.

Geen van beide schema's toont verborgen omvang. Een iceberg order toont een klein topje en ververst met een nieuw ID telkens wanneer het topje wordt gevuld, dus de reserve verschijnt nooit in enig bericht.

Het herbouwen van een boek vanuit MBO is een state machine

Een MBP-feed geeft u het antwoord. Een MBO-feed geeft u de inputs en verwacht dat u exact correct bent:

  1. Begin vanaf een snapshot, of vanaf een leeg boek plus het clear-bericht van de venue.
  2. Pas elke add, modify, cancel en fill toe in strikte volgorde, op basis van order-ID.
  3. Onderhoud een tweede index per prijsniveau, aangezien dat is wat uw strategie leest.
  4. Houd de volgordenummers in de gaten en synchroniseer opnieuw vanaf een verse snapshot wanneer er een ontbreekt.

De foutmodus is geruisloos. Laat één cancel vallen en een spookorder blijft de rest van de sessie in uw boek staan, wat dat niveau opblaast, zonder dat er ergens een uitzondering wordt gegenereerd. MBP degradeert veel geleidelijker: elke update herbevestigt het totaal van een niveau, dus een corrupte waarde wordt binnen enkele berichten overschreven.

MBO leeft bovendien alleen op directe venue-feeds, één boek per beurs, wat betekent dat u er meerdere moet draaien en samenvoegen. De geconsolideerde tape is een samenvatting door constructie, een splitsing die wordt behandeld in SIP versus direct exchange feeds.

Wat het extra detail kost aan bandbreedte

Berichtaantallen zijn de eerlijke manier om het verschil te prijzen. Het onderstaande paneel telt geconsolideerde top-of-book-berichten tegenover werkelijke prints over hetzelfde vastgelegde half uur voor vijf bekende namen.

QueryTop-of-book berichten versus prints, 10:00 tot 10:30 uur ET, 16 juni 2026
De exacte SQL achter elk getal
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 droeg het zwaarste quote-verkeer per print, 9.6 berichten voor elke transactie en 510 duizend berichten in dertig minuten. De spreiding over de vijf namen is groot: onderaan het paneel draaide MSFT 0.7 quote-berichten per print, minder dan één bericht voor elke transactie. Onthoud wat die kolom telt: één prijsniveau per zijde, op een feed die al elke venue heeft samengevoegd tot één best bid en offer. Een product met tien diepteniveaus vermenigvuldigt dit, en een per-order-feed vermenigvuldigt het nogmaals, aangezien elke order achter elk niveau op elke venue zijn eigen add, zijn eigen modifies en zijn eigen cancel genereert, ongeacht of deze ooit wordt uitgevoerd. Dezelfde rekenkunde komt op grotere schaal naar voren in de omvang van de optie-quote-feed.

Welke orderboek-feed heeft een strategie nodig?

Het meeste werk draait op MBP-10. Dieptegrafieken, imbalans-kenmerken, meting van liquiditeit-op-prijs, modellen voor uitvoeringskosten en bijna elke onderzoeksvraag over hoeveel omvang waar rustte, zijn beantwoordbaar vanuit geaggregeerde niveaus, tegen een fractie van het berichtvolume.

MBO is de vereiste wanneer het antwoord afhangt van een specifieke order: wachtrijpositie, order-levensduur, cancel-gedrag, passieve fill-waarschijnlijkheid op de touch. Een strategie die staat of valt bij de vraag of deze 200 aandelen of 20.000 aandelen diep in de rij staat, kan daar niet komen vanuit geaggregeerde data, en betaalt daarvoor in licentiekosten, bandbreedte, opslag en de engineering om een gereconstrueerd boek de hele dag correct te houden.

Hoe deze panelen zijn gebouwd
  • De feed achter elk paneel is de geconsolideerde top of book, één prijsniveau per zijde, plus de trade tape. Het is geen diepte-feed en geen per-order-feed, dus deze panelen illustreren het argument van berichtvolume in plaats van MBO zelf te samplen.
  • Vensters zijn vastgezet op een vaste datum in het verleden, 10:00 tot 10:30 uur ET op 16 juni 2026, opgeslagen als 14:00 tot 14:30 uur UTC. Vastgezette vensters houden de cijfers stabiel bij hergeneratie.
  • Het classificatiepaneel labelt elk bericht ten opzichte van het vorige in de reeks. Het kan een cancel niet scheiden van een fill, de exacte beperking die dit artikel beschrijft.

FAQ

Wat is het verschil tussen MBO- en MBP-marktdata?

MBP, market by price, aggregeert getoonde omvang op elk prijsniveau en verstuurt één update per niveau. MBO, market by order, verstuurt elke individuele order met een eigen ID, samen met de add-, modify-, cancel- en fill-events die ermee gebeuren.

Is Level 2-data hetzelfde als MBO-data?

Meestal niet. "Level 2" bij een retail-broker betekent bijna altijd geaggregeerde diepte, dus MBP met vijf tot twintig prijsniveaus. Een paar leveranciers verkopen een per-order-feed onder dezelfde naam, dus de schemanaam, niet de naam van de tier, bepaalt wat er binnenkomt.

Hoeveel groter is een MBO-feed dan een MBP-feed?

Vele malen groter, variërend per venue en per symbool. De geconsolideerde top of book alleen al draaide op 9.6 berichten per print voor de drukste naam in het bovenstaande paneel. Een per-order-feed voegt elke add, modify en cancel toe achter elk niveau op elke venue, inclusief het grote merendeel van de orders die nooit worden uitgevoerd.

Kun je een MBP-boek herbouwen vanuit MBO-data?

Ja, en dat is de normale pipeline: pas elk order-event toe op een boek dat is gesorteerd op order-ID, en publiceer vervolgens de totalen per niveau. Het omgekeerde is onmogelijk: zodra orders zijn gesommeerd tot een totaal per niveau, zijn de individuele ID's en hun volgorde van binnenkomst verdwenen.


Elk paneel hier wordt geleverd met de exacte SQL eronder. Om dezelfde berichten op een ander symbool of sessie te tellen, stelt u de vraag in gewoon Engels op de Strasmore-terminal.