Example #1
0
        private void processSubscriptionStatus(Event eventObj, Session session)
        {
            System.Console.WriteLine("Processing SUBSCRIPTION_STATUS");
            foreach (Message msg in eventObj)
            {
                string topic = (string)msg.CorrelationID.Object;
                System.Console.WriteLine(System.DateTime.Now.ToString("s") +
                                         ": " + topic + " - " + msg.MessageType);

                if (msg.HasElement(REASON))
                {
                    // This can occur on SubscriptionFailure.
                    Element reason = msg.GetElement(REASON);
                    System.Console.WriteLine("\t" +
                                             reason.GetElement(CATEGORY).GetValueAsString() +
                                             ": " + reason.GetElement(DESCRIPTION).GetValueAsString());
                }

                if (msg.HasElement(EXCEPTIONS))
                {
                    // This can occur on SubscriptionStarted if at least
                    // one field is good while the rest are bad.
                    Element exceptions = msg.GetElement(EXCEPTIONS);
                    for (int i = 0; i < exceptions.NumValues; ++i)
                    {
                        Element exInfo  = exceptions.GetValueAsElement(i);
                        Element fieldId = exInfo.GetElement(FIELD_ID);
                        Element reason  = exInfo.GetElement(REASON);
                        System.Console.WriteLine("\t" + fieldId.GetValueAsString() +
                                                 ": " + reason.GetElement(CATEGORY).GetValueAsString());
                    }
                }
                System.Console.WriteLine("");
            }
        }
        // return true if processing is completed, false otherwise
        private void processResponseEvent(Event eventObj)
        {
            foreach (Message msg in eventObj.GetMessages())
            {
                if (msg.HasElement(RESPONSE_ERROR))
                {
                    printErrorInfo("REQUEST FAILED: ", msg.GetElement(RESPONSE_ERROR));
                    continue;
                }

                Element data          = msg.GetElement(DATA);
                Element securities    = data.GetElement(SECURITY_DATA);
                int     numSecurities = securities.NumValues;
                System.Console.WriteLine("Processing " + numSecurities + " securities:");
                for (int i = 0; i < numSecurities; ++i)
                {
                    Element security = securities.GetValueAsElement(i);
                    string  ticker   = security.GetElementAsString(SECURITY);
                    System.Console.WriteLine("\nTicker: " + ticker);
                    if (security.HasElement("securityError"))
                    {
                        printErrorInfo("\tSECURITY FAILED: ",
                                       security.GetElement(SECURITY_ERROR));
                        continue;
                    }

                    Element fields = security.GetElement(FIELD_DATA);
                    if (fields.NumElements > 0)
                    {
                        System.Console.WriteLine("FIELD\t\tVALUE");
                        System.Console.WriteLine("-----\t\t-----");
                        int numElements = fields.NumElements;
                        for (int j = 0; j < numElements; ++j)
                        {
                            Element field = fields.GetElement(j);
                            System.Console.WriteLine(field.Name + "\t\t" +
                                                     field.GetValueAsString());
                        }
                    }
                    System.Console.WriteLine("");
                    Element fieldExceptions = security.GetElement(FIELD_EXCEPTIONS);
                    if (fieldExceptions.NumValues > 0)
                    {
                        System.Console.WriteLine("FIELD\t\tEXCEPTION");
                        System.Console.WriteLine("-----\t\t---------");
                        for (int k = 0; k < fieldExceptions.NumValues; ++k)
                        {
                            Element fieldException =
                                fieldExceptions.GetValueAsElement(k);
                            printErrorInfo(fieldException.GetElementAsString(FIELD_ID) +
                                           "\t\t", fieldException.GetElement(ERROR_INFO));
                        }
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// Request status event
        /// </summary>
        /// <param name="eventObj"></param>
        /// <param name="session"></param>
        private void processRequestStatusEvent(Event eventObj, Session session)
        {
            List <string> dataList = new List <string>();

            // process status message
            foreach (Message msg in eventObj)
            {
                DataGridViewRow dataRow = (DataGridViewRow)msg.CorrelationID.Object;
                if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("SubscriptionStarted")))
                {
                    // set subscribed color
                    foreach (DataGridViewCell cell in dataRow.Cells)
                    {
                        cell.Style.BackColor = Color.LightGreen;
                    }
                    try
                    {
                        // check for error
                        if (msg.HasElement("exceptions"))
                        {
                            // subscription has error
                            Element error       = msg.GetElement("exceptions");
                            int     searchIndex = 0;
                            for (int errorIndex = 0; errorIndex < error.NumValues; errorIndex++)
                            {
                                Element errorException = error.GetValueAsElement(errorIndex);
                                string  field          = errorException.GetElementAsString(FIELD_ID);
                                Element reason         = errorException.GetElement(REASON);
                                string  message        = reason.GetElementAsString(DESCRIPTION);
                                for (; searchIndex < dataGridViewData.ColumnCount - 1; searchIndex++)
                                {
                                    if (field == dataGridViewData.Columns[searchIndex].Name)
                                    {
                                        dataRow.Cells[searchIndex].Value = message;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        toolStripStatusLabel1.Text = e.Message;
                    }
                }
                else
                {
                    // check for subscription failure
                    if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("SubscriptionFailure")))
                    {
                        if (msg.HasElement(REASON))
                        {
                            Element reason  = msg.GetElement(REASON);
                            string  message = reason.GetElementAsString(DESCRIPTION);
                            dataRow.Cells[1].Value = message;
                        }
                    }
                }
            }
        }
Example #4
0
 /// <summary>
 /// Process subscription data
 /// </summary>
 /// <param name="eventObj"></param>
 /// <param name="session"></param>
 private void processRequestDataEvent(Event eventObj, Session session)
 {
     d_data.BeginLoadData();
     // process message
     foreach (Message msg in eventObj)
     {
         if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("IntradayBarResponse")))
         {
             if (msg.HasElement(RESPONSE_ERROR))
             {
                 // process error
                 Element error = msg.GetElement(RESPONSE_ERROR);
                 if (msg.NumElements == 1)
                 {
                     d_data.Rows.Add(new object[] { d_requestSecurity, error.GetElementAsString(MESSAGE) });
                     return;
                 }
             }
             // process bar data
             Element barDataArray = msg.GetElement("barData");
             int     numberOfBars = barDataArray.NumValues;
             foreach (Element barData in barDataArray.Elements)
             {
                 if (barData.Name.ToString() == "barTickData")
                 {
                     for (int pointIndex = 0; pointIndex < barData.NumValues; pointIndex++)
                     {
                         int      fieldIndex = 0;
                         object[] dataValues = new object[d_data.Columns.Count];
                         Element  fields     = barData.GetValueAsElement(pointIndex);
                         foreach (DataColumn col in d_data.Columns)
                         {
                             if (fields.HasElement(col.ColumnName))
                             {
                                 // process field data
                                 Element item = fields.GetElement(col.ColumnName);
                                 dataValues[fieldIndex] = item.GetValueAsString();
                             }
                             else
                             {
                                 if (col.ColumnName == "security")
                                 {
                                     dataValues[fieldIndex] = d_requestSecurity;
                                 }
                                 else
                                 {
                                     dataValues[fieldIndex] = DBNull.Value;
                                 }
                             }
                             fieldIndex++;
                         } // end foreach
                         // save bar data
                         d_data.Rows.Add(dataValues);
                     } // end for loop
                 }     // end if
             }         // end foreach
         }             // end if
     }                 // end foreach
     d_data.EndLoadData();
 }
Example #5
0
 private void processElement(Element element)
 {
     if (element.IsArray)
     {
         System.Console.WriteLine("\t\t" + element.Name);
         // process array
         int numOfValues = element.NumValues;
         for (int i = 0; i < numOfValues; ++i)
         {
             // process array data
             processElement(element.GetValueAsElement(i));
         }
     }
     else if (element.NumElements > 0)
     {
         System.Console.WriteLine("\t\t" + element.Name);
         int numOfElements = element.NumElements;
         for (int i = 0; i < numOfElements; ++i)
         {
             // process child elements
             processElement(element.GetElement(i));
         }
     }
     else
     {
         // Assume all values are scalar.
         System.Console.WriteLine("\t\t" + element.Name
                                  + " = " + element.GetValueAsString());
     }
 }
        }//end printErrorInfo

        bool ProcessExceptions(Message msg)
        {
            Element securityData     = msg.GetElement(SECURITY_DATA);
            Element field_exceptions = securityData.GetElement(FIELD_EXCEPTIONS);

            if (field_exceptions.NumValues > 0)
            {
                Element element       = field_exceptions.GetValueAsElement(0);
                Element field_id      = element.GetElement(FIELD_ID);
                Element error_info    = element.GetElement(ERROR_INFO);
                Element error_message = error_info.GetElement(MESSAGE);
                System.Console.WriteLine(field_id);
                System.Console.WriteLine(error_message);
                return(true);
            }
            return(false);
        }
Example #7
0
        private void processServiceEvent(Event evt, Session session)
        {
            System.Console.WriteLine("\nProcessing " + evt.Type);

            foreach (Message msg in evt)
            {
                if (msg.MessageType.Equals(SERVICE_OPENED))
                {
                    System.Console.WriteLine("Service opened...");

                    Service service = session.GetService(d_service);

                    Request request = service.CreateRequest("CancelRoute");

                    //request.set("EMSX_REQUEST_SEQ", 1);
                    //request.set("EMSX_TRADER_UUID", 1234567);

                    Element routes = request.GetElement("ROUTES"); //Note, the case is important.
                    Element route  = routes.AppendElement();       // Multiple routes can be cancelled in a single request
                    route.GetElement("EMSX_SEQUENCE").SetValue(3657996);
                    route.GetElement("EMSX_ROUTE_ID").SetValue(1);


                    System.Console.WriteLine("Request: " + request.ToString());

                    requestID = new CorrelationID();

                    // Submit the request
                    try
                    {
                        session.SendRequest(request, requestID);
                    }
                    catch (Exception ex)
                    {
                        System.Console.Error.WriteLine("Failed to send the request: " + ex.Message);
                    }
                }
                else if (msg.MessageType.Equals(SERVICE_OPEN_FAILURE))
                {
                    System.Console.Error.WriteLine("Error: Service failed to open");
                }
            }
        }
        private void distributeMessage(Message msg)
        {
            Service service = msg.Service;

            List <int> failedEntitlements = new List <int>();

            Element securities    = msg.GetElement(SECURITY_DATA);
            int     numSecurities = securities.NumValues;

            System.Console.WriteLine("Processing " + numSecurities + " securities:");
            for (int i = 0; i < numSecurities; ++i)
            {
                Element security     = securities.GetValueAsElement(i);
                String  ticker       = security.GetElementAsString(SECURITY);
                Element entitlements = ((security.HasElement(EID_DATA) ?
                                         security.GetElement(EID_DATA) : null));

                int numUsers = d_identities.Count;
                if (entitlements != null)
                {
                    // Entitlements are required to access this data
                    for (int j = 0; j < numUsers; ++j)
                    {
                        failedEntitlements.Clear();
                        Identity identity = (Identity)d_identities[j];
                        if (identity.HasEntitlements(entitlements, service,
                                                     failedEntitlements))
                        {
                            System.Console.WriteLine("User: "******" is entitled to get data for: " + ticker);
                            // Now Distribute message to the user.
                        }
                        else
                        {
                            System.Console.WriteLine("User: "******" is NOT entitled to get data for: " + ticker +
                                                     " - Failed eids: ");
                            printFailedEntitlements(failedEntitlements);
                        }
                    }
                }
                else
                {
                    // No Entitlements are required to access this data.
                    for (int j = 0; j < numUsers; ++j)
                    {
                        System.Console.WriteLine("User: "******" is entitled to get data for: " + ticker);
                        // Now Distribute message to the user.
                    }
                }
            }
        }
Example #9
0
        /// <summary>
        /// Process data and populate to listview
        /// </summary>
        /// <param name="eventObj"></param>
        private void processData(Event eventObj)
        {
            // process data
            foreach (Message msg in eventObj)
            {
                // get correlation id
                int scenario   = (int)msg.CorrelationID.Value % NUMBER_OF_SCENARIO + 1;
                int priceIndex = (int)msg.CorrelationID.Value / NUMBER_OF_SCENARIO;

                // check for request error
                if (msg.HasElement(RESPONSE_ERROR))
                {
                    MessageBox.Show("REQUEST FAILED: " +
                                    msg.GetElement(RESPONSE_ERROR).ToString(), "Request Error");
                    continue;
                }

                // get securities
                Element securities    = msg.GetElement(SECURITY_DATA);
                int     numSecurities = securities.NumValues;
                for (int i = 0; i < numSecurities; ++i)
                {
                    // get security
                    Element security = securities.GetValueAsElement(i);
                    string  ticker   = security.GetElementAsString(SECURITY);
                    // check for security error
                    if (security.HasElement("securityError"))
                    {
                        MessageBox.Show("SECURITY FAILED: " +
                                        security.GetElement(SECURITY_ERROR).ToString(), "Security Error");
                        continue;
                    }
                    // get fields
                    Element returnFields = security.GetElement(FIELD_DATA);

                    // populate scenario fields on Analytic tab
                    populateScenario(dataGridViewAnalyticInput.Columns[scenario].HeaderText, priceIndex, returnFields);
                }
            }
        }
        bool ProcessErrors(Message msg)
        {
            Element securityData = msg.GetElement(SECURITY_DATA);

            if (securityData.HasElement(SECURITY_ERROR))
            {
                Element security_error = securityData.GetElement(SECURITY_ERROR);
                Element error_message  = security_error.GetElement(MESSAGE);
                System.Console.WriteLine(error_message);
                return(true);
            }
            return(false);
        }
Example #11
0
 private void processMessage(Message msg)
 {
     if (msg.HasElement(RESPONSE_ERROR))
     {
         // Intraday bar request exception
         Element reason = msg.GetElement(RESPONSE_ERROR);
         System.Console.WriteLine("\t" +
                                  reason.GetElement(CATEGORY).GetValueAsString() +
                                  ": " + reason.GetElement(MESSAGE).GetValueAsString());
     }
     else
     {
         Element data    = msg.GetElement(BAR_DATA).GetElement(BAR_TICK_DATA);
         int     numBars = data.NumValues;
         System.Console.WriteLine("Response contains " + numBars + " bars");
         System.Console.WriteLine("Datetime\t\tOpen\t\tHigh\t\tLow\t\tClose" +
                                  "\t\tNumEvents\tVolume");
         for (int i = 0; i < numBars; ++i)
         {
             Element         bar         = data.GetValueAsElement(i);
             Datetime        time        = bar.GetElementAsDate(TIME);
             double          open        = bar.GetElementAsFloat64(OPEN);
             double          high        = bar.GetElementAsFloat64(HIGH);
             double          low         = bar.GetElementAsFloat64(LOW);
             double          close       = bar.GetElementAsFloat64(CLOSE);
             int             numEvents   = bar.GetElementAsInt32(NUM_EVENTS);
             long            volume      = bar.GetElementAsInt64(VOLUME);
             System.DateTime sysDatetime = time.ToSystemDateTime();
             System.Console.WriteLine(
                 sysDatetime.ToString("s") + "\t" +
                 open.ToString("C") + "\t\t" +
                 high.ToString("C") + "\t\t" +
                 low.ToString("C") + "\t\t" +
                 close.ToString("C") + "\t\t" +
                 numEvents + "\t\t" +
                 volume);
         }
     }
 }
        private void printField(Element field)
        {
            String fldId, fldMnemonic, fldDesc;

            fldId = field.GetElementAsString(FIELD_ID);
            if (field.HasElement(FIELD_INFO))
            {
                Element fldInfo = field.GetElement(FIELD_INFO);
                fldMnemonic = fldInfo.GetElementAsString(FIELD_MNEMONIC);
                fldDesc     = fldInfo.GetElementAsString(FIELD_DESC);

                System.Console.WriteLine(padString(fldId, ID_LEN) +
                                         padString(fldMnemonic, MNEMONIC_LEN) +
                                         padString(fldDesc, DESC_LEN));
            }
            else
            {
                Element fldError = field.GetElement(FIELD_ERROR);
                fldDesc = fldError.GetElementAsString(FIELD_MSG);

                System.Console.WriteLine("\n ERROR: " + fldId + " - " + fldDesc);
            }
        }
Example #13
0
        /// <summary>
        /// Populate listview control with scenario data
        /// </summary>
        /// <param name="scenario"></param>
        /// <param name="priceIndex"></param>
        /// <param name="returnFields"></param>
        private void populateScenario(string scenario, int priceIndex, Element returnFields)
        {
            int currentPriceIndex = 0;

            if (returnFields.NumElements > 0)
            {
                // get number of fields returned
                int numElements = returnFields.NumElements;
                for (int j = 0; j < numElements; ++j)
                {
                    // reset index
                    currentPriceIndex = -1;
                    // get field
                    Element field = returnFields.GetElement(j);
                    foreach (ListViewItem item in listViewScenarios.Items)
                    {
                        // look for correct price
                        if (item.Text.Contains("Price"))
                        {
                            // move to next price position
                            currentPriceIndex++;
                        }

                        // check if in correct price slot
                        if (currentPriceIndex < priceIndex)
                        {
                            // continue to search for correct price section
                            continue;
                        }

                        // check if row updateable
                        if (item.Tag != null && item.Tag.ToString().Trim().Length > 0)
                        {
                            // check if correct row
                            if (item.Tag.ToString() == field.Name.ToString())
                            {
                                // populate data
                                int index = d_scenarioIndexLookup[scenario];
                                item.SubItems[index].Text = field.GetValueAsString();
                                break;
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Read the reference bulk field contents
        /// </summary>
        /// <param name="refBulkField"></param>
        private void processBulkField(Element refBulkField)
        {
            System.Console.WriteLine("\n" + refBulkField.Name);
            // Get the total number of Bulk data points
            int numofBulkValues = refBulkField.NumValues;

            for (int bvCtr = 0; bvCtr < numofBulkValues; bvCtr++)
            {
                Element bulkElement = refBulkField.GetValueAsElement(bvCtr);
                // Get the number of sub fields for each bulk data element
                int numofBulkElements = bulkElement.NumElements;
                // Read each field in Bulk data
                for (int beCtr = 0; beCtr < numofBulkElements; beCtr++)
                {
                    Element elem = bulkElement.GetElement(beCtr);
                    System.Console.WriteLine("\t\t" + elem.Name + " = "
                                             + elem.GetValueAsString());
                }
            }
        }
        // return true if processing is completed, false otherwise
        private void processResponseEvent(Event eventObj)
        {
            foreach (Message msg in eventObj)
            {
                if (msg.HasElement(RESPONSE_CODE))
                {
                    Element responseCode = msg.GetElement(RESPONSE_CODE);
                    int     resultCode   = responseCode.GetElementAsInt32(RESULT_CODE);
                    if (resultCode > 0)
                    {
                        string message  = responseCode.GetElementAsString(RESULT_TEXT);
                        string sourceId = responseCode.GetElementAsString(SOURCE_ID);
                        System.Console.WriteLine("Request Failed: " + message);
                        System.Console.WriteLine("Source ID: " + sourceId);
                        System.Console.WriteLine("Resoult Code: " + resultCode);
                        continue;
                    }
                }

                Element snapshot    = msg.GetElement(SNAPSHOT);
                int     numElements = snapshot.NumElements;
                for (int i = 0; i < numElements; ++i)
                {
                    Element dataItem = snapshot.GetElement(i);
                    // Checking if the data item is Bulk data item
                    if (dataItem.IsArray)
                    {
                        processBulkData(dataItem);
                    }
                    else
                    {
                        System.Console.WriteLine("\t" + dataItem.Name + " = "
                                                 + dataItem.GetValueAsString());
                    }
                }
            }
        }
        private void processServiceEvent(Event evt, Session session)
        {
            System.Console.WriteLine("\nProcessing " + evt.Type);

            foreach (Message msg in evt)
            {
                if (msg.MessageType.Equals(SERVICE_OPENED))
                {
                    System.Console.WriteLine("Service opened...");

                    Service service = session.GetService(d_service);

                    Request request = service.CreateRequest("GetFills");

                    // The Date/Time values from and to may contain a timezone element
                    request.Set("FromDateTime", "2017-11-06T00:00:00.000+00:00");
                    request.Set("ToDateTime", "2017-11-06T23:59:00.000+00:00");

                    Element scope = request.GetElement("Scope");


                    // The name of the user team
                    //scope.SetChoice("Team");
                    //scope.SetElement("Team", "RCAM_API");

                    // Use the Trading System view - boolean
                    //scope.SetChoice("TradingSystem");
                    //scope.SetElement("TradingSystem",False);

                    // One or more specified UUIDs
                    scope.SetChoice("Uuids");
                    scope.GetElement("Uuids").AppendValue(1234567);

                    //filterBy = request.GetElement("FilterBy");

                    // The backet name, as created in the terminal
                    //filterBy.SetChoice("Basket");
                    //filterBy.GetElement("Basket").AppendValue("TESTRJC");

                    // The Multileg ID, can append multiple values
                    //filterBy.SetChoice("Multileg");
                    //filterBy.GetElement("Multileg").AppendValue("12345");
                    //filterBy.GetElement("Multileg").AppendValue("56478");

                    // Specific order numbers and route IDs
                    //filterBy.SetChoice("OrdersAndRoutes");
                    //newOrder = filterBy.GetElement("OrdersAndRoutes").AppendElement();
                    //newOrder.SetElement("OrderId",2744093);
                    //newOrder.SetElement("RouteId",1);

                    System.Console.WriteLine("Request: " + request.ToString());

                    requestID = new CorrelationID();

                    // Submit the request
                    try
                    {
                        session.SendRequest(request, requestID);
                    }
                    catch (Exception ex)
                    {
                        System.Console.Error.WriteLine("Failed to send the request: " + ex.Message);
                    }
                }
                else if (msg.MessageType.Equals(SERVICE_OPEN_FAILURE))
                {
                    System.Console.Error.WriteLine("Error: Service failed to open");
                }
            }
        }
Example #17
0
        private IEnumerable<Tuple<string, SortedList<DateTime, dynamic>>> ParseUniversal(Element securityDataArray, List<IField> fields)
        {
            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.P)
            {
                Console.WriteLine("\nDownload Paused, press c to continue");
                while (!Console.KeyAvailable || Console.ReadKey(true).Key  != ConsoleKey.C)
                {
                    Thread.Sleep(1000 * 1);
                }
            }

            var fieldNames = from f in fields
                             select f.FieldName.ToUpper();

            SortedList<DateTime, dynamic> output;

            if (securityDataArray.IsArray)
            {
                for (int i = 0; i < securityDataArray.NumValues; i++) //data for multiple securities
                {
                    Element securityData = securityDataArray.GetValueAsElement(i); //single security
                    string securityName = securityData.GetElementAsString("security");
                    Element fieldData = securityData.GetElement("fieldData"); //data for multiple fields.

                    int j = -1;
                    foreach (var fieldName in fieldNames)
                    {
                        j++;
                        Element field = fieldData.GetElement(fieldName);

                        output = new SortedList<DateTime, dynamic>();

                        if (field.NumValues>0)
                        {
                            var data = field.GetValue(); //check field.NumValues - sometimes NumValues>1 - then output into single field - because it is single field but with multiple values

                            string dataType;
                            if (fields[j].Type != null && fields[j].Type.Length > 0)
                                dataType = fields[j].Type;
                            else
                                dataType = field.Datatype.ToString();

                            var result = ConvertDataType(dataType, field);

                            output.Add(ExtensionMethods.GetBusinessDay(DateTime.Today, -1), result.Item2);
                        }
                        yield return Tuple.Create(securityName,output);
                    }
                }
            }
            else
            {
                var Outputs = new SortedList<DateTime, dynamic>[fieldNames.Count()];

                for (int i = 0; i < Outputs.Length; i++)
                    Outputs[i] = new SortedList<DateTime, dynamic>();

                Element fieldDataArray = securityDataArray.GetElement("fieldData");  // data for multiple fields, multiple dates
                string securityName = securityDataArray.GetElementAsString("security");

                for (int i = 0; i < fieldDataArray.NumValues; i++) //equals 0 if no fields or security wrong
                {
                    Element fieldData = fieldDataArray.GetValueAsElement(i);  // data for multiple fields, single date

                    int j = -1;

                    foreach (var fieldName in fieldNames)
                    {
                        j++;

                        Element date = fieldData.GetElement("date");

                        if (!fieldData.HasElement(fieldName))
                            continue;

                        Element field = fieldData.GetElement(fieldName);

                        dynamic elementValue = null;
                        bool ok = false;

                        string dataType;

                        if (fields[j].Type != null && fields[j].Type.Length > 0)
                            dataType = fields[j].Type;
                        else
                            dataType = field.Datatype.ToString();

                        var result = ConvertDataType(dataType, field);
                        ok = result.Item1;
                        elementValue = result.Item2;

                        if (!ok) { elementValue = null; }

                        Outputs[j].Add(date.GetValueAsDatetime().ToSystemDateTime(), elementValue);
                    }
                }

                for (int i = 0; i < Outputs.Length; i++)
                    yield return Tuple.Create(securityName, Outputs[i]);
            }
        }
        private void processServiceEvent(Event evt, Session session)
        {
            System.Console.WriteLine("\nProcessing " + evt.Type);

            foreach (Message msg in evt)
            {
                if (msg.MessageType.Equals(SERVICE_OPENED))
                {
                    System.Console.WriteLine("Service opened...");

                    Service service = session.GetService(d_service);

                    Request request = service.CreateRequest("RouteEx");

                    // The fields below are mandatory
                    request.Set("EMSX_SEQUENCE", 3664532); // Order number
                    request.Set("EMSX_AMOUNT", 500);
                    request.Set("EMSX_BROKER", "BMTB");
                    request.Set("EMSX_HAND_INSTRUCTION", "ANY");
                    request.Set("EMSX_ORDER_TYPE", "MKT");
                    request.Set("EMSX_TICKER", "IBM US Equity");
                    request.Set("EMSX_TIF", "DAY");

                    // The fields below are optional
                    //request.Set("EMSX_ACCOUNT","TestAccount");
                    //request.Set("EMSX_BOOKNAME","BookName");
                    //request.Set("EMSX_CFD_FLAG", "1");
                    //request.Set("EMSX_CLEARING_ACCOUNT", "ClrAccName");
                    //request.Set("EMSX_CLEARING_FIRM", "FirmName");
                    //request.Set("EMSX_EXEC_INSTRUCTION", "Drop down values from EMSX Ticket");
                    //request.Set("EMSX_GET_WARNINGS", "0");
                    //request.Set("EMSX_GTD_DATE", "20170105");
                    //request.Set("EMSX_LIMIT_PRICE", 123.45);
                    //request.Set("EMSX_LOCATE_BROKER", "BMTB");
                    //request.Set("EMSX_LOCATE_ID", "SomeID");
                    //request.Set("EMSX_LOCATE_REQ", "Y");
                    //request.Set("EMSX_NOTES", "Some notes");
                    //request.Set("EMSX_ODD_LOT", "0");
                    //request.Set("EMSX_P_A", "P");
                    //request.Set("EMSX_RELEASE_TIME", 34341);
                    //request.Set("EMSX_REQUEST_SEQ", 1001);
                    //request.Set("EMSX_ROUTE_REF_ID", "UniqueRef");
                    //request.Set("EMSX_STOP_PRICE", 123.5);
                    //request.Set("EMSX_TRADER_UUID", 1234567);

                    // Below we establish the strategy details

                    Element strategy = request.GetElement("EMSX_STRATEGY_PARAMS");
                    strategy.SetElement("EMSX_STRATEGY_NAME", "VWAP");

                    Element indicator = strategy.GetElement("EMSX_STRATEGY_FIELD_INDICATORS");
                    Element data      = strategy.GetElement("EMSX_STRATEGY_FIELDS");

                    // Strategy parameters must be appended in the correct order. See the output
                    // of GetBrokerStrategyInfo request for the order. The indicator value is 0 for
                    // a field that carries a value, and 1 where the field should be ignored


                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "09:30:00"); // StartTime
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 0);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "10:30:00"); // EndTime
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 0);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // Max%Volume
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // %AMSession
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // OPG
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // MOC
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // CompletePX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // TriggerPX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // DarkComplete
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // DarkCompPX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // RefIndex
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");             // Discretion
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);


                    System.Console.WriteLine("Request: " + request.ToString());

                    requestID = new CorrelationID();

                    // Submit the request
                    try
                    {
                        session.SendRequest(request, requestID);
                    }
                    catch (Exception ex)
                    {
                        System.Console.Error.WriteLine("Failed to send the request: " + ex.Message);
                    }
                }
                else if (msg.MessageType.Equals(SERVICE_OPEN_FAILURE))
                {
                    System.Console.Error.WriteLine("Error: Service failed to open");
                }
            }
        }
Example #19
0
        private void run(String[] args)
        {
            d_serverHost = "localhost";
            d_serverPort = 8194;

            if (!parseCommandLine(args))
            {
                return;
            }

            SessionOptions sessionOptions = new SessionOptions();

            sessionOptions.ServerHost = d_serverHost;
            sessionOptions.ServerPort = d_serverPort;

            System.Console.WriteLine("Connecting to " + d_serverHost
                                     + ":" + d_serverPort);
            Session session        = new Session(sessionOptions);
            bool    sessionStarted = session.Start();

            if (!sessionStarted)
            {
                System.Console.WriteLine("Failed to start session.");
                return;
            }
            if (!session.OpenService(APIFLDS_SVC))
            {
                System.Console.WriteLine("Failed to open service: "
                                         + APIFLDS_SVC);
                return;
            }

            Service fieldInfoService = session.GetService(APIFLDS_SVC);
            Request request          = fieldInfoService.CreateRequest(
                "CategorizedFieldSearchRequest");

            request.Set("searchSpec", "last price");
            Element exclude = request.GetElement("exclude");

            exclude.SetElement("fieldType", "Static");
            request.Set("returnFieldDocumentation", false);

            System.Console.WriteLine("Sending Request: " + request);
            session.SendRequest(request, null);

            while (true)
            {
                try
                {
                    Event eventObj = session.NextEvent();
                    foreach (Message msg in eventObj)
                    {
                        if (eventObj.Type != Event.EventType.RESPONSE &&
                            eventObj.Type != Event.EventType.PARTIAL_RESPONSE)
                        {
                            continue;
                        }
                        if (msg.HasElement(FIELD_SEARCH_ERROR))
                        {
                            System.Console.WriteLine(msg);
                            continue;
                        }

                        Element categories    = msg.GetElement(CATEGORY);
                        int     numCategories = categories.NumValues;

                        for (int catIdx = 0; catIdx < numCategories; ++catIdx)
                        {
                            Element category = categories.GetValueAsElement(catIdx);
                            String  Name     = category.GetElementAsString(
                                CATEGORY_NAME);
                            String Id = category.GetElementAsString(CATEGORY_ID);

                            System.Console.WriteLine("\n  Category Name:" +
                                                     padString(Name, CAT_NAME_LEN) +
                                                     "\tId:" + Id);

                            Element fields      = category.GetElement(FIELD_DATA);
                            int     numElements = fields.NumValues;

                            printHeader();
                            for (int i = 0; i < numElements; i++)
                            {
                                printField(fields.GetValueAsElement(i));
                            }
                        }
                        System.Console.WriteLine();
                    }
                    if (eventObj.Type == Event.EventType.RESPONSE)
                    {
                        break;
                    }
                }

                catch (Exception ex)
                {
                    System.Console.WriteLine("Got Exception:" + ex);
                }
            }
        }
Example #20
0
        private void sendUpdateIOI(Session session, String ioiSvc)
        {
            Service service = session.GetService(ioiSvc);
            Request request = service.CreateRequest("updateIoi");

            Element handle = request.GetElement("handle");

            handle.SetElement("value", "832f0c5f-8330-4c50-8cf7-95c1c6f240db");

            Element ioi = request.GetElement("ioi");

            // Set the good-until time of this option to 15 minutes from now
            ioi.SetElement("goodUntil", new Bloomberglp.Blpapi.Datetime(DateTime.Now.AddSeconds(900)));

            // Create the option
            Element option = ioi.GetElement("instrument").SetChoice("option");

            option.SetElement("structure", "CallSpread");

            // This option has two legs. Create the first leg
            Element leg1 = option.GetElement("legs").AppendElement();

            leg1.SetElement("type", "Call");
            leg1.SetElement("strike", 230);
            leg1.SetElement("expiry", "2017-11-08T00:00:00.000+00:00");
            leg1.SetElement("style", "European");
            leg1.SetElement("ratio", +1.00);
            leg1.SetElement("exchange", "LN");
            leg1.GetElement("underlying").SetChoice("ticker");
            leg1.GetElement("underlying").SetElement("ticker", "VOD LN Equity");

            // Create the second leg
            Element leg2 = option.GetElement("legs").AppendElement();

            leg1.SetElement("type", "Call");
            leg2.SetElement("strike", 240);
            leg2.SetElement("expiry", "2017-11-08T00:00:00.000+00:00");
            leg2.SetElement("style", "European");
            leg2.SetElement("ratio", -1.25);
            leg2.SetElement("exchange", "LN");
            leg2.GetElement("underlying").SetChoice("ticker");
            leg2.GetElement("underlying").SetElement("ticker", "VOD LN Equity");

            // Create a quote consisting of a bid and an offer
            Element bid = ioi.GetElement("bid");

            bid.GetElement("price").SetChoice("fixed");
            bid.GetElement("price").GetElement("fixed").GetElement("price").SetValue(83.643);
            bid.GetElement("size").SetChoice("quantity");
            bid.GetElement("size").GetElement("quantity").SetValue(2000);
            bid.GetElement("referencePrice").SetElement("price", 202.155);
            bid.GetElement("referencePrice").SetElement("currency", "GBP");
            bid.SetElement("notes", "offer notes");

            // Set the offer
            Element offer = ioi.GetElement("offer");

            offer.GetElement("price").SetChoice("fixed");
            offer.GetElement("price").GetElement("fixed").GetElement("price").SetValue(83.64);
            offer.GetElement("size").SetChoice("quantity");
            offer.GetElement("size").GetElement("quantity").SetValue(2000);
            offer.GetElement("referencePrice").SetElement("price", 202.15);
            offer.GetElement("referencePrice").SetElement("currency", "GBP");
            offer.SetElement("notes", "offer notes");

            // Set targets
            Element includes = ioi.GetElement("targets").GetElement("includes");

            Element t1 = includes.AppendElement();

            t1.SetChoice("acronym");
            t1.SetElement("acronym", "BLPA");

            Element t2 = includes.AppendElement();

            t2.SetChoice("acronym");
            t2.SetElement("acronym", "BLPB");

            System.Console.WriteLine("Sending Request: " + request.ToString());

            requestID = new CorrelationID();

            // Submit the request
            try
            {
                session.SendRequest(request, requestID);
                System.Console.WriteLine("Request Sent.");
            }
            catch (Exception ex)
            {
                System.Console.Error.WriteLine("Failed to send the request: " + ex.Message);
            }
        }
Example #21
0
        private void processResponseEvent(Event evt, Session session)
        {
            System.Console.WriteLine("Received Event: " + evt.Type);

            foreach (Message msg in evt)
            {
                System.Console.WriteLine("MESSAGE: " + msg.ToString());
                System.Console.WriteLine("CORRELATION ID: " + msg.CorrelationID);

                if (evt.Type == Event.EventType.RESPONSE && msg.CorrelationID == requestID)
                {
                    System.Console.WriteLine("Message Type: " + msg.MessageType);
                    if (msg.MessageType.Equals(ERROR_INFO))
                    {
                        int    errorCode    = msg.GetElementAsInt32("ERROR_CODE");
                        String errorMessage = msg.GetElementAsString("ERROR_MESSAGE");
                        System.Console.WriteLine("ERROR CODE: " + errorCode + "\tERROR MESSAGE: " + errorMessage);
                    }
                    else if (msg.MessageType.Equals(ASSIGN_TRADER))
                    {
                        bool success = msg.GetElementAsBool("EMSX_ALL_SUCCESS");

                        if (success)
                        {
                            System.Console.WriteLine("All orders successfully assigned");
                            Element successful = msg.GetElement("EMSX_ASSIGN_TRADER_SUCCESSFUL_ORDERS");

                            int numValues = successful.NumValues;

                            if (numValues > 0)
                            {
                                System.Console.WriteLine("Successful assignments:-");
                            }

                            for (int i = 0; i < numValues; i++)
                            {
                                Element order = successful.GetValueAsElement(i);
                                System.Console.WriteLine(order.GetElement("EMSX_SEQUENCE").GetValueAsInt32());
                            }
                        }
                        else
                        {
                            System.Console.WriteLine("One or more failed assignments...\n");

                            if (msg.HasElement("EMSX_ASSIGN_TRADER_SUCCESSFUL_ORDERS"))
                            {
                                Element successful = msg.GetElement("EMSX_ASSIGN_TRADER_SUCCESSFUL_ORDERS");

                                int numValues = successful.NumValues;

                                if (numValues > 0)
                                {
                                    System.Console.WriteLine("Successful assignments:-");
                                }

                                for (int i = 0; i < numValues; i++)
                                {
                                    Element order = successful.GetValueAsElement(i);
                                    System.Console.WriteLine(order.GetElement("EMSX_SEQUENCE").GetValueAsInt32());
                                }
                            }
                            if (msg.HasElement("EMSX_ASSIGN_TRADER_FAILED_ORDERS"))
                            {
                                Element failed = msg.GetElement("EMSX_ASSIGN_TRADER_FAILED_ORDERS");

                                int numValues = failed.NumValues;

                                if (numValues > 0)
                                {
                                    System.Console.WriteLine("Failed assignments:-");
                                }

                                for (int i = 0; i < numValues; i++)
                                {
                                    Element order = failed.GetValueAsElement(i);
                                    System.Console.WriteLine(order.GetElement("EMSX_SEQUENCE").GetValueAsInt32());
                                }
                            }
                        }
                    }

                    quit = true;
                    session.Stop();
                }
            }
        }
Example #22
0
        private void processResponseEvent(Event evt, Session session)
        {
            System.Console.WriteLine("Received Event: " + evt.Type);

            foreach (Message msg in evt)
            {
                //System.Console.WriteLine("MESSAGE: " + msg.ToString());
                //System.Console.WriteLine("CORRELATION ID: " + msg.CorrelationID);

                if (evt.Type == Event.EventType.RESPONSE && msg.CorrelationID == requestID)
                {
                    System.Console.WriteLine("Message Type: " + msg.MessageType);
                    if (msg.MessageType.Equals(ERROR_INFO))
                    {
                        int    errorCode    = msg.GetElementAsInt32("ERROR_CODE");
                        String errorMessage = msg.GetElementAsString("ERROR_MESSAGE");
                        System.Console.WriteLine("ERROR CODE: " + errorCode + "\tERROR MESSAGE: " + errorMessage);
                    }
                    else if (msg.MessageType.Equals(BROKER_SPEC))
                    {
                        Element brokers = msg.GetElement("brokers");

                        int numBkrs = brokers.NumValues;

                        System.Console.WriteLine("Number of Brokers: " + numBkrs);

                        for (int i = 0; i < numBkrs; i++)
                        {
                            Element broker = brokers.GetValueAsElement(i);

                            String code       = broker.GetElementAsString("code");
                            String assetClass = broker.GetElementAsString("assetClass");

                            if (broker.HasElement("strategyFixTag"))
                            {
                                long tag = broker.GetElementAsInt64("strategyFixTag");
                                System.Console.WriteLine("\nBroker code: " + code + "\tClass: " + assetClass + "\tTag: " + tag);

                                Element strats = broker.GetElement("strategies");

                                int numStrats = strats.NumValues;

                                System.Console.WriteLine("\tNo. of Strategies: " + numStrats);

                                for (int s = 0; s < numStrats; s++)
                                {
                                    Element strat = strats.GetValueAsElement(s);

                                    String name   = strat.GetElementAsString("name");
                                    String fixVal = strat.GetElementAsString("fixValue");

                                    System.Console.WriteLine("\n\tStrategy Name: " + name + "\tFix Value: " + fixVal);

                                    Element parameters = strat.GetElement("parameters");

                                    int numParams = parameters.NumValues;

                                    System.Console.WriteLine("\t\tNo. of Parameters: " + numParams);

                                    for (int p = 0; p < numParams; p++)
                                    {
                                        Element param = parameters.GetValueAsElement(p);

                                        String pname       = param.GetElementAsString("name");
                                        long   fixTag      = param.GetElementAsInt64("fixTag");
                                        bool   required    = param.GetElementAsBool("isRequired");
                                        bool   replaceable = param.GetElementAsBool("isReplaceable");

                                        System.Console.WriteLine("\t\tParameter: " + pname + "\tTag: " + fixTag + "\tRequired: " + required + "\tReplaceable: " + replaceable);

                                        String typeName = param.GetElement("type").GetElement(0).Name.ToString();

                                        String vals = "";

                                        if (typeName.Equals("enumeration"))
                                        {
                                            Element enumerators = param.GetElement("type").GetElement(0).GetElement("enumerators");

                                            int numEnums = enumerators.NumValues;

                                            for (int e = 0; e < numEnums; e++)
                                            {
                                                Element en = enumerators.GetValueAsElement(e);

                                                vals = vals + en.GetElementAsString("name") + "[" + en.GetElementAsString("fixValue") + "],";
                                            }
                                            vals = vals.Substring(0, vals.Length - 1);
                                        }
                                        else if (typeName.Equals("range"))
                                        {
                                            Element rng = param.GetElement("type").GetElement(0);
                                            long    mn  = rng.GetElementAsInt64("min");
                                            long    mx  = rng.GetElementAsInt64("max");
                                            long    st  = rng.GetElementAsInt64("step");
                                            vals = "min:" + mn + " max:" + mx + " step:" + st;
                                        }
                                        else if (typeName.Equals("string"))
                                        {
                                            Element possVals = param.GetElement("type").GetElement(0).GetElement("possibleValues");

                                            int numVals = possVals.NumValues;

                                            for (int v = 0; v < numVals; v++)
                                            {
                                                vals = vals + possVals.GetValueAsString(v) + ",";
                                            }
                                            if (vals.Length > 0)
                                            {
                                                vals = vals.Substring(0, vals.Length - 1);
                                            }
                                        }

                                        if (vals.Length > 0)
                                        {
                                            System.Console.WriteLine("\t\t\tType: " + typeName + " (" + vals + ")");
                                        }
                                        else
                                        {
                                            System.Console.WriteLine("\t\t\tType: " + typeName);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                System.Console.WriteLine("\nBroker code: " + code + "\tclass: " + assetClass);
                                System.Console.WriteLine("\tNo Strategies");
                            }

                            System.Console.WriteLine("\n\tTime In Force:");
                            Element tifs    = broker.GetElement("timesInForce");
                            int     numTifs = tifs.NumValues;
                            for (int t = 0; t < numTifs; t++)
                            {
                                Element tif         = tifs.GetValueAsElement(t);
                                String  tifName     = tif.GetElementAsString("name");
                                String  tifFixValue = tif.GetElementAsString("fixValue");
                                System.Console.WriteLine("\t\tName: " + tifName + "\tFix Value: " + tifFixValue);
                            }

                            System.Console.WriteLine("\n\tOrder Types:");
                            Element ordTypes    = broker.GetElement("orderTypes");
                            int     numOrdTypes = ordTypes.NumValues;
                            for (int o = 0; o < numOrdTypes; o++)
                            {
                                Element ordType     = ordTypes.GetValueAsElement(o);
                                String  typName     = ordType.GetElementAsString("name");
                                String  typFixValue = ordType.GetElementAsString("fixValue");
                                System.Console.WriteLine("\t\tName: " + typName + "\tFix Value: " + typFixValue);
                            }

                            System.Console.WriteLine("\n\tHandling Instructions:");
                            Element handInsts    = broker.GetElement("handlingInstructions");
                            int     numHandInsts = handInsts.NumValues;
                            for (int h = 0; h < numHandInsts; h++)
                            {
                                Element handInst     = handInsts.GetValueAsElement(h);
                                String  instName     = handInst.GetElementAsString("name");
                                String  instFixValue = handInst.GetElementAsString("fixValue");
                                System.Console.WriteLine("\t\tName: " + instName + "\tFix Value: " + instFixValue);
                            }
                        }
                    }

                    quit = true;
                    session.Stop();
                }
            }
        }
Example #23
0
        /// <summary>
        /// Process override field data returned
        /// </summary>
        /// <param name="msg"></param>
        private void processOverrides(Bloomberglp.Blpapi.Message msg)
        {
            string[] elementList     = new string[] { "mnemonic", "description", "categoryName" };
            object[] fieldDataValues = null;

            if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("fieldResponse")))
            {
                // process response
                Element fieldDataArray = msg.GetElement("fieldData");
                int     numberOfFields = fieldDataArray.NumValues;
                // start table update
                overrideTable.BeginLoadData();
                overrideFieldsTempTable.BeginLoadData();
                for (int index = 0; index < numberOfFields; index++)
                {
                    // process field element
                    fieldDataValues = new object[4];
                    Element fieldElement = fieldDataArray.GetValueAsElement(index);
                    Element fieldData    = fieldElement.GetElement("fieldInfo");
                    try
                    {
                        // get field id
                        string fieldId = d_fieldIds[index];
                        // get override for field id
                        string    selectCriteria = "id = '" + fieldId + "'";
                        DataRow[] ovrRows        = overrideTable.Select(selectCriteria);
                        DataRow[] fields         = overrideFieldsTempTable.Select(selectCriteria);
                        if (fields.Length > 0)
                        {
                            // process override fields
                            int dataIndex = 1;
                            foreach (string item in elementList)
                            {
                                // field property
                                Element dataElement = fieldData.GetElement(item);
                                if (dataElement.IsArray)
                                {
                                    // process array data
                                    switch (item)
                                    {
                                    case "categoryName":
                                        // process categoryName here
                                        break;

                                    case "overrides":
                                        // process categoryName here
                                        break;
                                    }
                                }
                                else
                                {
                                    // process element data
                                    switch (item)
                                    {
                                    case "documentation":
                                        // process documentation here
                                        break;

                                    default:
                                        fields[0][dataIndex] = dataElement.GetValueAsString();
                                        break;
                                    }
                                }
                                dataIndex++;
                            }

                            if (ovrRows.Length > 0)
                            {
                                // update override field properties
                                foreach (DataRow ovrRow in ovrRows)
                                {
                                    ovrRow["mnemonic"]    = fields[0]["mnemonic"];
                                    ovrRow["description"] = fields[0]["description"];
                                }
                            }
                        }
                    }
                    catch
                    {
                        // field property not in response
                    }
                }
                // end of table update
                overrideTable.BeginLoadData();
                overrideTable.AcceptChanges();
                overrideFieldsTempTable.BeginLoadData();
                overrideFieldsTempTable.AcceptChanges();
            }
        }
Example #24
0
        /// <summary>
        /// Process categorized field search response
        /// </summary>
        /// <param name="msg"></param>
        private void processCategorizedFieldData(Bloomberglp.Blpapi.Message msg)
        {
            string message = string.Empty;

            string[] elementList = new string[] { "mnemonic", "description",
                                                  "categoryName", "documentation", "overrides" };
            object[] fieldDataValues = null;

            // process message
            toolStripStatusLabel1.Text = "Processing data...";

            if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("categorizedFieldResponse")))
            {
                if (msg.HasElement("categorizedFieldSearchError"))
                {
                    // process field search error
                    Element reason = msg.GetElement("categorizedFieldSearchError");
                    message = string.Concat("Error: Source-", reason.GetElementAsString("source"),
                                            ", Code-", reason.GetElementAsString("code"), ", category-",
                                            reason.GetElementAsString("category"),
                                            ", desc-", reason.GetElementAsString("message"));
                }
                else
                {
                    if (msg.HasElement("category"))
                    {
                        // process category
                        Element categories         = msg.GetElement("category");
                        int     numberOfCategories = categories.NumValues;
                        for (int categoryIndex = 0; categoryIndex < numberOfCategories; categoryIndex++)
                        {
                            // process category data
                            Element category       = categories.GetValueAsElement(categoryIndex);
                            Element fieldDataArray = category.GetElement("fieldData");
                            int     numberOfFields = fieldDataArray.NumValues;
                            // start table update
                            fieldTable.BeginLoadData();
                            propertyTable.BeginLoadData();
                            overrideTable.BeginLoadData();
                            for (int index = 0; index < numberOfFields; index++)
                            {
                                // process field data
                                fieldDataValues = new object[4];
                                Element fieldElement = fieldDataArray.GetValueAsElement(index);
                                Element fieldData    = fieldElement.GetElement("fieldInfo");
                                // get field id
                                string fieldId = fieldElement.GetElementAsString("id");
                                fieldDataValues[0] = fieldId;
                                try
                                {
                                    String dataValue = string.Empty;
                                    int    dataIndex = 1;
                                    foreach (string item in elementList)
                                    {
                                        // get field property
                                        Element dataElement = fieldData.GetElement(item);
                                        if (dataElement.IsArray)
                                        {
                                            // process array data
                                            switch (item)
                                            {
                                            case "categoryName":
                                                fieldDataValues[dataIndex] = category.GetElementAsString("categoryName");
                                                break;

                                            case "overrides":
                                                for (int overrideIndex = 0; overrideIndex < dataElement.NumValues; overrideIndex++)
                                                {
                                                    if (overrideTable.Select("parentId = '" + fieldId + "' AND id = '" +
                                                                             dataElement[overrideIndex].ToString() + "'").Length == 0)
                                                    {
                                                        overrideTable.Rows.Add(new object[] { fieldId, dataElement[overrideIndex].ToString(),
                                                                                              DBNull.Value, DBNull.Value });
                                                    }
                                                }
                                                break;
                                            }
                                        }
                                        else
                                        {
                                            // process element data
                                            switch (item)
                                            {
                                            case "documentation":
                                                // add documentation row
                                                propertyTable.Rows.Add(new object[] { fieldId, dataElement.GetValue() });
                                                break;

                                            default:
                                                fieldDataValues[dataIndex] = dataElement.GetValueAsString();
                                                break;
                                            }
                                        }
                                        dataIndex++;
                                    }
                                    // add field to table
                                    fieldTable.Rows.Add(fieldDataValues);
                                }
                                catch
                                {
                                    // field property not in response
                                }
                            }
                        }
                    }
                    // end of table update
                    fieldTable.EndLoadData();
                    propertyTable.EndLoadData();
                    overrideTable.EndLoadData();
                    d_data.AcceptChanges();
                    if (fieldTable.Rows.Count > 0)
                    {
                        richTextBoxDocumentation.Tag = string.Empty;
                        // trigger event to update override grid
                        dataGridViewDataView_RowEnter(this, new DataGridViewCellEventArgs(1, 0));
                    }
                }
            }
            if (message != string.Empty)
            {
                toolStripStatusLabel1.Text = "Request error: " + message;
            }
        }
