Strasmore Research
Leren Matt ConnorDoor Matt Connor · Bijgewerkt 2026-07-24 · data as of July 24, 2026 · refreshed weekly

Wat is de NBBO National Best Bid and Offer

De NBBO is de geconsolideerde quote waar uw broker aan moet voldoen. Ontdek hoe deze de hoogste bid en laagste ask over alle beurzen samenstelt.

De NBBO, de national best bid and offer, is de geconsolideerde quote voor een Amerikaanse aandeel: de hoogste prijs die een koper biedt en de laagste prijs die een verkoper vraagt, over alle beurzen tegelijkertijd. Het is de quote die uw app toont en de benchmark waaraan uw broker moet voldoen of die hij moet verbeteren bij uw order. Elk onderstaand getal is afkomstig uit echte quote-gegevens; de query is bijgevoegd.

Wat is de NBBO? Een eenvoudige definitie

Een Amerikaans aandeel wordt niet op slechts één plek verhandeld. NYSE, Nasdaq en meer dan een dozijn andere beurzen beheren elk een orderboek voor dezelfde ticker, elk met een eigen beste bid en ask. De NBBO voegt deze gegevens samen: de hoogste bid waar dan ook, de laagste ask waar dan ook, direct naast de beschikbare aandelen per partij. Deze samenvoeging wordt uitgevoerd door de securities information processors, oftewel SIPs — marktutiliteiten die door de beurzen gezamenlijk worden beheerd.

Twee details zijn van belang. De bid en de ask kunnen tegelijkertijd op twee verschillende beurzen staan. Daarnaast is een prijsverandering niet vereist voor een update: een wijziging in de grootte tegen dezelfde beste prijs genereert ook een nieuwe registratie. Handelaren noemen de twee beste prijzen the touch; het verschil tussen deze prijzen is de bid-ask spread.

Hoe een NBBO-quote te lezen: prijzen, sizes en tempo

Hieronder staan tien opeenvolgende NBBO-records voor Coca-Cola (KO) vanaf 13:30 uur Eastern Time tijdens een recente volledige sessie — de nationale quote zoals deze daadwerkelijk binnenkomt.

QueryKO — tien opeenvolgende NBBO updates vanaf 13:30 ET tijdens een recente sessie
De exacte SQL achter elk getal
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

Lees de eerste rij als twee staande biedingen, genoteerd om 13:30:02.886 ET. Beste koper: $83.3 voor 200 shares. Beste verkoper: $83.31 voor 200 shares. De spread tussen beide bedroeg 1¢.

De aantallen shares zijn de size at the touch — de getoonde liquiditeit op de twee beste prijzen. Een order die groter is dan die size verbruikt de beschikbare voorraad en vult de rest aan tegen de volgende prijzen in het orderboek. De getoonde size is een ondergrens en geen volledige inventaris: er is vaak meer interesse niet-getoond tegen of tussen de twee prijzen, inclusief in dark pools.

Lees nu de rijen naar beneden. Alle 10 records kwamen binnen 484.95 milliseconden van de eerste binnen. Er is geen vast schema — de SIP publiceert zodra een winnaar verandert, en een van de vier gebeurtenissen genereert een rij: een betere bid, een betere ask, een wijziging in het aantal shares tegen een van de twee beste prijzen, of een beurs die een andere beurs vervangt op de top. Zie de microstructure deep-dive voor een overzicht van de volledige sessie.

Bevat de NBBO odd lots?

Meestal niet. De nationale quote is uitsluitend gebaseerd op round-lot orders. Een order voor minder aandelen dan een round lot is een odd lot: deze kan op een orderboek van een beurs tegen een betere prijs staan dan de national best bid, daar verhandeld worden, en nooit verschijnen in de NBBO.

De round lot bestaat niet langer uit een vast aantal van honderd aandelen. Onder de gewijzigde Reg NMS-regels van de SEC is dit gestaffeld op basis van de aandelenkoers: honderd aandelen tot $250, veertig van $250,01 tot $1.000, tien van $1.000,01 tot $10.000, en één boven die grens. De staffels zijn zichtbaar in de tape — het paneel neemt de kleinste bid size die ooit verschijnt in de geconsolideerde quote voor zes namen binnen de banden.

QueryDe kleinste NBBO-grootte — zes namen over de prijsniveaus
De exacte SQL achter elk getal
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, met een quote rond de $13.9, toont in dat uur nooit een bid kleiner dan 100 aandelen; dat geldt ook voor Coca-Cola bij $84.18. Apple, bij $314.36, daalt naar 40; AutoZone, bij $3030.52 per aandeel, gaat omlaag naar 10, met een weergegeven mediane bid van 10. De vloer volgt de prijsstaffel. Beter geprijsde odd-lot orders kunnen binnen de gepubliceerde spread staan zonder te worden weergegeven, waardoor de werkelijke beste beschikbare prijs soms gunstiger is dan de NBBO suggereert.

