We receive corrupted bid/ask price

We switch from RFA to EMA. Sometimes, we receive corrupted bid/ask pricing. For example, when we subscribed AAPL, bid/ask is 240/260 and in the next update they are 40/56 which are nonsense price. it looks like some quotes are mixed from different RICs. we decode msg payload inside the callback onRefreshMsg() and onUpdateMsg() and sent decoded msg to an event listener.
Also, we store handle id into a symbol-handle map. when unsubscribing symbol, we remove the the entry from the map and unregister with handle id. But sometimes when we unsubscribe a symbol using the handle id, ADS still sends the streaming quote to our system.
Best Answer
-
To investigate this kind of issue, you need to enable EMA log and tracing.
1. To enable EMA log, please run the application with this parameter: -Djava.util.logging.config.file=logging.properties
The content of logging.properites is:
#This file contains log configuration for java logging API.
# Level mapping between jdk and slf4j logging
# jdk.util.logging SLF4J
# OFF -> No Logger on
# FINEST -> TRACE
# FINER -> DEBUG
# FINE -> DEBUG
# CONFIG -> INFO
# INFO -> INFO
# WARNING -> WARN
# SEVERE -> ERROR
.level=FINEST
#handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
#java.util.logging.FileHandler.level=FINEST
#java.util.logging.FileHandler.pattern=./emaj.log
# Write 100000 bytes before rotating this file
#java.util.logging.FileHandler.limit=50000000
# Number of rotating files to be used
#java.util.logging.FileHandler.count=20
#java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
# Format timestamp as date/time with millisecond
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL %4$-7s %2$s %n%5$s2. To enable tracing, in the EmaConfig.xml set XmlTraceToStdout to 1 on the consumer
<ConsumerGroup>
<DefaultConsumer value="Consumer_1"/>
<ConsumerList>
<Consumer>
<Name value="Consumer_1"/>
<Channel value="Channel_1"/>
<Dictionary value="Dictionary_2"/>
<XmlTraceToStdout value="1"/>
</Consumer>You need to add the application log with item names when the application subscribes and unsubscribes items. With this information, we can verify handles, streams and data retrieved by the application.
0
Answers
-
Hi @fanghua.liu,
The best way to determine if it is a result of an issue in the server/back end, run a simple EMA consumer example application (packaged within the EMA download package) to observe the behavior.
With regards to the handle ID, when you unsubscribe, it is possible that some updates may already be "in-flight" which may explain the behavior you are seeing.
0 -
@nick.zincone we created two ommConsumerClient objects for AAPL and PLD separately, after AAPL is unsubscribed, the AAPL quote is still streamed using PLD ommConsumerClient. Is this class mutable or reused?
0 -
@fanghua.liu
If you are creating 2 ommConsumerClient objects, you are creating 2 connections into the server and 2 subscription channels for AAPL and PLD - one for each consumer connection. You will have to unsubscribe to both channels.
0 -
@nick.zincone I have more details on the example above. We subscribe and unsubscribe AAPL and PLD multiple times and in the last subscriptions, I get handle 10 for AAPL and handle 21 for PLD . Then I use handle 10 to unregister AAPL. But I found AAPL uses handle 21 to stream quote with PLD in onRefreshMsg and onUpdateMsg methods.
0 -
Hi @fanghua.liu,
It is difficult to determine if your application has improperly reused the same stream handles or if EMA is responsible. If you believe EMA is responsible for the confusion, I would recommend you try to replicate the specific use case in a small example that can be reproduced and evaluated by the EMA dev team.
That being said, your application opens and closes the same items multiple times across multiple connections. I'm not sure what the requirement is to do that but it appears you need to temporarily pause the stream of data and then resume at a later time. EMA has a feature called "Pause and Resume" which appears to do exactly what you may need - without the overhead and management of stream handles.
Refer to the EMA documentation for more details.
0
Categories
- All Categories
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 33 Data Model Discovery
- 682 Datastream
- 1.4K DSS
- 613 Eikon COM
- 5.2K Eikon Data APIs
- 10 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 248 ETA
- 552 WebSocket API
- 37 FX Venues
- 14 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 23 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 275 Open PermID
- 44 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 22 RDMS
- 1.8K Refinitiv Data Platform
- 622 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 26 DACS Station
- 121 Open DACS
- 1.1K RFA
- 104 UPA
- 191 TREP Infrastructure
- 228 TRKD
- 915 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 84 Workspace SDK
- 11 Element Framework
- 5 Grid
- 18 World-Check Data File
- 1 Yield Book Analytics
- 46 中文论坛