Bid Ask and NBBO Quotes in Kibot Data
Kibot's tick-with-bid-ask files include the National Best Bid and Offer (NBBO) sampled at the moment of every trade. This page explains exactly what that means, how it differs from a continuous quote feed, why some trades print outside the spread, the difference between the tick bid/ask file and the aggregate 1-minute bid/ask file, and why Kibot does not publish order-book depth (top-of-book volumes, levels 2+) or quote-only ticks. These questions are by some margin the most-asked clarifications about Kibot's tick product.
What NBBO Means and What Kibot Captures
The National Best Bid and Offer is the highest bid and the lowest ask aggregated across every US equity exchange and ECN that publishes a quote, as consolidated by the Securities Information Processor (SIP) under Regulation NMS. At any instant, the NBBO is a single nationwide best bid and best ask for each symbol. Kibot's tick file records that NBBO at the moment each trade prints. The schema is:
Date,Time,Price,Bid,Ask,Size
Where Price is the trade price, Bid and Ask are the NBBO at the moment of trade, and Size is the trade volume. The Bid and Ask are not the quote from the exchange where the trade printed; they are the cross-market NBBO, which is the same number a Reg NMS-compliant broker would have used to route the order.
Why Quotes Are Only at the Moment of Trade
A common follow-up question: "Can I get the bid and ask at every moment, not just when a trade prints?" The answer for Kibot files is no, by design. The full continuous NBBO quote stream is on the order of 10 to 50 times larger than the trade stream (quotes change far more often than trades, particularly in high-frequency markets), and most of those quote updates are revisions that are cancelled within milliseconds without producing any trade. The signal-to-noise ratio on a pure quote stream is poor for almost every backtesting use case.
By recording the NBBO at the moment of each trade, Kibot captures exactly the bid and ask a market participant could have transacted against. That is the question almost every backtest is actually trying to answer (could I have bought at X price, could I have sold at Y price), without the storage and processing burden of the full quote firehose.
For the small set of use cases that genuinely need continuous quote sampling (microstructure research, latency-sensitive trade simulation), Kibot can quote custom 1-second NBBO samples on request, but the standard tick product is trade-anchored.
Why Some Trades Print Outside the Bid-Ask Spread
Customers inspecting tick files often notice trades whose price is above the recorded Ask or below the recorded Bid. This is not a data error; it is real market structure. The four common causes:
- Insufficient liquidity at the top of book. A marketable order larger than the displayed top-of-book size sweeps through multiple price levels. The print is the average fill, which is worse than the displayed Bid or Ask.
- Block trades and dark-pool prints. Negotiated block trades and dark-pool crossings can clear at prices outside the lit spread, particularly for institutional flow above the displayed sizes.
- Stale NBBO due to reporting latency. The SIP-consolidated NBBO can lag the venue-local best by a few milliseconds. A fast print on one exchange can land before its quote update has propagated to the SIP, so the recorded NBBO at trade time is stale by a few ticks.
- Trade-reporting facility (TRF) and odd-lot conventions. Some prints (especially in older history) come from off-exchange TRFs with their own clock skew. The print is real, but the surrounding lit NBBO had moved by the time the TRF report posted.
For forex, an additional cause: forex is OTC, the "NBBO" is a Kibot-aggregated best across the LP feeds Kibot consolidates, and individual dealer prints can fall outside that aggregated best by design.
Tick Bid/Ask vs Aggregate 1-Minute Bid/Ask
Kibot offers two bid/ask products and they answer different questions:
| Product | Granularity | What it captures |
|---|---|---|
| Tick + bid/ask | Per trade | NBBO sampled at the moment of each trade. 6 fields: Date, Time, Price, Bid, Ask, Size |
| Aggregate 1-min bid/ask | Per minute | Open/High/Low/Close of both Bid and Ask within the minute window. 10 fields: Date, Time, BidOHLC (4), AskOHLC (4) |
The aggregate file is built from the tick file. The 1-minute bid OHLC is the open, high, low, and close of the recorded Bid across every trade in that minute; same for the Ask. Customers who only need the per-minute spread summary (for backtests with 1-minute granularity, or for spread-cost estimation) can use the aggregate file at much lower storage cost than the full tick file.
No Order-Book Depth, No Quote Volumes
Two related questions that come up regularly:
- Top-of-book sizes (Bid size and Ask size). Kibot's NBBO record carries the Bid price and Ask price but not the size at the top of book. The trade Size field is the trade volume, not the resting-order size. Top-of-book sizes are not in the standard product.
- Order-book depth (level 2+, full book). Kibot does not publish order-book depth. The data is recorded only at the SIP-consolidated NBBO level; venue-local depth and the full book are not in the archive. Customers needing level-2 or full-depth data need a specialized vendor; the team is happy to suggest one over email.
The reason is the same as for quote-only ticks: depth data is dominated by high-frequency cancel-and-replace activity that is noisy for most analytics use cases and very expensive to store. Most customers who initially ask for depth find on closer review that NBBO-at-trade meets the actual requirement.
Trade Conditions, Quote Conditions, and Odd Lots
The standard tick file is a clean stream of regular trades. Trade conditions (regular, opening cross, closing cross, odd lot, intermarket sweep, etc.) and odd-lot prints (transactions for fewer than 100 shares) are exposed as extra columns in the experimental millisecond-timestamp variant of the tick data feed; the standard tick file omits them for backwards compatibility with older customer pipelines.
For NBBO sampling, no quote condition is recorded; the Bid and Ask fields are always the SIP-consolidated NBBO regardless of which venue published the underlying quote.
Key Takeaways
- Kibot's tick file records the NBBO at the moment of each trade, not the continuous quote stream. The Bid and Ask fields are the cross-market consolidated best, not a single-venue quote.
- Trades outside the recorded spread are real market behavior: liquidity sweeps, block trades, dark-pool prints, and SIP-propagation latency all produce this legitimately.
- The aggregate 1-minute bid/ask file is built from the tick file. Use it when you only need per-minute spread summaries.
- Top-of-book sizes and full order-book depth are not in the standard product. Custom 1-second NBBO sampling can be quoted on request; level-2 needs a specialized vendor.
- Trade conditions and odd-lot prints are exposed only in the experimental millisecond-timestamp variant, not in the standard 6-field tick file.
- Forex bid/ask is Kibot's aggregated best across consolidated LP feeds, not a SIP-style regulatory NBBO. Off-aggregated prints can occur by design.
Related
- Data format reference, the full schemas for tick bid/ask and aggregate bid/ask formats.
- Tick data, the standard tick format and the experimental 9-field variant with trade conditions and odd-lot inclusion.
- Data completeness, spike filtering and the quality-assurance pipeline that produces the clean tick stream.
- Comparing Kibot data to other sources, why a tick or daily value can differ from a third-party feed when bid/ask conventions diverge.
- Data sources, the feeds and exchanges behind the consolidated NBBO that Kibot publishes.
- Free samples, IVE_tickbidask.txt and other samples for inspecting the 6-field format before purchase.