Waarom de quote in uw app niet exact de live NBBO is

De quote die u op een telefoon ziet, heeft een traject afgelegd: exchange matching engine → SIP → data vendor → broker → scherm. Elk record bevat twee tijdstempels — die van de exchange zelf en die van de SIP bij publicatie — en het verschil tussen deze twee is de consolidatiestap.

QueryExchange stamp naar SIP stamp — de consolidatiestap, in microseconden
De exacte SQL achter elk getal
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)

De mediane gap op SPY bedroeg 229.1 microseconden — miljoenste delen van een seconde — en die van Apple was 203.4. De tail is dikker dan het midden: het 99ste percentiel van Nvidia kwam uit op 536.9 microseconden. De SIP is niet traag in menselijke zin. Twee andere factoren zijn dat wel.

Ten eerste kan uw data opzettelijk vertraagd zijn. Gratis quote feeds in retail-apps en grafiekwebsites zijn vaak vijftien minuten vertraagd volgens de licentievoorwaarden van de exchange; real-time streaming is een betaalde dienst.

Ten tweede wachten professionele firma's niet op de SIP. Elke exchange verkoopt ook een directe feed rechtstreeks vanuit de eigen matching engine. Een colocated firma leest deze feed en berekent de eigen best bid en offer voordat de versie van de SIP voor die gebeurtenis arriveert — een voordeel van microseconden, wat doorslaggevend is voor een market maker die de hele dag beide zijden quote.

Hoe vaak wordt de NBBO bijgewerkt? Liquide versus illiquide aandelen

Elk beursgenoteerd aandeel heeft een NBBO, en de bijwerkfrequentie dient als een indicator voor de liquiditeit. De tabel toont het gemiddelde van recente volledige handelsdagen voor vier veelverhandelde namen en twee illiquide small caps — Nathan's Famous (NATH) en Seneca Foods (SENEA).

QueryNBBO updates per sessie — vier liquide namen vs. twee illiquide small caps
De exacte SQL achter elk getal
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)

SPY, de S&P 500 ETF, had gemiddeld 3.428 miljoen NBBO updates per sessie — 2031 keer zoveel als de minst actieve naam in de tabel. Nvidia had gemiddeld 1.85 miljoen, Apple 1.336 miljoen. Daarna volgt een scherpe daling: Seneca Foods registreerde 8097 updates in een gemiddelde sessie, Nathan's Famous 1688. Geen mens kan een scherm lezen met de snelheid van SPY: de NBBO is een feed die is ontwikkeld voor software.

Wanneer de NBBO het snelst wordt bijgewerkt: de opening versus het midden van de dag

De updatefrequentie volgt een dagelijks ritme. De grafiek toont het gemiddelde aantal NBBO-updates per minuut voor Apple, ingedeeld in blokken van een half uur (Eastern Time); de laatste kolom geeft elk blok weer als een percentage van het blok van 9:30.

QueryAAPL — gemiddelde NBBO updates per minuut per halfuur (ET, 4:00 tot 20:00)
De exacte SQL achter elk getal
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

In het half uur na de opening auction werd de nationale quote van Apple gemiddeld 5657 keer per minuut bijgewerkt, en het blok van 10:00 hield dit tempo aan op 89.5% daarvan. De tape wordt vervolgens minder actief gedurende de dag: het blok van 2:30 had 1973 updates per minuut, wat 34.9% van het tempo bij de opening is. De periode van 3:30 tot de sluiting herstelt slechts gedeeltelijk: 3345 per minuut, wat 59.1% van de opening is. De hoogste quotering vond dus plaats in het eerste uur, niet in het laatste uur. Buiten de reguliere handelsuren is de tape nagenoeg stil, met slechts 17 updates per minuut na de klok van 16:00.

Wat gebeurt er met de NBBO tijdens een handelsstop?

Wanneer een aandeel te snel en te sterk beweegt, zorgt de limit-up/limit-down regel voor een pauze van vijf minuten. De quote verdwijnt niet en blijft ook niet live: de updates stoppen en het laatste record vóór de pauze blijft op het scherm staan. GameStop (GME) activeerde zo'n pauze kort na 11:00 uur Eastern Time op 14 mei 2024; het paneel volgt de quote-updates en trades minuut voor minuut gedurende deze periode.

QueryGME, 2024-05-14 — NBBO updates en trades per minuut tijdens een vijfminuten LULD pause
De exacte SQL achter elk getal
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

