Strasmore Research
Обучение Matt ConnorАвтор: Matt Connor · Обновлено 2026-07-24 · data as of July 24, 2026 · refreshed weekly

что такое NBBO и как работает котировка

Узнайте, что такое NBBO и почему брокер обязан исполнять ваши ордера по лучшим ценам. Разбираем принципы работы консолидированной котировки на основе данных.

NBBO (National Best Bid and Offer) — это консолидированная котировка акций в США. Она представляет собой максимальную цену предложения покупателя и минимальную цену запроса продавца по всем биржам одновременно. Именно эту котировку отображает ваше приложение. Брокер обязан исполнить ваш ордер по цене не хуже, чем указано в NBBO. Все приведенные ниже данные основаны на реальных записях котировок; запрос приложен.

Что такое NBBO? Простое определение

Американские акции не торгуются в одном месте. NYSE, Nasdaq и более чем дюжина других бирж ведут книги заявок по одному и тому же тикеру, и у каждой свои лучшие цены спроса и предложения. NBBO объединяет эти данные: она показывает самую высокую цену спроса и самую низкую цену предложения на всех рынках одновременно, указывая доступный объем акций. Этот процесс объединения выполняют процессоры информации о ценных бумагах, или SIPs — рыночные сервисы, совместно управляемые биржами.

Важны две детали. Цена спроса и цена предложения могут одновременно находиться на разных биржах. Также обновление данных не требует изменения цены: изменение объема при той же лучшей цене также создает новую запись. Трейдеры называют две лучшие цены the touch; разница между ними — это бид-аск спред.

Как читать котировки NBBO: цены, объемы и темп

Ниже приведены десять последовательных записей NBBO для Coca-Cola (KO), полученных в 13:30 по восточному времени в ходе недавней полной торговой сессии. Это национальные котировки в том виде, в котором они поступают на рынок.

ЗапросKO — десять последовательных обновлений NBBO в 13:30 ET в недавнюю сессию
Точный SQL-код для каждого числа
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

Первая строка содержит два действующих предложения, зафиксированных в 13:30:02.886 ET. Лучшая цена покупки: $83.3 за 200 акций. Лучшая цена продажи: $83.31 за 200 акций. Спред между ними составил 1 центов.

Количество акций — это объем на уровне сделки (size at the touch), то есть доступная ликвидность по двум лучшим ценам. Ордер, превышающий этот объем, исполняется полностью по текущим ценам, а остаток — по следующим ценам в стакане. Отображаемый объем является минимальным порогом, а не полным объемом доступных активов: часто по этим ценам или между ними существуют скрытые заявки, в том числе в dark pools.

Теперь проанализируем строки. Все 10 записей поступили в течение 484.95 миллисекунд после первой. График поступления отсутствует — SIP публикует данные при каждом изменении котировок. Запись в журнале создается при любом из четырех событий: улучшении цены покупки, улучшении цены продажи, изменении объема по одной из лучших цен или замене одной биржи другой на верхних позициях стакана. Подробный анализ микроструктуры рынка представлен в статье микроструктура рынка.

Включает ли NBBO неполные лоты?

В основном нет. Национальная котировка формируется только из заявок круглыми лотами. Заявка на количество акций меньше круглого лота называется неполным лотом: она может находиться в стакане биржи по цене лучше, чем национальный лучший спрос, совершить по ней сделку и так и не появиться в NBBO.

Круглый лот больше не составляет фиксированные 100 акций. Согласно обновленным правилам котирования Reg NMS от SEC, он разделен на уровни в зависимости от цены акции: 100 акций при цене до $250; 40 акций при цене от $250,01 до $1 000; 10 акций при цене от $1 000,01 до $10 000; одна акция при цене выше этого значения. Эти уровни видны в ленте сделок — панель отображает минимальный объем спроса, который когда-либо появлялся в консолидированной котировке для шести наименований в пределах этих диапазонов.

ЗапросМинимальный размер в NBBO — шесть акций по ценовым уровням
Точный SQL-код для каждого числа
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 с котировкой около $13.9 в течение этого часа не показывал заявок объемом менее 100 акций; как и Coca-Cola при цене $84.18. Apple при цене $314.36 снижается до 40; AutoZone при цене $3030.52 за акцию снижается до 10, при этом медианный объем заявки составляет 10. Нижний порог зависит от ценового уровня. Неполные лоты с более выгодной ценой могут находиться внутри опубликованного спреда без отображения в котировках, поэтому реальная лучшая доступная цена иногда лучше, чем предполагает NBBO.

