Page History
...
Whisperer delivers market data in the form of incremental updates, wherever possible.
When a venue message is known to be a snapshot, this is reflected with MDFlags.IsSnapshot = TRUE and NoMDEntries[*].MDUpdateAction = New. Snapshots always fully replace any book that might exist prior.
Standard incremental processing is expected, with clients making direct reference to NoMDEntries[*].MDUpdateAction and applying New/Change/Delete actions against each associated MDEntryID. It is important that the NoMDEntries repeating groups are processed in the exact order given.
...
All-MDEntryIDandMDUpdateActionare always provided.Delete- by definition the entry is no longer valid, so there is no need to redeliver the state of the outdated entry.New- all other available fields will always be provided.Change- typically, only the fields that have changed will be provided.
| Info | ||
|---|---|---|
| ||
For Change events, the following principles apply:
|
...
|
Book Depth
Where clients subscribe for custom book depths against a given Venue, it is important to understand that entries that are pushed below the requested depth by more competitive orders will not necessarily result in an explicit Delete for the client to process. I.e. such movements may be treated as an implicit delete by the Venue with the expectation that such entries are identified and deleted by the client as part of their book management workflowbeing delivered by the Venue for Whisperer to process.
Rather than pass on the responsibility for identification and processing of these implicit deletes to the Client, Whisperer will ensure that explicit Delete events are always delivered.
Book Management
Please refer to Liquidity Representation for an overview of CLOB market data structures.
...
- Process the individual updates contained within the market data message.
- Collect the orders by price level. This is redundant for a PriceDepth book, which is already aggregated.
- Sort prices for each side of the book best to worst. I.e. The Client always sorts the book by price for each side (not MDEntryID).
- For each price level at or above the subscribed MDBookDepth, sort MDEntryIDs smallest (oldest) > largest (newest). Again, this is redundant for a PriceDepth book, which is already aggregated. I.e. the MDEntryID is a secondary key for OrderDepth books, to sort multiple orders at a give price level.
| Info |
|---|
...
The presence of any entries outside the subscribed MDBookDepth is unintended behaviour. |
Book Integrity
When processing a Whisperer MarketDataIncrementalRefresh message, Whisperer ensures the overall integrity of the book at the end of the NoMDEntries cycle. During the cycle:
- Whisperer ensures that books will never exceed any specific requested depth - when implicit deletes are detected, the explicit Delete MDEntry is placed before the New that triggers it.
- Two MDEntries in a PriceDepth book may momentarily have the same price - this typically occurs when multiple MDEntries on one side of the book change their prices up or down, such that the first MDEntry moves to a price level occupied by a different MDEntry that has yet to have it's price modified.
Orders
The Orders workflow is always normalised and consistently implements the state transition model as outlined in the diagram below. Where Venue events are absent, synthetic equivalents are generated by Whisperer in their place. These messages are easily discernible by reference to the TradingFlags.IsSynthetic field.
...