Example #25
0
        public Dictionary <string, string> DownloadFieldInfo(string securityName, IEnumerable <IField> fields)
        {
            var outDict = new Dictionary <string, string>();

            Request request = refDataService.CreateRequest("FieldInfoRequest");

            if (fields == null || fields.Count() == 0)
            {
                return(null);
            }
            foreach (var item in fields)
            {
                request.Append("id", item.FieldName);
            }

            request.Set("returnFieldDocumentation", true);
            session.SendRequest(request, null);

            bool done = false;

            while (!done)
            {
                Event eventObj = session.NextEvent();

                if (eventObj.Type == Event.EventType.RESPONSE || eventObj.Type == Event.EventType.PARTIAL_RESPONSE)
                {
                    foreach (var msg in eventObj)
                    {
                        if (msg.AsElement.HasElement("responseError"))
                        {
                            throw new Exception("Response error for fields [" + fields.ToExtendedString() + "]: " + msg.GetElement("responseError").GetElement("message") + "field: ");
                        }

                        Element securityDataArray = msg.GetElement("fieldData");
                        for (int i = 0; i < securityDataArray.NumValues; i++)
                        {
                            Element fieldData = securityDataArray.GetValueAsElement(i);

                            try
                            {
                                Element fieldInfo = fieldData.GetElement("fieldInfo");

                                string fieldName = fieldInfo.GetElementAsString("mnemonic");
                                string output    = fieldInfo.GetElementAsString("documentation");

                                var fieldNickName = from f in fields
                                                    where f.FieldName == fieldName
                                                    select f.FieldNickName;

                                foreach (var f in fieldNickName)
                                {
                                    if (!outDict.ContainsKey(f))
                                    {
                                        outDict.Add(f, output);
                                    }
                                }
                            }
                            catch
                            {
                                Trace.WriteLine("Problem Downloading Field Definition for " + fieldData.GetElement("id"));
                            }
                        }
                    }
                }
                if (eventObj.Type == Event.EventType.RESPONSE)
                {
                    done = true;
                }
            }
            return(outDict);
        }
