Ano ang NBBO? National Best Bid at Offer
Ang NBBO ang national best bid at offer, ang consolidated stock quote na dapat tugunan o lampasan ng broker. Alamin kung gaano kabilis ito nag-uupdate mula sa real tick data.
Ang NBBO, ang national best bid at offer, ay ang consolidated quote para sa isang US stock: ang pinakamataas na presyo na ini-bid ng kahit sinong buyer at ang pinakamababa na ini-ask ng kahit sinong seller, sa bawat exchange nang sabay-sabay. Ito ang quote na ipinapakita ng iyong app at ang benchmark na dapat matugunan o malampasan ng iyong broker sa iyong order. Ang bawat numero sa ibaba ay mula sa tunay na quote records, kalakip ang query.
Ano ang NBBO? Isang payak na kahulugan
Hindi sa iisang lugar nag-tatrade ang isang US stock. Ang NYSE, Nasdaq, at mahigit isang dosenang ibang exchange ay bawat isa ay may order book para sa parehong ticker, kung saan ang bawat isa ay may sariling pinakamagandang bid at ask. Ang NBBO ay nagtatahi ng mga pinakamagandang presyo na iyon: ang pinakamataas na bid saanman, ang pinakamababang ask saanman, magkatabi kasama ang mga share na available sa bawat isa. Ang pagtatahi ay isinasagawa ng mga securities information processor, o SIPs — mga market utility na pinapatakbo nang sama-sama ng mga exchange.
May dalawang detalye na mahalaga agad. Ang bid at ang ask ay maaaring nasa dalawang magkaibang exchange nang sabay. At ang pagbabago ng presyo ay hindi kailangan para sa isang update: ang pagbabago ng size sa parehong pinakamagandang presyo ay nagpi-print din ng bagong tala. Tinatawag ng mga trader ang dalawang pinakamagandang presyo na the touch; ang agwat sa pagitan nila ay ang bid-ask spread.
Paano basahin ang NBBO quote: mga presyo, laki, at bilis
Narito ang sampu magkasunod na NBBO record para sa Coca-Cola (KO) mula 1:30 p.m. Eastern sa isang kamakailang buong session — ang national quote kung paano ito talaga dumarating.
Ang eksaktong SQL sa likod ng bawat numero
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 10Basahin ang unang row bilang dalawang nakatayong offer, na naka-stamp 13:30:02.886 ET. Pinakamainam na buyer: $83.3 para sa 200 shares. Pinakamainam na seller: $83.31 para sa 200 shares. Ang agwat sa pagitan nila ay 1¢.
Ang bilang ng shares ay ang size at the touch — ipinapakitang liquidity sa dalawang pinakamagandang presyo. Ang isang order na mas malaki kaysa sa laki na iyon ay ubos ito at ang natitira ay pupunan sa mga susunod na presyo sa book. Ang ipinapakitang laki ay isang floor, hindi buong inventory: mas maraming interest kadalasan ay nakatengga na hindi ipinapakita sa o sa pagitan ng dalawang presyo, kabilang ang sa dark pools.
Ngayon basahin pababa sa mga row. Lahat ng 10 record ay dumating sa loob ng 484.95 milliseconds ng una. Walang schedule — ang SIP ay nag-pu-publish kapag nagbago ang winner, at alinman sa apat na event ay nag-pi-print ng row: isang mas magandang bid, isang mas magandang ask, isang pagbabago sa shares sa alinmang pinakamagandang presyo, o isang exchange na pumapalit sa isa pa sa pinaka-itaas. Para sa isang tanawin ng haba ng session, tingnan ang microstructure deep-dive.
Kasama ba ng NBBO ang mga odd lot?
Sa karamihan, hindi. Ang national quote ay binubuo LAMANG sa round-lot na interes. Ang isang order na mas kaunti sa round lot ay isang odd lot: maaari itong mag-rest sa exchange book sa mas magandang presyo kaysa national best bid, mag-trade doon, at hindi kailanman makita sa NBBO.
Ang round lot ay hindi na flat na 100 shares. Sa ilalim ng amended Reg NMS quoting rules ng SEC, ito ay naka-tier ayon sa share price: 100 shares hanggang $250, 40 mula $250.01 hanggang $1,000, 10 mula $1,000.01 hanggang $10,000, isa sa itaas niyon. Ang mga tier ay nakikita sa tape — kinukuha ng panel ang pinakamaliit na bid size na kailanman lumalabas sa consolidated quote para sa anim na pangalan sa buong banda.
Ang eksaktong SQL sa likod ng bawat numero
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_priceAng Ford, na nag-q-quote sa paligid ng $13.9, ay hindi kailanman nagpapakita ng bid na mas maliit sa 100 shares sa oras na iyon; ganoon din ang Coca-Cola sa $84.18. Ang Apple, sa $314.36, ay bumababa sa 40; ang AutoZone, sa $3030.52 bawat share, ay bumababa sa 10, na may median displayed bid na 10. Ang floor ay sumusunod sa price tier. Ang mas magandang presyo na odd-lot interes ay maaaring umupo sa loob ng published spread na hindi naka-display, kaya ang tunay na pinakamagandang available na presyo ay kung minsan ay mas maganda kaysa sa ipinapalagay ng NBBO.
Bakit ang quote ng app mo ay hindi eksaktong ang live NBBO
Ang quote na nababasa mo sa phone ay dumaan na: exchange matching engine → SIP → data vendor → broker → screen. Bawat record ay may dalawang orasan — sariling stamp ng exchange at stamp ng SIP sa paglathala — at ang agwat sa dalawa ay ang consolidation step.
Ang eksaktong SQL sa likod ng bawat numero
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)Ang median na agwat sa SPY ay 229.1 microseconds — milyon-milyong bahagi ng segundo — at ang Apple ay 203.4. Ang dulo ay mas mataba kaysa gitnang bahagi: ang 99th percentile ng Nvidia ay nasa 536.9 microseconds. Hindi mabagal ang SIP sa anumang pananaw ng tao. Dalawang bagay ang mabagal.
Una, ang data mo ay maaaring sadyang na-delay. Ang mga free quote feed sa retail apps at charting sites ay karaniwang na-delay ng 15 minuto alinsunod sa mga tuntunin ng exchange licensing; ang real-time streaming ay isang bayad na entitlement.
Ikalawa, ang mga propesyonal na firm ay hindi naghihintay sa SIP. Bawat exchange ay nagbebenta rin ng direktang feed mula sa sarili nitong matching engine. Ang isang colocated firm ay nagbabasa nito at nagko-compute ng sarili nitong best bid at offer bago dumating ang SIP version ng event na iyon — isang edge na microseconds, mapagpasyahan para sa isang market maker na nag-quote ng parehong side buong araw.
Gaano kadalas nag-u-update ang NBBO? Liquid vs thin stocks
Ang bawat nakalistang stock ay may NBBO, at ang update rate nito ay isang liquidity gauge. Ina-average ng table ang mga kamakailang full sessions para sa apat na heavily traded na pangalan at dalawang thin small caps — Nathan's Famous (NATH) at Seneca Foods (SENEA).
Ang eksaktong SQL sa likod ng bawat numero
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)Ang SPY, ang S&P 500 ETF, ay nag-average ng 3.428 million NBBO updates kada session — 2031 beses ang pinakatahimik na pangalan sa table. Nag-average si Nvidia ng 1.85 million, Apple naman ng 1.336 million. Pagkatapos ay ang cliff: 8097 updates ang na-print ng Seneca Foods sa isang average session, 1688 naman ang Nathan's Famous. Walang tao ang nagbabasa ng screen sa rate ng SPY: ang NBBO ay isang feed na ginawa para sa software.
Kung kailan pinakamabilis mag-update ang NBBO: ang open vs. tanghaling tapat
Ang update rate ay may sariling pang-araw-araw na ritmo din. Ina-average ng chart ang NBBO updates kada minuto ng Apple sa kalahating-oras na clock buckets (Eastern Time); ang huling column ay binabasa ang bawat bucket bilang porsyento ng 9:30 bucket.
Ang eksaktong SQL sa likod ng bawat numero
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_timeSa kalahating oras pagkatapos ng opening auction, ang national quote ng Apple ay nag-update ng 5657 beses kada minuto sa average, at ang 10:00 bucket ay nanatili sa ganong bilis sa 89.5% nito. Pagkatapos ay manipis ang tape sa kalagitnaan ng araw: ang 2:30 bucket ay tumakbo ng 1973 updates kada minuto, 34.9% ng opening pace. Ang 3:30 na pagtakbo papuntang close ay nakabawi lamang ng bahagi ng pagbalik — 3345 kada minuto, 59.1% ng open — kaya ang pinakamabigat na quoting ay nasa unang oras, hindi sa huli. Sa labas ng regular na oras, halos tahimik ang tape, bumaba sa 17 updates kada minuto pagkatapos ng 4:00 p.m. bell.
Ano ang nangyayari sa NBBO sa panahon ng trading halt?
Kapag ang isang stock ay gumalaw nang masyadong mabilis, ang mga limit-up/limit-down na patakaran ay nag-papause dito nang limang minuto. Ang quote ay hindi nawawala at hindi rin nananatiling live: tumitigil ito sa pag-refresh, at ang huling record bago ang pause ang naiiwan na frame sa iyong screen. Nag-trigger ang GameStop (GME) ng ganitong pause bandang 11:00 a.m. Eastern noong Mayo 14, 2024; sinusubaybayan ng panel ang mga quote update at trades nito, minuto por minuto, sa buong panahon nito.
Ang eksaktong SQL sa likod ng bawat numero
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_minSa minutong bago ang pause, 11:00, 4511 beses na nag-update ang consolidated quote ng GameStop laban sa 12419 na trades. Pagkatapos ay parehong nahuhulog sa sahig ang dalawang column: 0 quote records sa 11:02 at 0 sa 11:03, na may katumbas na 0 trades — isang quote na tumigil nang gumalaw, sa isang stock na tumigil nang mag-trade. Bumalik ang quoting sa 11:06, ang minutong pagbubukas muli, na may 4155 na updates at 14007 na trades, ang pinakamabigat na trade minute sa talahanayan. Ang huling NBBO ng isang naka-halt na stock ay isang labi, hindi isang tradable na presyo; ipinapakita ng ang GameStop session noong Enero 2021 kung ano ang ginagawa ng isang kadena ng ganitong mga pause sa tape.
Bakit dapat punan ng broker mo sa NBBO o mas mabuti
Ang NBBO ay isang regulatory benchmark. Ang Regulation NMS — ang market-structure rulebook ng SEC, na noong 2005 — ay may order-protection rule, ang Rule 611: hindi maaaring mag-execute ang isang venue sa presyo na mas masahol kaysa sa protected quote na ipinapakita sa ibang exchange. May utang din ang mga broker sa mga customer na best execution, na sinusukat laban sa NBBO: ang isang market buy ay dapat punan sa national best ask o mas mababa, ang market sell sa national best bid o mas mataas.
Karamihan ng retail reader ay hindi ito napapansin: ang market order mo ay karaniwang hindi kailanman umaabot sa isang exchange. Karamihan ng retail marketable flow ay iri-route sa mga wholesaler — off-exchange market makers na nagbabayad para sa karapatang punan ito — at ini-execute internally, ini-print sa isang off-exchange reporting facility. Ang NBBO ay pa rin ang namamahala sa kanila: ang wholesaler ay dapat tugmaan o talunin ang national quote sa sandali ng execution, at nakikipag-kompetensya para sa flow sa pamamagitan ng pagtalo rito — nagpupunan ng bahagi ng sentimo sa loob ng spread, na kilala bilang price improvement. Ang NBBO ay ang reference price, hindi ang venue; ang uri ng order na pipiliin mo ang nagdedecide kung tatawid ka ba sa spread o hindi.
FAQ
Kasama ba ang odd lots sa NBBO?
Hindi. Ang national quote ay binubuo mula sa round-lot quotes lamang, at itinaguri ng Reg NMS ang round lot ayon sa presyo — 100 shares sa ibaba ng $250, hanggang isang share sa itaas ng $10,000. Ang pinakamaliit na bid na ipinakita ng tape para sa Ford sa itaas ay 100 shares, laban sa 10 para sa AutoZone, na mas mahal ang mga share nito. Ang mga odd lots na may mas magandang presyo ay nakatago sa loob ng nai-publish na spread na hindi ipinapakita.
Bakit iba ang quote sa aking brokerage app kumpara sa live NBBO?
Dalawang dahilan, at wala sa kanila ang SIP. Ang mga libreng retail feed ay karaniwang na-de-delay ng 15 minuto alinsunod sa exchange licensing rules maliban kung magbabayad ka para sa real-time. At ang consolidated data ay isang nai-publish na snapshot: ang consolidation step ay sumukat ng 229.1 microseconds sa median sa SPY, habang ang mga firm na nasa exchange direct feeds ay nakakakita ng event nang mas maaga.
Ano ang nangyayari sa NBBO kapag na-halt ang isang stock?
Nire-freeze ito. Sa panahon ng limang-minutong limit-up/limit-down pause ng GameStop sa itaas, ang tape ay nagdala ng 0 quote updates sa 11:03 at 0 trades. Ang huling quote ay nananatili sa screen ngunit hindi ito maaaring i-trade; isang reopening auction ang nagtatakda ng susunod.
May NBBO ba pagkatapos ng regular hours?
Oo. Ang consolidated quotes ay nag-stream mula 4:00 a.m. hanggang 8:00 p.m. ET, kaya may umiiral na national quote sa buong premarket at after-hours trading — sa isang bahagi lamang ng daytime pace: 65 Apple updates kada minuto sa huling premarket bucket laban sa 5657 pagkatapos mag-open.
Mga data note: mga window at filter
Ang mga rolling window ay nagtatapos tatlong araw bago ang generation (may maikling ingest lag na nasa front edge ng feed) at nagbibilang lamang ng mga full session — mga araw kung saan nagpi-print ang SPY ng lahat ng 390 regular-hours minute bars. Ang panel ng Coca-Cola ay nag-e-exclude ng one-sided at crossed records; ang mga counting panel ay kumukuha ng bawat record as-is (locked at crossed markets ang sumasaklaw sa mga na-exclude). Ang panel ng GameStop ay naka-pin sa isang fixed na petsa, na may minute bars ng SPY bilang clock spine, kaya ang mga na-pause na minuto ay lumalabas bilang zero.
Kasama ng bawat panel ang SQL na lumikha nito — buksan ang isa, palitan ng sarili mong ticker, at bilangin ang mga NBBO updates nito sa Strasmore terminal.