In de minuut vóór de pauze, 11:00, werd de geconsolideerde quote van GameStop 4511 keer bijgewerkt tegenover 12419 trades. Daarna vallen beide kolommen weg: 0 quote records bij 11:02 en 0 bij 11:03, met 0 trades — een quote die niet meer beweegt in een aandeel dat niet meer verhandeld wordt. De quoting keert terug om 11:06, de minuut van de heropening, met 4155 updates en 14007 trades, de drukste handelsminuut in de tabel. De laatste NBBO van een handel die stilstaat is een fossiel en geen verhandelbare prijs; de GameStop-sessie van januari 2021 laat zien wat een reeks van dergelijke pauzes doet met een tape.

Waarom uw broker moet uitvoeren tegen de NBBO of beter

De NBBO is een wettelijke benchmark. Regulation NMS — het regelboek voor de markstructuur van de SEC, aangenomen in 2005 — bevat een regel voor orderbescherming, Rule 611: een handelsplatform mag niet uitvoeren tegen een prijs die slechter is dan een beschermde quote die op een andere beurs wordt getoond. Brokers zijn bovendien verplicht tot best execution, gemeten tegen de NBBO: een market buy moet worden uitgevoerd tegen de national best ask of lager, en een market sell tegen de national best bid of hoger.

De meeste particuliere lezers missen dit: uw market order bereikt meestal nooit een beurs. De meeste particuliere marketable flow wordt gerouteerd naar wholesalers — off-exchange market makers die betalen voor het recht om deze uit te voeren — en intern uitgevoerd, waarna de transactie wordt gerapporteerd aan een off-exchange rapportagefaciliteit. De NBBO blijft voor hen leidend: de wholesaler moet de nationale quote op het moment van uitvoering matchen of verbeteren. Zij concurreren om de flow door deze te verbeteren — een uitvoering van een fractie van een cent binnen de spread, wat bekend staat als price improvement. De NBBO is de referentieprijs, niet de handelsplaats; de order type dat u kiest bepaalt of u de spread überhaupt overbrugt.

FAQ

Bevat de NBBO odd lots?

Nee. De nationale quote is uitsluitend samengesteld uit round-lot quotes. Volgens Reg NMS wordt de round lot ingedeeld op prijs — 100 aandelen onder de $250, tot één aandeel boven de $10.000. De kleinste bid die de tape toonde voor Ford was 100 aandelen, tegenover 10 voor AutoZone, waarvan de aandelen veel duurder zijn. Beter geprijsde odd lots vallen binnen de gepubliceerde spread en worden niet getoond.

Waarom wijkt de quote in mijn brokerage-app af van de live NBBO?

Dit heeft twee redenen, waarvan geen van beide met de SIP te maken heeft. Gratis retail-feeds zijn volgens de licentieregels van de beurs meestal vijftien minuten vertraagd, tenzij u betaalt voor real-time data. Daarnaast is geconsolideerde data een gepubliceerde snapshot: de consolidatiestap nam voor de mediane SPY 229.1 microseconds in, terwijl bedrijven met exchange direct feeds het event eerder zien.

Wat gebeurt er met de NBBO wanneer een aandeel wordt geschorst?

Deze bevriest. Tijdens de vijf minuten durende limit-up/limit-down pauze van GameStop hierboven, registreerde de tape 0 quote updates bij 11:03 en 0 trades. De laatste quote blijft op het scherm staan, maar is niet verhandelbaar; een reopening auction bepaalt de volgende quote.

Bestaat de NBBO ook na de reguliere handelsuren?

Ja. Geconsolideerde quotes stromen van 4:00 uur tot 20:00 uur ET. Een nationale quote is dus beschikbaar tijdens premarket en after-hours trading — tegen een fractie van het tempo overdag: Apple heeft 65 updates in het laatste premarket-segment tegenover 5657 na de opening.

Databronnotities: vensters en filters

Rolling windows eindigen drie dagen voor de generatie (er is een korte ingest-vertraging aan de voorzijde van de feed) en tellen alleen volledige sessies — dagen waarop SPY alle 390 minute bars tijdens de reguliere handelsuren genereert. Het Coca-Cola panel sluit eenzijdige en crossed records uit; de counting panels nemen elk record ongewijzigd over (locked and crossed markets dekt de uitgesloten records). Het GameStop panel is gekoppeld aan een vaste datum, met de minute bars van SPY als chronologische basis, waardoor gepauzeerde minuten als nul worden weergegeven.


Elk panel wordt geleverd met de SQL die het heeft gegenereerd — open een bestand, vervang de ticker door uw eigen ticker, en tel de NBBO updates op de Strasmore terminal.