Example #26
0
        private IEnumerable <Tuple <string, SortedList <DateTime, dynamic> > > ParseUniversal(Element securityDataArray, List <IField> fields)
        {
            Thread.Sleep(50);
            if (Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.P)
            {
                Console.WriteLine("\nDownload Paused, press c to continue");
                while (!Console.KeyAvailable || Console.ReadKey(true).Key != ConsoleKey.C)
                {
                    Thread.Sleep(1000 * 1);
                }
            }

            var fieldNames = from f in fields
                             select f.FieldName.ToUpper();

            SortedList <DateTime, dynamic> output;

            if (securityDataArray.IsArray)
            {
                for (int i = 0; i < securityDataArray.NumValues; i++)              //data for multiple securities
                {
                    Element securityData = securityDataArray.GetValueAsElement(i); //single security
                    string  securityName = securityData.GetElementAsString("security");
                    Element fieldData    = securityData.GetElement("fieldData");   //data for multiple fields.

                    int j = -1;
                    foreach (var fieldName in fieldNames)
                    {
                        j++;
                        Element field = fieldData.GetElement(fieldName);

                        output = new SortedList <DateTime, dynamic>();

                        if (field.NumValues > 0)
                        {
                            var data = field.GetValue(); //check field.NumValues - sometimes NumValues>1 - then output into single field - because it is single field but with multiple values

                            string dataType;
                            if (fields[j].Type != null && fields[j].Type.Length > 0)
                            {
                                dataType = fields[j].Type;
                            }
                            else
                            {
                                dataType = field.Datatype.ToString();
                            }

                            var result = ConvertDataType(dataType, field);

                            output.Add(ExtensionMethods.GetBusinessDay(DateTime.Today, -1), result.Item2);
                        }
                        yield return(Tuple.Create(securityName, output));
                    }
                }
            }
            else
            {
                var Outputs = new SortedList <DateTime, dynamic> [fieldNames.Count()];

                for (int i = 0; i < Outputs.Length; i++)
                {
                    Outputs[i] = new SortedList <DateTime, dynamic>();
                }

                Element fieldDataArray = securityDataArray.GetElement("fieldData");  // data for multiple fields, multiple dates
                string  securityName   = securityDataArray.GetElementAsString("security");

                for (int i = 0; i < fieldDataArray.NumValues; i++)           //equals 0 if no fields or security wrong
                {
                    Element fieldData = fieldDataArray.GetValueAsElement(i); // data for multiple fields, single date

                    int j = -1;

                    foreach (var fieldName in fieldNames)
                    {
                        j++;

                        Element date = fieldData.GetElement("date");

                        if (!fieldData.HasElement(fieldName))
                        {
                            continue;
                        }

                        Element field = fieldData.GetElement(fieldName);

                        dynamic elementValue = null;
                        bool    ok           = false;

                        string dataType;

                        if (fields[j].Type != null && fields[j].Type.Length > 0)
                        {
                            dataType = fields[j].Type;
                        }
                        else
                        {
                            dataType = field.Datatype.ToString();
                        }

                        var result = ConvertDataType(dataType, field);
                        ok           = result.Item1;
                        elementValue = result.Item2;

                        if (!ok)
                        {
                            elementValue = null;
                        }

                        Outputs[j].Add(date.GetValueAsDatetime().ToSystemDateTime(), elementValue);
                    }
                }

                for (int i = 0; i < Outputs.Length; i++)
                {
                    yield return(Tuple.Create(securityName, Outputs[i]));
                }
            }
        }
