OnixS C++ CME Market Data Handler  2.56.0.0
Maintaining Books by Natural Refresh

In regular case, Handler keeps checking incoming packets transmitted by MDP for gaps and uses recovery facilities like TCP Replay and snapshot feeds to keep order books in up-to-date state. When market data loss occurs, Handler spawns market recovery using market recovery feed. While recovering market, real-time market data is being cached and thus market data processing looks like suspended.

Natural refresh of order books supposes processing of real-time (incremental) market data without involving market recovery. As a result, real-time market data is being processed as soon as is received from the feeds. As a drawback, order books may not be fully recovered and thus some price levels may absent.

Identifying Book State and Missed Price Levels

When recovery facilities are used, order books exposes by the Handler are always fully reconstructed and in up-to-date state. When books are naturally refreshed, part of price level information may absent.

To differ whether order book is fully recovered or just partly reconstructed, OnixS::CME::MarketData::BookBase template class exposes OnixS::CME::MarketData::BookBase::state member. Returned value identifies whether book is fully reconstructed (OnixS::CME::MarketData::BookStates::Latest) or naturally refreshed (OnixS::CME::MarketData::BookStates::NaturallyRefreshed).

When order book is naturally refreshed, some price levels may absent. Price level data types (OnixS::CME::MarketData::DirectPriceLevel, OnixS::CME::MarketData::ImpliedPriceLevel) expose members (OnixS::CME::MarketData::DirectPriceLevel::exist(), OnixS::CME::MarketData::ImpliedPriceLevel::exist()) to check whether actual data is available for particular bid or ask.

Recovering Security Definitions From SecDef.dat Distributed by MDP

Handler uses real-time (incremental) feeds as the only source of market data. As far as instrument definitions are not recovered using instrument recovery feeds, the Handler provides an alternative way of obtaining instrument definitions making market data processing possible in case of market late joining. CME MDP exposes via public FTP servers secdef.dat file which includes all instrument definitions being manipulated at MDP. OnixS::CME::MarketData::NaturalRefreshOptions class exposes OnixS::CME::MarketData::NaturalRefreshOptions::definitionsFile member which defines path to the instrument definitions database provided by CME. When value for this parameter refers to a valid file, Handler processes instrument definitions available in the file for the CME channel for which Handler instance was previously constructed.

Example

Following code depicts how to run the Handler in natural refresh mode:

// 1. Establishing primary settings.
HandlerSettings settings;
setupHandlerSettings(&settings);
// 2. Constructing handler instance.
Handler handler(settings);
// 3. Setting up natural refresh.
NaturalRefreshOptions nrOptions;
nrOptions.definitionsFile = "secdef.dat";
// 4. Launching market data processing.
handler.start(nrOptions);