Почему котировки в вашем приложении не полностью соответствуют NBBO в реальном времени

Котировка, которую вы видите на телефоне, проходит следующий путь: механизм сопоставления биржи → SIP → поставщик данных → брокер → экран. Каждая запись содержит два временных метки — метку биржи и метку SIP в момент публикации. Разница между ними — это время, необходимое на консолидацию данных.

ЗапросЗадержка между меткой биржи и SIP — этап консолидации, в микросекундах
Точный SQL-код для каждого числа
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)

Медианная задержка для SPY составила 229.1 микросекунд — миллионных долей секунды, а для Apple — 203.4. Хвост распределения длиннее, чем его середина: 99-й процентиль для Nvidia составил 536.9 микросекунд. SIP не является медленным в человеческом понимании. Медленными являются два других фактора.

Во-первых, ваши данные могут быть намеренно задержаны. Бесплатные потоки котировок в розничных приложениях и на сайтах с графиками обычно задерживаются на 15 минут согласно условиям лицензирования бирж; потоковая передача в реальном времени является платной услугой.

Во-вторых, профессиональные фирмы не ждут данных от SIP. Каждая биржа также продает прямой поток данных со своего механизма сопоставления. Фирма, использующая колокацию, считывает этот поток и вычисляет свои лучшие цену спроса и цену предложения до того, как поступит версия этого события от SIP. Это дает преимущество в микросекунды, которое является решающим для маркетмейкера, котирующего обе стороны рынка в течение всего дня.

Как часто обновляется NBBO? Ликвидные и неликвидные акции

Каждая котируемая акция имеет свой NBBO, и частота его обновления служит показателем ликвидности. В таблице приведены средние значения за последние полные торговые сессии для четырех высоколиквидных бумаг и двух малоликвидных компаний с малой капитализацией — Nathan's Famous (NATH) и Seneca Foods (SENEA).

ЗапросОбновлений NBBO за сессию — четыре высоколиквидных акции против двух малоликвидных
Точный SQL-код для каждого числа
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, ETF на индекс S&P 500, в среднем получал 3.428 миллиона обновлений NBBO за сессию — это в 2031 раз больше, чем у самого малоактивного актива в таблице. Nvidia в среднем имела 1.85 миллиона обновлений, Apple — 1.336 миллиона. Далее следует резкий спад: Seneca Foods за среднюю сессию фиксировала 8097 обновлений, а Nathan's Famous — 1688. Человек не способен отслеживать данные с такой скоростью, как SPY: поток NBBO предназначен для программного обеспечения.

Когда обновления NBBO происходят быстрее всего: открытие против середины дня

Частота обновлений также подчиняется ежедневному ритму. На графике представлено среднее количество обновлений NBBO для Apple в минуту, распределенное по полуторачасовым интервалам (по восточному времени); в последнем столбце каждое значение указано в процентах от показателя в 9:30.

ЗапросAAPL — среднее число обновлений NBBO в минуту по получасовым интервалам (ET, с 4:00 до 20:00)
Точный SQL-код для каждого числа
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

В первые полчаса после аукциона открытия национальная котировка Apple обновлялась в среднем 5657 раз в минуту, а в интервале в 10:00 этот темп составил 89.5% от начального. Затем в середине дня активность снижается: в интервале в 2:30 наблюдалось 1973 обновлений в минуту, что составляет 34.9% от темпа открытия. Предторговое движение в 3:30 к закрытию восстанавливается лишь частично — 3345 обновлений в минуту, или 59.1% от темпа открытия; таким образом, наибольшая интенсивность котировок наблюдалась в первый час, а не в последний. Вне регулярных торговых часов активность практически отсутствует: после сигнала в 16:00 частота падает до 17 обновлений в минуту.

Что происходит с NBBO во время приостановки торгов?

Если цена акции меняется слишком резко, правила limit-up/limit-down приостанавливают торги на пять минут. Котировки не исчезают и не остаются активными: обновление прекращается, и на экране отображается последнее зафиксированное значение перед паузой. Акции GameStop (GME) попали под такое ограничение 14 мая 2024 года сразу после 11:00 по восточному времени; в данной таблице прослеживается динамика котировок и сделок по этой бумаге каждую минуту в период приостановки.

ЗапросGME, 2024-05-14 — обновления NBBO и сделки в минуту во время пятиминутной паузы LULD
Точный SQL-код для каждого числа
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