Example #27
0
        /// <summary>
        /// Process subscription data
        /// </summary>
        /// <param name="eventObj"></param>
        /// <param name="session"></param>
        private void processRequestDataEvent(Event eventObj, Session session)
        {
            string  securityName  = string.Empty;
            Boolean hasFieldError = false;

            // clear column tag of field error message.
            foreach (DataGridViewColumn col in dataGridViewData.Columns)
            {
                col.Tag = null;
            }
            // process message
            foreach (Message msg in eventObj)
            {
                if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("HistoricalDataResponse")))
                {
                    // process errors
                    if (msg.HasElement(RESPONSE_ERROR))
                    {
                        Element error = msg.GetElement(RESPONSE_ERROR);
                        dataGridViewData.Rows.Add(new object[] { error.GetElementAsString(MESSAGE) });
                    }
                    else
                    {
                        Element secDataArray       = msg.GetElement(SECURITY_DATA);
                        int     numberOfSecurities = secDataArray.NumValues;
                        if (secDataArray.HasElement(SECURITY_ERROR))
                        {
                            // security error
                            Element secError = secDataArray.GetElement(SECURITY_ERROR);
                            dataGridViewData.Rows.Add(new object[] { secError.GetElementAsString(MESSAGE) });
                        }
                        if (secDataArray.HasElement(FIELD_EXCEPTIONS))
                        {
                            // field error
                            Element error = secDataArray.GetElement(FIELD_EXCEPTIONS);
                            for (int errorIndex = 0; errorIndex < error.NumValues; errorIndex++)
                            {
                                Element errorException = error.GetValueAsElement(errorIndex);
                                string  field          = errorException.GetElementAsString(FIELD_ID);
                                Element errorInfo      = errorException.GetElement(ERROR_INFO);
                                string  message        = errorInfo.GetElementAsString(MESSAGE);
                                dataGridViewData.Columns[field].Tag = message;
                                hasFieldError = true;
                            } // end for
                        }     // end if
                        // process securities data
                        for (int index = 0; index < numberOfSecurities; index++)
                        {
                            foreach (Element secData in secDataArray.Elements)
                            {
                                switch (secData.Name.ToString())
                                {
                                case "eidsData":
                                    // process security eid data here
                                    break;

                                case "security":
                                    // security name
                                    securityName = secData.GetValueAsString();
                                    break;

                                case "fieldData":
                                    if (hasFieldError && secData.NumValues == 0)
                                    {
                                        // no data but have field error
                                        object[] dataValues = new object[dataGridViewData.ColumnCount];
                                        dataValues[0] = securityName;
                                        int fieldIndex = 0;
                                        foreach (DataGridViewColumn col in dataGridViewData.Columns)
                                        {
                                            if (col.Tag != null)
                                            {
                                                dataValues[fieldIndex] = col.Tag.ToString();
                                            }
                                            fieldIndex++;
                                        }
                                        d_data.Rows.Add(dataValues);
                                    }
                                    else
                                    {
                                        // get field data
                                        d_data.BeginLoadData();
                                        for (int pointIndex = 0; pointIndex < secData.NumValues; pointIndex++)
                                        {
                                            int      fieldIndex = 0;
                                            object[] dataValues = new object[dataGridViewData.ColumnCount];
                                            Element  fields     = secData.GetValueAsElement(pointIndex);
                                            foreach (DataGridViewColumn col in dataGridViewData.Columns)
                                            {
                                                try
                                                {
                                                    if (col.Name == "security")
                                                    {
                                                        dataValues[fieldIndex] = securityName;
                                                    }
                                                    else
                                                    {
                                                        if (fields.HasElement(col.Name))
                                                        {
                                                            Element item = fields.GetElement(col.Name);
                                                            if (item.IsArray)
                                                            {
                                                                // bulk field data
                                                                dataValues[fieldIndex] = "Bulk Data";
                                                            }
                                                            else
                                                            {
                                                                // field data
                                                                dataValues[fieldIndex] = item.GetValueAsString();
                                                            }
                                                        }
                                                        else
                                                        {
                                                            // no field value
                                                            if (col.Tag == null)
                                                            {
                                                                dataValues[fieldIndex] = DBNull.Value;
                                                            }
                                                            else
                                                            {
                                                                if (col.Tag.ToString().Length > 0)
                                                                {
                                                                    // field has error
                                                                    dataValues[fieldIndex] = col.Tag.ToString();
                                                                }
                                                                else
                                                                {
                                                                    dataValues[fieldIndex] = DBNull.Value;
                                                                }
                                                            }
                                                        }
                                                    }      // end if
                                                }
                                                catch (Exception ex)
                                                {
                                                    // display error
                                                    dataValues[fieldIndex] = ex.Message;
                                                }
                                                finally
                                                {
                                                    fieldIndex++;
                                                }
                                            }     // end foreach
                                            // add data to data table
                                            d_data.Rows.Add(dataValues);
                                        }     // end for
                                        d_data.EndLoadData();
                                    }
                                    break;
                                } // end switch
                            }     // end foreach
                        }         // end for
                    }             // end else
                }                 // end if
            }
        }
