Query FieldList obj using field ids
Hi all,
I have issues with FieldList forth method. The below doesn't work as expected :
const int type = updateMsg.getUpdateTypeNum();
if (type == INSTRUMENT_UPDATE_QUOTE )
decode_quote( updateMsg.getPayload().getFieldList());
void AppClient::decode_quote( const FieldList& fl ) {
enum { TIMESTAMP_FID=5, BID_FID=22, ASK_FID=25, BIDSIZE_FID=30, ASKSIZE_FID=31 };
cout << fl.toString()<<endl;
fl.forth(TIMESTAMP_FID);
const FieldEntry& ft = fl.getEntry();
const OmmTime& time = ft.getTime();
fl.reset();
if ( fl.forth(BID_FID) ) {
const FieldEntry& fb = fl.getEntry();
cout << " bid: " << fb.getReal().getAsDouble();
fl.forth(BIDSIZE_FID);
const FieldEntry& fbs = fl.getEntry();
cout << " size: " << fbs.getReal().getAsDouble(); fl.reset();
}
else if(fl.forth(ASK_FID)) {
const FieldEntry& fa = fl.getEntry();
cout << " ask: " << fa.getReal().getAsDouble();
fl.forth(ASKSIZE_FID);
const FieldEntry& fas = fl.getEntry();
cout << " size: " << fas.getReal().getAsDouble(); fl.reset();
}
cout << " tm: "<< (UInt64)time.getHour() << ":" << (UInt64)time.getMinute() << ":" << (UInt64)time.getSecond() << endl; }
the above never prints ASK price & size, only the bid side but fl.toString() prints both.
Am I doing something wrong ?
Thanks
Best Answer
-
Hi @gparl
Thank you for the explanation.
forth() method will Iterates through the list of Data and end the iterator at the end of the container if it cannot find the matching FID.
You will have to reset the iterator before starting a new forth.
In fact, it would be more efficient if you use forth(<search by list>) with while loop.
Here is an example
ElementList searchList;
// specify the set of fids to search for
searchList.addArray("", OmmArray().addInt(5).addInt(22).addInt(25).addInt(30).addInt(31).complete()).complete();
while ( fl.forth( searchList ) ) // search for a set of matching fids
{
const FieldEntry& fe = fl.getEntry();
cout << "Name: " << fe.getName() << " Value: ";
if ( fe.getCode() == Data::BlankEnum )
cout << " blank" << endl;
else
switch ( fe.getFieldId() )
{
case 5:
//Do stuff
break0
Answers
-
Hi @gparl
From what I understand, you want to print both Bid-Bid size and Ask-Ask size, right?
You have your Bid-Ask in if-else statement, so it will print either one not both.
If you want to print both Bid and Ask, you should remove 'else'
0 -
Hi @Warat B,
The updateMsg has either the Bid or Ask side, not both.
cout << fl.toString()<<endl;
the above prints the msg, either bid or ask, works as expected...
if ( fl.forth(BID_FID) ) { works whenever there are bid data }
else if(fl.forth(ASK_FID)) { never comes here, despite fl.toString() dumping ASK side data}
Has anyone used forth() method with field ids? how it suppose to work ?
0 -
Hi Warat,
An extra fl.reset() before querying the Ask side did the trick :-)
the while loop is ok only if you want to dump the data to stdout, if you try to populate internal structures/objects it will get very ugly / messy...
thanks for helping!
0
Categories
- All Categories
- 6 AHS
- 39 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 367 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 59 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