OnixS C++ CME Market Data Handler  4.8.0.10
API documentation
Pages/FAQ.md
Go to the documentation of this file.
1 \addtogroup faq
2 
3 \brief Frequently asked questions.
4 
5 <!-------------------------------------------------------------------------->
6 
7 \section faq-handler-single-channel Can more than one channel per Handler be processed? Alternatively, are multiple Handler instances necessary?
8 
9 One instance of OnixS::CME::MDH::Handler processes market data for a single
10 channel only. Users must create multiple instances of the Handler to process
11 data from multiple channels.
12 
13 [Permanent link to the answer](@ref faq-handler-single-channel)
14 
15 <!-------------------------------------------------------------------------->
16 
17 \section faq-handler-securities-subscribed Is the Handler implicitly subscribed to all instruments of the specified channel? Will it receive security definitions for all instruments of this channel?
18 
19 Yes, exactly.
20 
21 [Permanent link to the answer](@ref faq-handler-securities-subscribed)
22 
23 <!-------------------------------------------------------------------------->
24 
25 \section faq-filtering How does instrument/group filtering work? Why would we want to do this?
26 
27 Filtering (instrument selection) is useful when market data required for
28 specific instruments only. Instrument selection is like an inclusive
29 whitelist. E.g., if security A is selected, security-related events
30 (members of OnixS::CME::MDH::SecurityListener) are raised for security
31 A only.
32 
33 If two or more securities are selected, events are triggered only for those securities.
34 
35 \see \ref security-selection
36 
37 [Permanent link to the answer](@ref faq-filtering)
38 
39 <!-------------------------------------------------------------------------->
40 
41 \section faq-book-consistency How do we know whether the data delivered through onBookAtomicUpdate is the first or last change of a "transaction"? That is, how can it be determined that the order book is valid/consistent/not-crossed after a single onBookAtomicUpdate() call?
42 
43 It is a bit more complicated with book consistency & up-to-date. Please, note
44 that CME does not guarantee 100% book up-to-date on intermediate updates.
45 It is guaranteed only after 'End of XXX quote' market event where XXX is real or
46 implied. So you have to check this field to ensure the book is 100% up-to-date.
47 
48 It can be achieved by using book update callbacks of
49 OnixS::CME::MDH::SecurityListener rather than atomic book update
50 listening. They are publishing the books only on 'End of XXX quotes'
51 market event giving guarantee books are consistent and up-to-date.
52 
53 \see OnixS::CME::MDH::SecurityListener, OnixS::CME::MDH::MarketDataListener
54 
55 [Permanent link to the answer](@ref faq-book-consistency)
56 
57 <!-------------------------------------------------------------------------->
58 
59 \section faq-initial-book How to retrieve/receive the initial order book?
60 
61 Any OnixS::CME::MDH::SecurityListener::onBookUpdate call gives you
62 consistent order book state (except for Natural Refresh mode). If you
63 need book state at startup, you can just get a snapshot at first call.
64 
65 \see \ref book-construction-and-copying
66 
67 [Permanent link to the answer](@ref faq-initial-book)
68 
69 <!-------------------------------------------------------------------------->
70 
71 \section faq-no-market-data After switching the Operating System, even the sample program is no longer able to receive market data (code=NoNetworkActivity). However, I can ping the CME router and iLink server. Any insight or suggestions on what may be going on here?
72 
73 See \ref connectivity-troubleshooting.
74 
75 [Permanent link to the answer](@ref faq-no-market-data)
76 
77 <!-------------------------------------------------------------------------->
78 
79 \section faq-cache-limit-exceeded If Handler joins while the market is busy, warnings (code=QueueOverflow) are reported. Is there any possibility to raise the configured limit, if so how?
80 
81 When the Handler performs book recovery, it caches all the data received on incremental
82 feeds. When the market is busy, a number of cached messages may exceed configured limit
83 defined by the OnixS::CME::MDH::HandlerSettings::recoveryQueueMaxSize parameter value.
84 So, to avoid `QueueOverflow` warnings, it is necessary to increase the value of the noted
85 parameter.
86 
87 [Permanent link to the answer](@ref faq-cache-limit-exceeded)
88 
89 <!-------------------------------------------------------------------------->
90 
91 \section faq-queue-overflow What is the cause of 'QueueOverflow' warnings?
92 
93 The cause is a violation of received packets sequence (gap) that wasn't restored
94 after the OnixS::CME::MDH::RealtimeFeedSettings::outOfOrderPacketMaxInterval number
95 of packets or after the OnixS::CME::MDH::HandlerSettings::lostPacketWaitTime elapsed.
96 Violation of packet sequence can be caused by packets loss on different levels:
97 CME environment issues, network connectivity issues, system or application issues.
98 
99 Also, when Handler performs a large-scale recovery due to the gap or while joining
100 market lately, incremental packets are cached. In case of intensive data transmission,
101 queue keeping incremental packets may reach its limit causing a noted warning.
102 
103 Please refer to our [Lost multicast packets troubleshooting guide](
104 http://ref.onixs.biz/lost-multicast-packets-troubleshooting.html)
105 for more details.
106 
107 \see \ref connectivity-troubleshooting.
108 
109 [Permanent link to the answer](@ref faq-queue-overflow)
110 
111 <!-------------------------------------------------------------------------->
112 
113 \section faq-book-atomic-and-complex-update What's the difference between 'Book Atomic Update' and 'Book Update' events?
114 
115 **Book Atomic Update** (OnixS::CME::MDH::SecurityListener::onBookAtomicUpdate)
116 is an *elementary action over a book,* and usually, *there're multiple atomic
117 updates inside a single snapshot or incremental refresh*. Also, the book *may not
118 be valid between two atomic updates*. Only when all atomic updates are processed
119 from the single market event, the book is considered as valid.
120 
121 **Book Update** (OnixS::CME::MDH::SecurityListener::onBookUpdate) are raised
122 exactly at a time when all atomic updates are processed, and the book appears
123 to be *valid* and *up-to-date*.
124 
125 \see \ref book-self-building
126 
127 [Permanent link to the answer](@ref faq-book-atomic-and-complex-update)
128 
129 <!-------------------------------------------------------------------------->
130 
131 \section faq-price-dividing While processing market data for CME, I noticed that some instruments are divided by 100, others by 10000 and the others are not. How do I determine what value to scale the prices?
132 
133 Security definition sent by Market Data Platform contains fields
134 
135 - DisplayFactor (tag 9787) - for securities with non-fractional price
136 - MainFraction (tag 37702) and SubFraction (tag 37703) - for securities
137  with fractional price
138 
139 representing the multipliers to convert the CME Globex display price to
140 the conventional price.
141 
142 \see [CME Pricing documentaton](
143 http://www.cmegroup.com/confluence/display/EPICSANDBOX/MDP+3.0+-+CME+Globex+Pricing).
144 
145 [Permanent link to the answer](@ref faq-price-dividing)
146 
147 <!-------------------------------------------------------------------------->
148 
149 \section faq-handler-latency Which latency is added by the Handler?
150 
151 Minimal book update latency falls into 100-250 nanoseconds depending
152 on hardware/operating system/network conditions. Please, contact
153 [Onix Sales](mailto:sales@onixs.biz) for most recent official
154 benchmark results.
155 
156 [Permanent link to the answer](@ref faq-handler-latency)
157 
158 <!-------------------------------------------------------------------------->
159 
160 \section faq-handler-cpu-consumption What is Handler CPU consumption?
161 
162 It depends significantly on many different parameters including network,
163 hardware, operating system environment, market data rate and applied
164 handler settings.
165 
166 [Permanent link to the answer](@ref faq-handler-cpu-consumption)
167 
168 <!-------------------------------------------------------------------------->
169 
170 \section faq-expected-callback-latency What is the expected maximum latency our callback implementation should have?
171 
172 The smaller, the better. It shall be microseconds to do not
173 impact handler ability to process data on high tickers.
174 
175 [Permanent link to the answer](@ref faq-expected-callback-latency)
176 
177 <!-------------------------------------------------------------------------->
178 
179 \section faq-error-reporting How are problems with market data indicated (book became invalid)?
180 
181 The Handler reports all errors and warnings
182 through OnixS::CME::MDH::HandlerListener::onError and
183 OnixS::CME::MDH::HandlerListener::onWarning callbacks
184 respectively.
185 
186 \see \ref error-and-warning-handling
187 
188 [Permanent link to the answer](@ref faq-error-reporting)
189 
190 <!-------------------------------------------------------------------------->
191 
192 \section faq-detect-packet-issues How can packet issues (back-pressure/queuing) be diagnosed?
193 
194 The Handler allows tracing packets as they are received by active feeds
195 including out-of-order or duplicated packets (in contrast to market
196 data listening which exposes packets passed through session rules).
197 With the help of the new OnixS::CME::MDH::FeedListener listener, it is
198 possible to write advanced diagnostic services.
199 
200 \see \ref feed-event-listener
201 
202 [Permanent link to the answer](@ref faq-detect-packet-issues)