Example #28
0
        private void processServiceEvent(Event evt, Session session)
        {
            System.Console.WriteLine("\nProcessing " + evt.Type);

            foreach (Message msg in evt)
            {
                if (msg.MessageType.Equals(SERVICE_OPENED))
                {
                    System.Console.WriteLine("Service opened...");

                    Service service = session.GetService(d_service);

                    Request request = service.CreateRequest("GroupRouteEx");

                    // Multiple order numbers can be added
                    request.Append("EMSX_SEQUENCE", 3663923);
                    request.Append("EMSX_SEQUENCE", 3663924);
                    request.Append("EMSX_SEQUENCE", 3663925);

                    // The fields below are mandatory
                    request.Set("EMSX_AMOUNT_PERCENT", 100); // Note the amount here is %age of order amount
                    request.Set("EMSX_BROKER", "BMTB");

                    // For GroupRoute, the below values need to be added, but are taken
                    // from the original order when the route is created.
                    request.Set("EMSX_HAND_INSTRUCTION", "ANY");
                    request.Set("EMSX_ORDER_TYPE", "MKT");
                    request.Set("EMSX_TICKER", "IBM US Equity");
                    request.Set("EMSX_TIF", "DAY");

                    // The fields below are optional
                    //request.Set("EMSX_ACCOUNT","TestAccount");
                    //request.Set("EMSX_BOOKNAME","BookName");
                    //request.Set("EMSX_CFD_FLAG", "1");
                    //request.Set("EMSX_CLEARING_ACCOUNT", "ClrAccName");
                    //request.Set("EMSX_CLEARING_FIRM", "FirmName");
                    //request.Set("EMSX_EXEC_INSTRUCTION", "Drop down values from EMSX Ticket");
                    //request.Set("EMSX_GET_WARNINGS", "0");
                    //request.Set("EMSX_GTD_DATE", "20170105");
                    //request.Set("EMSX_LIMIT_PRICE", 123.45);
                    //request.Set("EMSX_LOCATE_BROKER", "BMTB");
                    //request.Set("EMSX_LOCATE_ID", "SomeID");
                    //request.Set("EMSX_LOCATE_REQ", "Y");
                    //request.Set("EMSX_NOTES", "Some notes");
                    //request.Set("EMSX_ODD_LOT", "0");
                    //request.Set("EMSX_P_A", "P");
                    //request.Set("EMSX_RELEASE_TIME", 34341);
                    //request.Set("EMSX_REQUEST_SEQ", 1001);
                    //request.Set("EMSX_STOP_PRICE", 123.5);
                    //request.Set("EMSX_TRADER_UUID", 1234567);

                    // Set the Request Type if this is for multi-leg orders
                    // only valid for options

                    /*
                     * Element requestType = request.GetElement("EMSX_REQUEST_TYPE");
                     * requestType.SetChoice("Multileg");
                     * Element multileg = requestType.GetElement("Multileg");
                     * multileg.SetElement("EMSX_AMOUNT",10);
                     * multileg.GetElement("EMSX_ML_RATIO").AppendValue(2);
                     * multileg.GetElement("EMSX_ML_RATIO").AppendValue(3);
                     */

                    // Add the Route Ref ID values
                    Element routeRefIDPairs = request.GetElement("EMSX_ROUTE_REF_ID_PAIRS");
                    Element route1          = routeRefIDPairs.AppendElement();
                    route1.SetElement("EMSX_ROUTE_REF_ID", "MyRouteRef1");
                    route1.SetElement("EMSX_SEQUENCE", 3663923);

                    Element route2 = routeRefIDPairs.AppendElement();
                    route2.SetElement("EMSX_ROUTE_REF_ID", "MyRouteRef2");
                    route2.SetElement("EMSX_SEQUENCE", 3663924);

                    Element route3 = routeRefIDPairs.AppendElement();
                    route3.SetElement("EMSX_ROUTE_REF_ID", "MyRouteRef3");
                    route3.SetElement("EMSX_SEQUENCE", 3663925);

                    // Below we establish the strategy details. Strategy details
                    // are common across all orders in a GroupRoute operation.
                    // The following segment can be removed if no broker strategies are used

                    Element strategy = request.GetElement("EMSX_STRATEGY_PARAMS");
                    strategy.SetElement("EMSX_STRATEGY_NAME", "VWAP");

                    Element indicator = strategy.GetElement("EMSX_STRATEGY_FIELD_INDICATORS");
                    Element data      = strategy.GetElement("EMSX_STRATEGY_FIELDS");

                    // Strategy parameters must be appended in the correct order. See the output
                    // of GetBrokerStrategyInfo request for the order. The indicator value is 0 for
                    // a field that carries a value, and 1 where the field should be ignored

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "09:30:00"); // StartTime
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 0);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "10:30:00"); // EndTime
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 0);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // Max%Volume
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // %AMSession
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // OPG
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // MOC
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // CompletePX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // TriggerPX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // DarkComplete
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // DarkCompPX
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // RefIndex
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    data.AppendElement().SetElement("EMSX_FIELD_DATA", "");         // Discretion
                    indicator.AppendElement().SetElement("EMSX_FIELD_INDICATOR", 1);

                    System.Console.WriteLine("Request: " + request.ToString());

                    requestID = new CorrelationID();

                    // Submit the request
                    try
                    {
                        session.SendRequest(request, requestID);
                    }
                    catch (Exception ex)
                    {
                        System.Console.Error.WriteLine("Failed to send the request: " + ex.Message);
                    }
                }
                else if (msg.MessageType.Equals(SERVICE_OPEN_FAILURE))
                {
                    System.Console.Error.WriteLine("Error: Service failed to open");
                }
            }
        }
