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)); } } } } }
/// <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; } } } } }
/// <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(); }
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); }
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. } } } }
/// <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); }
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); } }
/// <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"); } } }
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"); } } }
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); } } }
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); } }
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(); } } }
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(); } } }
/// <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(); } }
/// <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; } }
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); }
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])); } } }
/// <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 } }
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"); } } }
/// <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"; } }
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)); } } } } }