![]()
Security Status messages communicate static attributes of each instrument supported by the Venue and are delivered on successful connection to a CLOB Pricing session.
Should Whisperer be notified of changes for an Instrument, these messages will also be used to deliver intra-day updates. Typical scenarios are value/trade date rolls & changes in trading status (open/halted).
The usage of specific fields is elaborated below:
Whisperer uses a single MarketDataIncrementalRefresh message for all market data updates.
The MDFlags.IsSnapshot flag is used to indicate how the message relates to the previous state:
TRUE - This message must fully replace any book that exist prior.FALSE - This message is to be applied to the local book, which must be retained.This flag is guaranteed to be set such that the local book is always correct. In particular it should be noted that:
NoMDEntries[*].MDUpdateAction = New, so the value of MDFlags.IsSnapshot is immaterial in this case and Whisperer may mark the first update as a snapshot, or not, depending on the venue.When MDFlags.IsSnapshot= FALSE, standard incremental processing is expected. The client must reference each NoMDEntries[*].MDUpdateAction and apply the New/Change/Delete action against the associated MDEntryID. It is essential that the NoMDEntries repeating groups are processed in the exact order given.
The population of the NoMDEntries group will vary with the MDUpdateAction as follows:
All - MDEntryID and MDUpdateAction are 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.For Change events, the following principles apply:
|
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 being 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.
Please refer to Liquidity Representation for an overview of CLOB market data structures.
OrderDepth books are characterised by there being the possibility of many orders at each Bid or Offer price point. In order to ensure that this book is maintained correctly the Client must order it first by Price (best to worst), and then by Age (oldest orders first) for each given price.
PriceDepth books are a simplification of this since we know that they are an aggregated view of the raw OrderDepth data, so there is only ever a single entry for any given Bid or Offer price point. The same applies for other aggregated views - Spread, VWAP etc.
The MDEntryID is always used as follows for the two book types:
In order to ensure a consistent processing model across both book types, the client may implement an efficient equivalent of the following:
The presence of any entries outside the subscribed MDBookDepth is unintended behaviour. |
When processing a Whisperer MarketDataIncrementalRefresh message, Whisperer ensures the overall integrity of the book at the end of the NoMDEntries cycle. During the cycle:
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.
| It's worth remembering that while all inbound messages will adhere to the same state transition model, there will necessarily be Venue-specific variation in whether and how outbound ExecutionAck messages are handled. |
![]()
![]()
![]()