Example #29
0
 /// <summary>
 /// Process subscription data
 /// </summary>
 /// <param name="eventObj"></param>
 /// <param name="session"></param>
 private void processRequestDataEvent(Event eventObj, Session session)
 {
     if (d_numberOfReturnedSecurities == 0)
     {
         toolStripStatusLabel1.Text = "Processing data...";
     }
     d_data.BeginLoadData();
     // process message
     foreach (Message msg in eventObj)
     {
         // get message correlation id
         int cId = (int)msg.CorrelationID.Value;
         if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("ReferenceDataResponse")))
         {
             // process security data
             Element secDataArray       = msg.GetElement(SECURITY_DATA);
             int     numberOfSecurities = secDataArray.NumValues;
             for (int index = 0; index < numberOfSecurities; index++)
             {
                 Element secData   = secDataArray.GetValueAsElement(index);
                 Element fieldData = secData.GetElement("fieldData");
                 d_numberOfReturnedSecurities++;
                 // get security index
                 int rowIndex = secData.GetElementAsInt32("sequenceNumber");
                 if (d_data.Rows.Count > rowIndex)
                 {
                     // get security record
                     DataRow row = d_data.Rows[rowIndex];
                     // check for field error
                     if (secData.HasElement(FIELD_EXCEPTIONS))
                     {
                         // process error
                         Element error = secData.GetElement(FIELD_EXCEPTIONS);
                         for (int errorIndex = 0; errorIndex < error.NumValues; errorIndex++)
                         {
                             Element errorException = error.GetValueAsElement(errorIndex);
                             string  field          = errorException.GetElementAsString(FIELD_ID);
                             Element errorInfo      = errorException.GetElement(ERROR_INFO);
                             string  message        = errorInfo.GetElementAsString(MESSAGE);
                             row[field] = message;
                         }
                     }
                     // check for security error
                     if (secData.HasElement(SECURITY_ERROR))
                     {
                         Element error        = secData.GetElement(SECURITY_ERROR);
                         string  errorMessage = error.GetElementAsString(MESSAGE);
                         row[1] = errorMessage;
                     }
                     // process data
                     foreach (DataColumn col in d_data.Columns)
                     {
                         String dataValue = string.Empty;
                         if (fieldData.HasElement(col.ColumnName))
                         {
                             Element item = fieldData.GetElement(col.ColumnName);
                             if (item.IsArray)
                             {
                                 // bulk field
                                 dataValue = "Bulk Data...";
                                 processBulkData(secData.GetElementAsString("security"), item);
                             }
                             else
                             {
                                 dataValue = item.GetValueAsString();
                             }
                             row[col.ColumnName] = dataValue;
                         }
                     }
                 }
             }
         }
     }
     d_data.EndLoadData();
     // check if we are done
     if (d_numberOfReturnedSecurities >= d_data.Rows.Count)
     {
         toolStripStatusLabel1.Text = "Completed";
     }
 }
