OnixS C++ eSpeed ITCH Market Data Handler  1.7.1
API documentation
Getting Started

Inner Contents

 Setting Up Feed Engine
 Replaying Log Files

Detailed Description

C++ Nasdaq NFI ITCH Market Data Handler is a C++ library that provides an access to the Nasdaq NFI market data services. Handler encapsulates all low level aspects of the market data platform allowing focusing on implementing trading solutions and market data processing algorithms. High-level C++ API allows to quickly build applications to get market data without much involve into raw protocol specifics.

All Handler classes are encapsulated into the OnixS::eSpeed::MarketData::Itch namespace. Header files are collected in the master OnixS/eSpeed/MarketData/Itch.h header file for more convenience.

The typical way of using a handler is as follows:

Configuring and Constructing the Handler

Handler's constructor accepts instance of settings class which defines values of various parameters for determination Handler's behavior. Role of the most important parameters that used in regular cases is described below.

Primary Settings

Directory for Log Files

By default, all important aspects of handler's activity is logged. Therefore the handler must know where this kind of information can be stored on a local file system. OnixS::eSpeed::MarketData::Itch::HandlerSettings::logDirectory parameter need be defined for pointing the handlers place where log files to be stored.


To run a handler's instance it is required to have a license file. When the instance is not able to find a valid license it throws an exception at the initialization stage.

OnixS::eSpeed::MarketData::Itch::HandlerSettings contains OnixS::eSpeed::MarketData::Itch::HandlerSettings::licenseDirectory member which contains path to directory containing license file(s). If it's value is empty the handler looks for the license file in current directory.

When there is more than one license file in the license directory the most significant one is used (for example, production instead of trial if both are available).


Following example demonstrates how to setup primary settings for OnixS::eSpeed::MarketData::Itch::RdiHandler:

// Create an instance handler's settings.
OnixS::eSpeed::MarketData::Itch::HandlerSettings handlerSettings;
// This option is used to control verbosity of logger.
settings.logLevel = OnixS::eSpeed::MarketData::Itch::LogLevel::Debug;
// This option is used to specify extra logger settings.
settings.logSettings = OnixS::eSpeed::MarketData::Itch::LogSettings::Default;
// Logs will be stored in 'logs' local sub folder.
settings.logDirectory = "logs";
// This option is used to instruct the Handler where to look for a valid license.
settings.licenseDirectory = "../../license";
// Set up IP addresses and port numbers for multicast feeds
handlerSettings.useFeedA = true;
handlerSettings.useFeedB = true;
OnixS::eSpeed::MarketData::Itch::Handler handler (settings);

Binding Feed Engine to the Handler

Network layer responsible for receiving market data trasmitted by Eurex data interfaces is encapsulated into a OnixS::eSpeed::MarketData::Itch::FeedEngine class. Therefore, to have successfull market data processing, it's necessary to construct instance of the Feed Engine and bind it to the previously constructed instance of a handler class:

FeedEngineSettings feSettings;
FeedEngine feedEngine(feSettings);

See Feed Engine for more details on Feed Engine.

Any market data handler does not manage life-time of bound OnixS::eSpeed::MarketData::Itch::FeedEngine instance. Therefore, keeping instance of OnixS::eSpeed::MarketData::Itch::FeedEngine valid while it's bound to the instance of OnixS::eSpeed::MarketData::Itch::Handler is fully user responsibility.

Building Order Books

The handler is able to build internal Order Books. To activate this feature register OrderBookListener.

To achieve better performance the Order Books are created in preallocated memory area. To adjust preallocated memory pool size set HandlerSettings::maxBooksObjectAmount. The default value is 500; If the preallocated objects amount is not enough to place all the created books en exception will be thrown when book creation fails.

HandlerSettings settings;
settings.buildInternalOrderBooks = true;
// ...
Handler handler(settings);
BookListener listener;

If building internal Order Books is turn on correctly, corresponding callbacks will be invoked. OrderBookListener::onOrderBookUpdated is invoked when any Order Book object's state is changed. A reference to corresponding Order Book object is passed into this callback.

It is completely ok to store a const reference to OrderBook object in user's code. The lifetime of each Order Book object (except for snapshots) is equal to lifetime of the handler's object. But state of these objects can be changed by system at period of time between any OrderListener callback and OrderBookListener::onOrderBookUpdated callback are invoked.
It is forbidden to change state of any object passed into user's callback. In debug version every user's callback is being checked for data corruption or modification.

OrderBookListener::onOrderBookOutOfDate is invoked if Order Book object is out is of date when system detects inactivity.

For more and up-to-date information on getting started aspects, see GettingStarted sample from the samples collection available in distributive package.