Bloomberg.Net API - response data for several securities

Assuming we send a Bloomberg request for historical data for several securities using API.Net, is there any elegant way to separate / identify the response data of each security. I know that the answer has a "sequenceNumber" field, but I'm not sure how it compares with each security. The following is a snippet of code.

Service refDataService = session.GetService("//blp/refdata"); Request request = refDataService.CreateRequest("HistoricalDataRequest"); Element securities = request.GetElement("securities"); securities.AppendValue("EURUSD CURNCY"); securities.AppendValue("USDJPY CURNCY"); securities.AppendValue("GBPUSD Curncy"); securities.AppendValue("USDCHF Curncy"); Element fields = request.GetElement("fields"); fields.AppendValue("OPEN"); fields.AppendValue("HIGH"); fields.AppendValue("LOW"); fields.AppendValue("PX_LAST"); request.Set("periodicityAdjustment", "CALENDAR"); request.Set("periodicitySelection", "DAILY"); request.Set("startDate", DateTime.Now.AddDays(-30).ToString("yyyyMMdd")); request.Set("endDate", Convert.ToString(null)); session.SendRequest(request, null); while (true) { Event eventObj = session.NextEvent(); foreach (Message msg in eventObj.GetMessages()) { if (msg.MessageType.Equals(Name.GetName("HistoricalDataResponse"))) { Element secDataArray = msg.GetElement("securityData"); Element securityData = secDataArray.GetElement(3); for (int index = 0; index < securityData.NumValues; index++) { Element fieldData = securityData.GetValueAsElement(index); Datetime time = fieldData.GetElementAsDate("date"); decimal? open = fieldData.HasElement("OPEN") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("OPEN")) : new decimal?(); decimal? high = fieldData.HasElement("HIGH") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("HIGH")) : new decimal?(); decimal? low = fieldData.HasElement("LOW") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("LOW")) : new decimal?(); decimal? close = fieldData.HasElement("PX_LAST") ? Convert.ToDecimal(fieldData.GetElementAsFloat64("PX_LAST")) : new decimal?(); } } } } 
+4
source share
4 answers

The sequenceNumber return value matches the order in which you added the securities with the AppendValue call

 securities.AppendValue("EURUSD CURNCY"); // Sequence number 1 securities.AppendValue("USDJPY CURNCY"); // Sequence number 2 securities.AppendValue("GBPUSD Curncy"); // Sequence number 3 securities.AppendValue("USDCHF Curncy"); // Sequence number 4 

According to BLPAPI: Developer's Guide :

The security sequence number that identifies the security position in the request.

+4
source

you may need another loop:

 foreach (Message msg in eventObj.GetMessages()) { Element element = msg.GetElement("securityData"); for (int i = 0; i < element.NumValues; i++) { Element security = element.GetValueAsElement(i); string ticker = security.GetElementAsString("security"); Element fields = security.GetElement("fieldData"); decimal px_last = Convert.toDecimal(fields.GetElementAsFloat64("PX_LAST")); } } 
+1
source

In Java (easily portable):

 Element securityData = msg.getElement("securityData"); String ticker = securityData.getElementAsString("security"); 
0
source

You can extract the Bloomberg code from the securityData element, for example:

 string bloombergCode = secDataArray.GetElement("security").GetValueAsString(); 
0
source

Source: https://habr.com/ru/post/1432915/


All Articles