Example #30
0
        internal void populateFields(Message message, bool dynamicFieldsOnly)
        {
            Log.LogMessage(LogLevels.BASIC, "Populate fields");

            CurrentToOldValues();

            int fieldCount = message.NumElements;

            Element e = message.AsElement;

            fieldChanges = new List <FieldChange>();

            for (int i = 0; i < fieldCount; i++)
            {
                Boolean load = true;

                Element f = e.GetElement(i);

                String fieldName = f.Name.ToString();
                // Workaround for schema field nameing
                if (fieldName.Equals("EMSX_ORD_REF_ID"))
                {
                    fieldName = "EMSX_ORDER_REF_ID";
                }

                if (dynamicFieldsOnly)
                {
                    SchemaFieldDefinition sfd = null;
                    if (owner is Order)
                    {
                        Order o = (Order)owner;
                        sfd = findSchemaFieldByName(fieldName, o.parent.emsxapi.orderFields);
                    }
                    else if (owner is Route)
                    {
                        Route r = (Route)owner;
                        sfd = findSchemaFieldByName(fieldName, r.parent.emsxapi.routeFields);
                    }
                    if (sfd != null && sfd.isStatic())
                    {
                        load = false;
                    }
                }

                if (load)
                {
                    Field fd = field(fieldName);

                    if (fd == null)
                    {
                        fd = new Field(this);
                    }

                    fd.setName(fieldName);
                    // set the CURRENT value NOT the new_value. new_value is only set by client side.
                    fd.setCurrentValue(f.GetValueAsString());

                    FieldChange fc = fd.getFieldChanged();
                    if (fc != null)
                    {
                        fieldChanges.Add(fc);
                    }
                }
            }
        }
        /// <summary>
        /// Function to handle response event
        /// </summary>
        /// <param name="eventObj"></param>
        private void processResponseEvent(Event eventObj)
        {
            foreach (Message msg in eventObj)
            {
                if (msg.HasElement(RESPONSE_ERROR))
                {
                    printErrorInfo("REQUEST FAILED: ", msg.GetElement(RESPONSE_ERROR));
                    continue;
                }

                Element securities    = msg.GetElement(SECURITY_DATA);
                int     numSecurities = securities.NumValues;
                System.Console.WriteLine("\nProcessing " + numSecurities
                                         + " securities:");
                for (int secCnt = 0; secCnt < numSecurities; ++secCnt)
                {
                    Element security = securities.GetValueAsElement(secCnt);
                    string  ticker   = security.GetElementAsString(SECURITY);
                    System.Console.WriteLine("\nTicker: " + ticker);
                    if (security.HasElement("securityError"))
                    {
                        printErrorInfo("\tSECURITY FAILED: ",
                                       security.GetElement(SECURITY_ERROR));
                        continue;
                    }

                    Element fields = security.GetElement(FIELD_DATA);
                    if (fields.NumElements > 0)
                    {
                        System.Console.WriteLine("FIELD\t\tVALUE");
                        System.Console.WriteLine("-----\t\t-----");
                        int numElements = fields.NumElements;
                        for (int eleCtr = 0; eleCtr < numElements; ++eleCtr)
                        {
                            Element field = fields.GetElement(eleCtr);
                            // Checking if the field is Bulk field
                            if (field.Datatype == Datatype.SEQUENCE)
                            {
                                processBulkField(field);
                            }
                            else
                            {
                                processRefField(field);
                            }
                        }
                    }

                    System.Console.WriteLine("");
                    Element fieldExceptions = security.GetElement(FIELD_EXCEPTIONS);
                    if (fieldExceptions.NumValues > 0)
                    {
                        System.Console.WriteLine("FIELD\t\tEXCEPTION");
                        System.Console.WriteLine("-----\t\t---------");
                        for (int k = 0; k < fieldExceptions.NumValues; ++k)
                        {
                            Element fieldException =
                                fieldExceptions.GetValueAsElement(k);
                            printErrorInfo(fieldException.GetElementAsString(FIELD_ID)
                                           + "\t\t", fieldException.GetElement(ERROR_INFO));
                        }
                    }
                }
            }
        }