Skip to main content

Level1 Data - Best Bid Offer

Overview

The Level1 level of market data can represent both the exchange-local top of the book (BBO), as well as the National Best Bid Offer (NBBO). This is always a one sided quote.

Market data package validation

The unique key for this kind of data entry is a combination of the symbol, exchange, and side fields.

The following entries can be sent within the Level1 data stream:

  • L1Entry
  • TradeEntry

The scheme above describes the process of validation of an incoming message. If the validation rules are not met, the message is rejected, and no updates are made by this message. The green color of the condition indicates that this is a warning case, and not a reason to consider the message invalid.

Package Validation

Package validation block checks the package consistency. It is possible to mix trades from different exchanges in one package. But it is not allowed to send snapshots for multiple exchanges within one package. It is considered that the snapshot of the current state of the book for each exchange is sent entirely within one package. There cannot be, for example, a snapshot of each side of the book sent separately in multiple packages.

Trade entries in this format can be sent as an incremental updates. They do not affect state of the book.

Fields Validation

For each market data entry in a package, the following conditions must be valid:

  • Entry Size must be provided as a number (not a NaN). In some special cases, Entry Size can be NULL (Not to be confused with NaN. Decimal64 format allows multiple INT64 values to represent Not-A-Number (NaN). Deltix designates one of them as NULL.
  • Entry Price must be provided. The price should be a number > 0 by default, and not NULL. Negative prices are allowed (for example, for spreads or synthetic instruments trading). To avoid processing warnings, the price of the bid entry should be less than the offer entry price.
  • Entry Side must be provided.

There is a warning case if a bid is not less than the ask within one exchange.

Snapshots example

Part 1

Consider the following sequence of L1 snapshot messages. Pay attention to the Exchange ID.

Message 1

Package Type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryHOTSPOTBid10010.35
L1EntryHOTSPOTAsk15010.4
Message 2

Package Type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryLMAXBid15010.35
L1EntryLMAXAsk10010.42
Message 3

Package Type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryCURRENEXBid12010.36
L1EntryCURRENEXAsk15010.45
Message 4

Package Type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryJPMBid9010.34
L1EntryJPMAsk7010.42
Aggregated order book

At this point, the aggregated order book looks like this:

Exchange IdBest Bid SizeBest Bid PriceBest Ask PriceBest Ask Size
HOTSPOT10010.3510.4150
LMAX15010.3510.42100
CURRENEX12010.3610.45150
JPM9010.3410.4270
Invalid snapshot message
note

At any point, the following snapshot message would be invalid (it mixes entries from different exchanges).

Package type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryLMAXBid10010.32
L1EntryJPMAsk10010.39

Part 2: One-sided quote

The order book referenced below is a continuation from Part 1.

Consider receiving a one-sided incremental update message (new bid only).

Package Type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryCURRENEXBid5010.33

The resulting order book:

Exchange IdBest Bid SizeBest Bid PriceBest Ask PriceBest Ask Size
HOTSPOT10010.3510.4150
LMAX15010.3510.42100
CURRENEX5010.3310.45150
JPM9010.3410.4270

Part 3: Two-sided quote

The order book referenced below is a continuation from Part 2.

Consider receiving an update for both sides of the CURRENEX order book.

Package type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryCURRENEXBid8010.34
L1EntryCURRENEXAsk5010.41

The resulting order book:

Exchange IdBest Bid SizeBest Bid PriceBest Ask PriceBest Ask Size
HOTSPOT10010.3510.4150
LMAX15010.3510.42100
CURRENEX8010.3410.4150
JPM9010.3410.4270

Part 4: One-sided snapshot

The order book referenced below is a continuation from Part 3.

Consider receiving a snapshot with the BID side only.

Package type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryCURRENEXBid5010.33

It is considered that one snapshot message passes the entire snapshot for exchange. There cannot be one side snapshot sent separately. Therefore, the ASK side of the order book is empty for this exchange after applying the snapshot message.

Exchange IdBest Bid SizeBest Bid PriceBest Ask PriceBest Ask Size
HOTSPOT10010.3510.4150
LMAX15010.3510.42100
CURRENEX5010.33
JPM9010.3410.4270

Part 5: Ask = Bid

The order book referenced below is a continuation from Part 4.

Consider receiving an update for both sides of the HOTSPOT order book.

Package type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryHOTSPOTBid10010.32
L1EntryHOTSPOTAsk10010.32

This causes a warning because the bid price is equal to the ask price, but the message is still processed as valid.

The resulting order book:

Exchange IdBest Bid SizeBest Bid PriceBest Ask PriceBest Ask Size
HOTSPOT10010.3210.32100
LMAX15010.3510.42100
CURRENEX5010.33
JPM9010.3410.4270

Part 6: Size validation

The order book referenced below is a continuation from Part 5.

Consider receiving an invalid incremental update message.

Package type: SNAPSHOT

EntryExchange IdSideSizePrice
L1EntryJPMAskINFINITY10.35

This is an invalid size so the message is rejected by the validator. The order book remains unchanged.