How to use Spectra Application Listener callbacks
Using callbacks during the recovery.
The recovery process is started when there is inconsistent Market Data for a particular Instrument. At the start of the recovery process, the following callback is fired:
/// Fired when recovery is started /// @param subsItem Description of the instrument virtual void InstrumentListener::onRecoveryStarted( SpectraSubscriptionItem const& subsItem );
During the recovery onSnapshot and onIncriment callbacks are fired to provide a user with the most recent Market Data that the Adapter has and the data can be applied:
/// Fired when update for instrument is available. /// @param subsItem Description of the instrument /// @param msgs Increment container with group entry inside Market Data - Incremental Refresh message assigned to instrument. /// @param incrementsCount Increments count into Msgs /// @return false if book need start recovery, otherwise true /// @note it is possible that last message in msgs contains LastFragment==0Â /// (in case when FIX message with LastFragment==1 doesn't contain updates for this subsItem) virtual bool InstrumentListener::onIncrement( SpectraSubscriptionItem const& subsItem, Engine::FIXMessage const* const* msgs, size_t incrementsCount ); /// Fired when user should reset book with the bnew values. /// @param subsItem Description of the instrument /// @param msgs Snapshots container /// @param snapshotsCount Snapshots count into Msgs virtual void InstrumentListener::onSnapshot( SpectraSubscriptionItem const& subsItem, Engine::FIXMessage const* const* msgs, size_t snapshotsCount);
But the Market Data can't be treated as actual on the Exchange.
The Market Data for an instrument can be considered as actual only after onRecoveryStopped callback:
/// Fired when recovery is ended /// @param subsItem Description of the instrument /// @param reason Reason of recovery virtual void InstrumentListener::onRecoveryStopped( SpectraSubscriptionItem const& subsItem, RecoveryReason reason );
It means that the recovery process has been done and Market Data is in a consistent state.
How MOEX Spectra Market Data Adapter reacts on Sequence Reset message
The new type of messages (a message 'Sequence Reset') was introduced in Spectra FAST protocol specification v 1.4.2.Â
MOEX Spectra Market Data Adapter handles Sequence Reset message in the following way:
A Sequence Reset message received in Incremental feed initiates recovery mechanism for all subscribed instruments.Â
In this case, callbacks Spectra::InstrumentListener::onRecoveryStarted() and Spectra::InstrumentListener::onBookReset() are fired.- Sequence filtering mechanism isn't applied to Sequence Reset messages.Â
Therefore, OnRecoveryStarted and OnBookReset callbacks would be fired for each sequence reset message (i.e. twice due to A-B arbitrage).Â