За минуту до паузы консолидированная котировка GameStop обновилась 4511 раз при 12419 сделках, что составило 11:00. Затем данные в обоих столбцах резко снижаются: 0 записей котировок при 11:02 и 0 при 11:03, при этом приходится на 0 сделок — котировка замерла, так как торги по акции прекращены. Котировки возобновляются в 11:06, в минуту реоткрытия, с 4155 обновлениями и 14007 сделками, что является самым активным периодом торгов в таблице. Последнее значение NBBO приостановленной акции является статичным, а не доступным для торговли; сессия GameStop в январе 2021 года демонстрирует, к чему приводит серия таких пауз.

Почему ваш брокер обязан исполнять ордера по цене NBBO или лучше

NBBO является нормативным эталоном. Регламент NMS — свод правил структуры рынка, принятый SEC в 2005 году, — включает правило защиты ордеров (Rule 611): площадка не имеет права исполнять сделку по цене хуже, чем защищенная котировка, выставленная на другой бирже. Брокеры также обязаны обеспечивать клиентам лучшее исполнение (best execution) относительно NBBO: рыночный ордер на покупку должен быть исполнен по цене национального лучшего предложения (ask) или ниже; рыночный ордер на продажу — по цене национального лучшего спроса (bid) или выше.

Большинство розничных инвесторов упускают это из виду: ваш рыночный ордер обычно не доходит до биржи. Большая часть розничного потока исполняемых ордеров направляется оптовикам (wholesalers) — внебиржевым маркетмейкерам, которые платят за право их исполнения. Сделки проводятся внутри системы и фиксируются в внебиржевых отчетных центрах. NBBO по-прежнему регулирует их деятельность: оптовик обязан соответствовать национальной котировке или превосходить ее в момент исполнения. Они конкурируют за поток, предлагая цену лучше рыночной — исполнение внутри спреда на долю цента, что известно как улучшение цены (price improvement). NBVO является эталонной ценой, а не площадкой; выбранный вами тип ордера определяет, будет ли исполнение вообще за пределами спреда.

FAQ

Включает ли NBBO неполные лоты?

Нет. Национальная котировка формируется только из котировок круглых лотов. Согласно Reg NMS, размер круглого лота зависит от цены: от 100 акций при цене ниже $250 до одной акции при цене выше $10,000. Минимальная заявка на покупку Ford, зафиксированная лентой, составила 100 акций, тогда как для AutoZone этот показатель составил 10 акций из-за более высокой стоимости. Более выгодные неполные лоты находятся внутри опубликованного спреда и не отображаются.

Почему котировка в моем приложении брокера отличается от текущей NBBO?

На это есть две причины, и ни одна из них не связана с SIP. Бесплатные розничные каналы данных обычно задерживаются на 15 минут согласно правилам лицензирования бирж, если вы не оплатили доступ в реальном времени. Кроме того, консолидированные данные представляют собой опубликованный снимок состояния рынка: медианное время этапа консолидации для SPY составило 229.1 микросекунд, в то время как компании, использующие прямые биржевые каналы, видят событие раньше.

Что происходит с NBBO, когда торги акциями приостановлены?

Котировка замирает. Во время пятиминутной паузы GameStop (limit-up/limit-down) лента зафиксировала 0 обновлений котировок и 11:03 и 0 сделок. Последняя котировка остается на экране, но по ней нельзя совершить сделку; следующая котировка устанавливается аукционом при возобновлении торгов.

Существует ли NBBO в послеторговое время?

Да. Консолидированные котировки поступают с 4:00 до 20:00 по восточному времени (ET), поэтому национальная котировка доступна во время премаркета и послеторгового периода — но с гораздо меньшей частотой, чем в основную сессию: Apple получила 65 обновлений в последнюю минуту премаркета против 5657 после открытия торгов.

Примечания к данным: временные интервалы и фильтры

Скользящие окна заканчиваются за три дня до момента генерации (на входе потока существует небольшая задержка загрузки) и учитывают только полные сессии — дни, когда SPY формирует все 390 минутных баров в рамках регулярных торговых часов. Панель Coca-Cola исключает односторонние и пересекающиеся записи; панели подсчета учитывают каждую запись в исходном виде (заблокированные и пересекающиеся рынки охватывают исключенные записи). Панель GameStop привязана к фиксированной дате, где временной шкалой служат минутные бары SPY, поэтому минуты приостановки торгов отображаются как нули.


Каждая панель поставляется с SQL-запросом, который ее сформировал — откройте его, подставьте свой тикер и подсчитайте обновления NBBO в терминале Strasmore.