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 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("CreateBasket"); // define the basket name request.Set("EMSX_BASKET_NAME", "TestBasket"); // add any number of orders request.Append("EMSX_SEQUENCE", 4313227); request.Append("EMSX_SEQUENCE", 4313228); //request.Append("EMSX_SEQUENCE", 1234567) 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 bool GenerateToken() { bool isTokenSuccess = false; bool isRunning = false; CorrelationID tokenReqId = new CorrelationID(99); EventQueue tokenEventQueue = new EventQueue(); session.GenerateToken(tokenReqId, tokenEventQueue); while (!isRunning) { Event eventObj = tokenEventQueue.NextEvent(); if (eventObj.Type == Event.EventType.TOKEN_STATUS) { System.Console.WriteLine("processTokenEvents"); foreach (Message msg in eventObj) { System.Console.WriteLine(msg.ToString()); if (msg.MessageType == TOKEN_SUCCESS) { isTokenSuccess = true; isRunning = true; break; } else if (msg.MessageType == TOKEN_FAILURE) { Console.WriteLine("Received : " + TOKEN_FAILURE.ToString()); isRunning = true; break; } else { Console.WriteLine("Error while Token Generation"); isRunning = true; break; } } } } return(isTokenSuccess); }
private void processResponseEvent(Event evt, Session session) { System.Console.WriteLine("Received Event: " + evt.Type); foreach (Message msg in evt) { if (msg.MessageType.Equals(AUTHORIZATION_SUCCESS)) { System.Console.WriteLine("Authorization successfull..."); sendCreateIOI(session, d_emsx); } else if (msg.MessageType.Equals(AUTHORIZATION_FAILURE)) { System.Console.WriteLine("Authorisation failed..."); System.Console.WriteLine(msg.ToString()); // Here you can insert code to automatically retry the authorisation if required } else if (msg.CorrelationID == requestID) { System.Console.WriteLine(msg.MessageType + ">>" + msg.ToString()); if (msg.MessageType.Equals("handle")) { String val = msg.GetElementAsString("value"); System.Console.WriteLine("Response: Value=" + val); } else { System.Console.WriteLine("Unexpected message..."); System.Console.WriteLine(msg.ToString()); } quit = true; } else { System.Console.WriteLine("Unexpected authorization message..."); System.Console.WriteLine(msg.ToString()); } } }
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("SellSideAck"); //request.set("EMSX_REQUEST_SEQ", 1); // Append is used as any number of orders can be ack'ed in a single request request.Append("EMSX_SEQUENCE", 3852531); // If performing the ack on an order owned by another team member, provide owner's UUID //request.Set("EMSX_TRADER_UUID", 7654321); 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 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(GET_BROKER_STRATEGY_INFO_WITH_ASSET_CLASS)) { Element strategies = msg.GetElement("EMSX_STRATEGY_INFO"); int numValues = strategies.NumValues; for (int i = 0; i < numValues; i++) { Element e = strategies.GetValueAsElement(i); String fieldName = e.GetElementAsString("FieldName"); String disable = e.GetElementAsString("Disable"); String stringValue = e.GetElementAsString("StringValue"); System.Console.WriteLine("EMSX_STRATEGY_INFO: " + fieldName + ", " + disable + ", " + stringValue); } } quit = true; session.Stop(); } } }
private void eventLoop(EventQueue evtQueue, Session session) { bool done = false; while (!done) { Event eventObj = evtQueue.NextEvent(); if (eventObj.Type == Event.EventType.PARTIAL_RESPONSE) { System.Console.WriteLine("Processing Partial Response"); processResponseEvent(eventObj); } else if (eventObj.Type == Event.EventType.RESPONSE) { System.Console.WriteLine("Processing Response"); processResponseEvent(eventObj); done = true; } } }
private void processSubscriptionDataEvent(Event evt, Session session) { Log.LogMessage(LogLevels.DETAILED, "Processing " + evt.Type.ToString()); foreach (Message msg in evt) { Log.LogMessage(LogLevels.DETAILED, "Looking for handler : " + msg.CorrelationID.ToString()); if (subscriptionMessageHandlers.ContainsKey(msg.CorrelationID)) { Log.LogMessage(LogLevels.DETAILED, "Message handler found: " + msg.CorrelationID.ToString()); // process the incoming market data event subscriptionMessageHandlers[msg.CorrelationID].handleMessage(msg); } else { Log.LogMessage(LogLevels.DETAILED, "Failed to find message handler for: " + msg.CorrelationID.ToString()); } } }
private void processResponse(Event evt, Session session) { Log.LogMessage(LogLevels.DETAILED, "Processing RESPONSE event"); foreach (Message msg in evt) { CorrelationID cID = msg.CorrelationID; if (requestMessageHandlers.ContainsKey(cID)) { MessageHandler mh = requestMessageHandlers[cID]; mh.processMessage(msg); requestMessageHandlers.Remove(cID); Log.LogMessage(LogLevels.BASIC, "EMSXAPI: MessageHandler removed [" + cID + "]"); } else { Log.LogMessage(LogLevels.BASIC, "Unexpected RESPONSE event recieved: " + msg.ToString()); } } }
private void processSubscriptionStatus(Event evt, Session session) { Log.LogMessage(LogLevels.BASIC, "Processing " + evt.Type.ToString()); foreach (Message msg in evt) { if (msg.MessageType.Equals(SUBSCRIPTION_STARTED)) { Log.LogMessage(LogLevels.BASIC, "Subscription started successfully: " + msg.CorrelationID.ToString()); } else if (msg.MessageType.Equals(SUBSCRIPTION_FAILURE)) { Log.LogMessage(LogLevels.BASIC, "Error: Subscription failed: " + msg.CorrelationID.ToString()); } else if (msg.MessageType.Equals(SUBSCRIPTION_TERMINATED)) { Log.LogMessage(LogLevels.BASIC, "Subscription terminated : " + msg.CorrelationID.ToString()); } } }
}//end eventLoop private void processResponseEvent(Event eventObj) { foreach (Message msg in eventObj) { if (msg.HasElement(RESPONSE_ERROR)) { printErrorInfo("REQUEST FAILED: ", msg.GetElement(RESPONSE_ERROR)); continue; } if ((eventObj.Type != Event.EventType.PARTIAL_RESPONSE) && (eventObj.Type != Event.EventType.RESPONSE)) { continue; } if (!ProcessErrors(msg)) { ProcessExceptions(msg); ProcessFields(msg); } } }//end processResponseEvent
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("AssignTrader"); //request.Set("EMSX_REQUEST_SEQ", 1); request.Append("EMSX_SEQUENCE", 3657359); request.Append("EMSX_SEQUENCE", 3657360); request.Set("EMSX_ASSIGNEE_TRADER_UUID", 12109783); 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> /// Data event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processEvent(Event eventObj, Session session) { switch (eventObj.Type) { case Event.EventType.RESPONSE: // process final respose for request processRequestDataEvent(eventObj, session); break; case Event.EventType.PARTIAL_RESPONSE: // process partial response processRequestDataEvent(eventObj, session); break; default: processMiscEvents(eventObj, session); break; } }
/// <summary> /// Process SubscriptionData event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processSubscriptionDataEvent(Event eventObj, Session session) { System.Console.WriteLine("Processing SUBSCRIPTION_DATA"); foreach (Message msg in eventObj.GetMessages()) { string topic = (string)msg.CorrelationID.Object; System.Console.WriteLine(System.DateTime.Now.ToString("s") + ": " + topic + " - " + msg.MessageType); //System.Console.WriteLine(msg.AsElement); if (msg.MessageType.Equals("PageUpdate")) { processPageElement(msg.AsElement, topic); } else if (msg.MessageType.Equals("RowUpdate")) { processRowElement(msg.AsElement, topic); } //showUpdatedPage(topic); } }
private void processResponseEvent(Event eventObj) { foreach (Message msg in eventObj) { if (msg.AsElement.Name.Equals(ERROR_RESPONSE)) { printErrorInfo("REQUEST FAILED: ", msg.AsElement); continue; } else if (msg.AsElement.Name.Equals(REPLAY_RESPONSE)) { System.Console.WriteLine("# of Recovered data: " + msg.GetElement(MARKET_DATAS).NumValues); continue; } else { System.Console.WriteLine("Received Response: " + msg.ToString()); continue; } } }
private void processSubscriptionDataEvent(Event eventObj, Session session) { System.Console.WriteLine("Processing SUBSCRIPTION_DATA"); foreach (Message msg in eventObj) { string topic = (string)msg.CorrelationID.Object; System.Console.WriteLine(System.DateTime.Now.ToString("s") + ": " + topic + " - " + msg.MessageType); foreach (Element field in msg.Elements) { if (field.IsNull) { System.Console.WriteLine("\t\t" + field.Name + " is NULL"); continue; } processElement(field); } } }
/// <summary> /// Process miscellaneous events /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processMiscEvents(Event eventObj, Session session) { foreach (Message msg in eventObj) { switch (msg.MessageType.ToString()) { case "SessionStarted": // "Session Started" toolStripStatusLabel1.Text = msg.MessageType.ToString(); break; case "SessionTerminated": case "SessionStopped": // "Session Terminated" toolStripStatusLabel1.Text = msg.MessageType.ToString(); break; case "SessionStartupFailure": // Failed to start session toolStripStatusLabel1.Text = msg.MessageType.ToString(); break; case "ServiceOpened": // "Reference Service Opened" break; case "RequestFailure": Element reason = msg.GetElement(REASON); string message = string.Concat("Error: Source-", reason.GetElementAsString(SOURCE), ", Code-", reason.GetElementAsString(ERROR_CODE), ", category-", reason.GetElementAsString(CATEGORY), ", desc-", reason.GetElementAsString(DESCRIPTION)); toolStripStatusLabel1.Text = message; break; default: toolStripStatusLabel1.Text = msg.MessageType.ToString(); break; } } }
private void processEvent(Event eventObj, Session session) { switch (eventObj.Type) { case Event.EventType.RESPONSE: // final respose OnBBHTDUpdate(new BBHTDEventArgs(EventType.StatusMsg, String.Format("Response ({0} of {1}) received", requestPointer.ToString(), TickDataQueries.Count.ToString()))); processRequestDataEvent(eventObj, session); foreach (Message msg in eventObj) { if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("IntradayTickResponse"))) { CorrelationID cID = msg.CorrelationID; var tickDateQuery = (ITickDataQuery)msg.CorrelationID.Object; OnBBHTDUpdate(new BBHTDEventArgs(EventType.DataMsg, String.Format("Completed ({0} of {1})", requestPointer.ToString(), TickDataQueries.Count.ToString()), tickDateQuery)); } } if (AutoChainQueries) { SendNextRequest(); } break; case Event.EventType.PARTIAL_RESPONSE: partialResponseCnt++; OnBBHTDUpdate(new BBHTDEventArgs(EventType.StatusMsg, "Pratial Response #" + partialResponseCnt.ToString())); processRequestDataEvent(eventObj, session); break; default: // processMiscEvents(eventObj, session); break; } }
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("GetBrokerStrategyInfoWithAssetClass"); //request.set("EMSX_REQUEST_SEQ", 1); request.Set("EMSX_ASSET_CLASS", "EQTY"); //one of EQTY, OPT, FUT or MULTILEG_OPT request.Set("EMSX_BROKER", "BMTB"); request.Set("EMSX_STRATEGY", "VWAP"); 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 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); } } }
private void processSubscriptionDataEvent(Event eventObj, Session session) { System.Console.WriteLine("Processing SUBSCRIPTION_DATA"); foreach (Message msg in eventObj) { string topic = (string)msg.CorrelationID.Object; foreach (Element field in msg.Elements) { switch (d_subscriptionDataMsgEnumTable[field.Name]) { case SubscriptionDataMsgType.BID: case SubscriptionDataMsgType.ASK: case SubscriptionDataMsgType.LAST_PRICE: { System.Console.WriteLine(System.DateTime.Now.ToString("s") + ": " + topic + " " + field.Name + " " + field.GetValueAsString()); } break; } } } }
private void processServiceEvent(Event evt, Session session) { Log.LogMessage(LogLevels.BASIC, "Processing " + evt.Type.ToString()); foreach (Message msg in evt) { if (msg.MessageType.Equals(SERVICE_OPENED)) { Log.LogMessage(LogLevels.BASIC, "Service opened..."); this.service = session.GetService(MKTDATA_SERVICE); Log.LogMessage(LogLevels.BASIC, "Got service...ready..."); this.ready = true; } else if (msg.MessageType.Equals(SERVICE_OPEN_FAILURE)) { Log.LogMessage(LogLevels.BASIC, "Error: Service failed to open"); } } }
private void processSubscriptionStatusEvent(Event evt, Session session) { System.Console.WriteLine("Received Event: " + evt.Type); foreach (Message msg in evt) { if (msg.MessageType.Equals(SUBSCRIPTION_STARTED)) { System.Console.WriteLine("IOI subscription started successfully"); } else if (msg.MessageType.Equals(SUBSCRIPTION_FAILURE)) { System.Console.WriteLine("Error: IOI subscription failed"); System.Console.WriteLine("MESSAGE: " + msg); } else if (msg.MessageType.Equals(SUBSCRIPTION_TERMINATED)) { System.Console.WriteLine("IOI subscription terminated"); System.Console.WriteLine("MESSAGE: " + msg); } } }
// Event handler for the session public void processBBEvent(Event eventObject, Session session) { // We are only interested in market data events related to // our subscription if (eventObject.Type == Event.EventType.SUBSCRIPTION_DATA) { // Each event may have multiple messages. So loop // through all of the messages foreach (Message msg in eventObject) { // For Debugging use the display all of the fields: System.Console.WriteLine(msg); // If we have both LAST_TRADE and SIZE_LAST_TRADE elements then // assign the values to the text boxes if (msg.HasElement("LAST_TRADE") && msg.HasElement("SIZE_LAST_TRADE")) { // Obtain the topic of the message string topic = (string)msg.CorrelationID.Object; try { tbPrice.Invoke(new MethodInvoker(delegate { tbPrice.Text = (string)msg.GetElementAsString("LAST_TRADE"); })); tbVolume.Invoke(new MethodInvoker(delegate { tbVolume.Text = (string)msg.GetElementAsString("SIZE_LAST_TRADE"); })); } catch (Exception e) { // Send an error message to console System.Console.WriteLine("Error: " + e.ToString()); } } // end if msg has both last trade and size } // end loop over Messages in the eventObject } // end if event type is subscription data }
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("DeleteOrder"); //request.set("EMSX_REQUEST_SEQ", 1); request.GetElement("EMSX_SEQUENCE").AppendValue(4116556); request.GetElement("EMSX_SEQUENCE").AppendValue(4116561); 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 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(GET_TRADERS)) { Element traders = msg.GetElement("EMSX_TRADER_UUID"); int numValues = traders.NumValues; for (int i = 0; i < numValues; i++) { String trader = traders.GetValueAsString(i); System.Console.WriteLine("TRADERS: " + trader); } } quit = true; session.Stop(); } } }
public void processEvent(Event eventObj, Session session) { try { if (eventObj.Type == Event.EventType.SUBSCRIPTION_DATA) { foreach (Message msg in eventObj) { if (msg.HasElement(LAST_PRICE)) { Element field = msg.GetElement(LAST_PRICE); System.Console.WriteLine(eventObj.Type + ": " + field.Name + " = " + field.GetValueAsString()); } } } } catch (Exception e) { System.Console.WriteLine(e.ToString()); } }
public void processEvent(Event eventObj, Session session) { try { switch (eventObj.Type) { case Event.EventType.SESSION_STATUS: case Event.EventType.SERVICE_STATUS: case Event.EventType.REQUEST_STATUS: case Event.EventType.AUTHORIZATION_STATUS: printEvent(eventObj); break; case Event.EventType.SUBSCRIPTION_DATA: processSubscriptionDataEvent(eventObj, session); break; } } catch (System.Exception e) { System.Console.WriteLine(e.ToString()); } }
public void processSubscriptionDataEvent(Event eventObj, Session session) { foreach (Message msg in eventObj) { if (!msg.HasElement(d_fieldAsName)) { continue; } string topic = (string)msg.CorrelationID.Object; System.Console.WriteLine(System.DateTime.Now.ToString("s") + ": " + topic + " - " + msg.MessageType); Element field = msg.GetElement(d_fieldAsName); if (field.IsNull) { System.Console.WriteLine(d_field + "is null, ignoring"); } Service service = msg.Service; bool needsEntitlement = msg.HasElement(EID); for (int j = 0; j < d_identities.Count; ++j) { Identity identity = (Identity)d_identities[j]; if (!needsEntitlement || identity.HasEntitlements(msg.GetElement(EID), service)) { System.Console.WriteLine("User: "******" is entitled to " + field); // Now Distribute message to the user. } else { System.Console.WriteLine("User: "******" is NOT entitled for " + d_field + " because of " + msg.GetElement(EID)); } } } }
// 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 processSubscriptionStatus(Event eventObj, Session session) { System.Console.Out.WriteLine("Processing SUBSCRIPTION_STATUS"); foreach (Message msg in eventObj) { string topic = (string)msg.CorrelationID.Object; switch (d_subscriptionStatusMsgEnumTable[msg.MessageType]) { case SubscriptionStatusMsgType.SUBSCRIPTION_STARTED: { System.Console.Out.WriteLine("Subscription for: " + topic + " started"); } break; case SubscriptionStatusMsgType.SUBSCRIPTION_FAILURE: { System.Console.Out.WriteLine("Subscription for: " + topic + " failed"); printEvent(eventObj, session); } break; case SubscriptionStatusMsgType.SUBSCRIPTION_TERMINATED: { System.Console.Out.WriteLine("Subscription for: " + topic + " has been terminated"); printEvent(eventObj, session); } break; default: System.Console.Out.WriteLine( "Unhandled subscription status: " + msg.MessageType); break; } } }
private static void ProcessRequestDataEvent(Event eventObj, Session session) { // process message foreach (Message msg in eventObj) { // get correlation id var securityObj = (BloombergSecurity)msg.CorrelationID.Object; // process market data if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("MarketDataEvents"))) { // check for initial paint if (msg.HasElement("SES_START")) { if (msg.GetElementAsBool("IS_DELAYED_STREAM")) { securityObj.SetDelayedStream(); } } // process tick data for (int fieldIndex = 1; fieldIndex < securityObj.SecurityFields.Count; fieldIndex++) { string field = securityObj.SecurityFields[fieldIndex].ToUpper(); if (msg.HasElement(field)) { //msg.GetElementAsDatetime(Element.) // check element to see if it has null value if (!msg.GetElement(field).IsNull) { string value = msg.GetElementAsString(field); securityObj.Setfield(securityObj.SecurityFields[fieldIndex], value); } } } // allow application to update UI Application.DoEvents(); } } }
/// <summary> /// Process subscription data /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processRequestDataEvent(Event eventObj, Session session) { string securityName = string.Empty; // process message foreach (Message msg in eventObj.GetMessages()) { if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("ReferenceDataResponse"))) { // process errors if (msg.HasElement(RESPONSE_ERROR)) { Element error = msg.GetElement(RESPONSE_ERROR); Error(String.Format("{0}, {1}", kKospiIndex, 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); Element security = secDataArray.GetElement(SECURITY); Error(secError.GetElementAsString(MESSAGE)); Error(security.ToString()); } 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); logger.Warn("{0} has field error.", kKospiIndex); } // end for } // end if // process securities for (int index = 0; index < numberOfSecurities; index++) { Element secData = secDataArray.GetValueAsElement(index); Element fieldData = secData.GetElement("fieldData"); if (fieldData.HasElement(kIndexWeight)) { Element weightField = fieldData.GetElement(kIndexWeight); for (int i = 0; i < weightField.NumValues; ++i) { String memberTicker = ""; double weight = 0.0; Element row = weightField.GetValueAsElement(i); if (row.HasElement("Member Ticker and Exchange Code")) { Element item = row.GetElement("Member Ticker and Exchange Code"); memberTicker = item.GetValueAsString(); } else { continue; } if (row.HasElement("Percentage Weight")) { Element item = row.GetElement("Percentage Weight"); weight = item.GetValueAsFloat64(); } else { continue; } _resultDict.Add(memberTicker + " Equity", weight); } // logger.Info(fieldStr); } } // end for } // end else } // end if } // end foreach }
/// <summary> /// Request status event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processMiscEvents(Event eventObj, Session session) { foreach (Message msg in eventObj.GetMessages()) { switch (msg.MessageType.ToString()) { case "SessionStarted": // "Session Started" break; case "SessionTerminated": case "SessionStopped": // "Session Terminated" break; case "ServiceOpened": // "Reference Service Opened" break; case "RequestFailure": Element reason = msg.GetElement(REASON); string message = string.Concat("Error: Source-", reason.GetElementAsString(SOURCE), ", Code-", reason.GetElementAsString(ERROR_CODE), ", category-", reason.GetElementAsString(CATEGORY), ", desc-", reason.GetElementAsString(DESCRIPTION)); logger.Info(message); break; default: logger.Info(msg.MessageType.ToString()); break; } } }
/// <summary> /// Bloomberg data event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void processEvent(Event eventObj, Session session) { if (InvokeRequired) { Invoke(new EventHandler(processEvent), new object[] { eventObj, session }); } else { try { switch (eventObj.Type) { case Event.EventType.RESPONSE: // process data processRequestDataEvent(eventObj, session); break; case Event.EventType.PARTIAL_RESPONSE: // process partial data processRequestDataEvent(eventObj, session); break; default: // process misc events processMiscEvents(eventObj, session); break; } } catch (System.Exception e) { logger.Info(e.Message.ToString()); } } }
/// <summary> /// Data Event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private void ProcessEvent(Event eventObj, Session session) { //if (InvokeRequired) //{ // try // { // Invoke(new EventHandler(processEvent), new object[] { eventObj, session }); // } // catch (Exception) // { // Console.WriteLine("Invoke failed"); // } //} //else //{ //try //{ switch (eventObj.Type) { case Event.EventType.SUBSCRIPTION_DATA: // process subscription data ProcessRequestDataEvent(eventObj, session); break; case Event.EventType.SUBSCRIPTION_STATUS: // process subscription status ProcessRequestStatusEvent(eventObj, session); break; default: ProcessMiscEvents(eventObj, session); break; } //} //catch (System.Exception e) //{ // //toolStripStatusLabel1.Text = e.Message.ToString(); //} //} }
/// <summary> /// Request status event /// </summary> /// <param name="eventObj"></param> /// <param name="session"></param> private static void ProcessRequestStatusEvent(Event eventObj, Session session) { List<string> dataList = new List<string>(); // process status message foreach (Message msg in eventObj) { var securityObj = (BloombergSecurity)msg.CorrelationID.Object; DataGridViewRow dataRow = securityObj.DataGridRow; 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; } } } } }
// Event handler for the session public void processBBEvent(Event eventObject, Session session) { //Only use the data coming in related to our subscription data if (eventObject.Type == Event.EventType.SUBSCRIPTION_DATA) { //Loop through the messages in the eventObject foreach (Message msg in eventObject) { // Get only the messages that have the last trade price and size of last trade if (msg.HasElement("LAST_TRADE") && msg.HasElement("SIZE_LAST_TRADE")) { // Obtain the topic of the message string topic = (string)msg.CorrelationID.Object; try { //Creates a new thread for getting the price of last trade tbPrice.Invoke(new MethodInvoker(delegate { tbPrice.Text = (string)msg.GetElementAsString("LAST_TRADE"); })); //Creates a new thread for getting volume or size of trade tbVolume.Invoke(new MethodInvoker(delegate { tbVolume.Text = (string)msg.GetElementAsString("SIZE_LAST_TRADE"); })); // end of tvVolume.Invoke() tbVWAP.Invoke(new MethodInvoker(delegate { String VWAP = calculateVWAP(Convert.ToDouble(msg.GetElementAsString("LAST_TRADE")), Convert.ToDouble(msg.GetElementAsString("SIZE_LAST_TRADE"))); tbVWAP.Text = VWAP; chtPrices.Series[1].Points.AddY(Convert.ToDouble(VWAP)); })); // end of tbVWAP.invoke() chtPrices.Invoke(new MethodInvoker(delegate { double lastTradePrice = Convert.ToDouble(msg.GetElementAsString("LAST_TRADE")); double myVolume = Convert.ToDouble(msg.GetElementAsString("SIZE_LAST_TRADE")); if (firstPointY) { //Set the Y axis range to the lastTradePrice-1 to lastTradePrice+1 chtPrices.ChartAreas[0].AxisY.Minimum = lastTradePrice - 1; chtPrices.ChartAreas[0].AxisY.Maximum = lastTradePrice + 1; //It is no longer the first plotted point from here on out firstPointY = false; } //This will change the primary y axis scale if price is smaller than the minimum y axis else if(lastTradePrice < chtPrices.ChartAreas[0].AxisY.Minimum) chtPrices.ChartAreas[0].AxisY.Minimum = lastTradePrice-0.01; //This will change the primary y axis scale if price is smaller than the minimum y axis else if(lastTradePrice > chtPrices.ChartAreas[0].AxisY.Maximum) chtPrices.ChartAreas[0].AxisY.Maximum = lastTradePrice+0.01; // Get previous tickTest and price double prevTick = tickTestsResults[tickTestsResults.Count - 1]; double prevPrice = prices[prices.Count - 1]; // Calculate the new sum of money flow with tickTest() tickTest(lastTradePrice, myVolume, prevPrice, prevTick); // Plot the money flow first to get the previous trade price chtPrices.Series[2].Points.AddY(sumMF); //Add the lastTradePrice to our prices list prices.Add(lastTradePrice); // Plot the last trade price chtPrices.Series[0].Points.AddY(lastTradePrice); })); //end of chtPrices.Invoke() } catch (Exception e) { // Send an error message to console System.Console.WriteLine("Error: " + e.ToString()); } } // end if msg has both last trade and size } // end loop over Messages in the eventObject } // end if event type is subscription data }
/// <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.GetMessages()) { if (msg.MessageType.Equals(Bloomberglp.Blpapi.Name.GetName("HistoricalDataResponse"))) { // process errors if (msg.HasElement(RESPONSE_ERROR)) { Element error = msg.GetElement(RESPONSE_ERROR); Error(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); Element security = secDataArray.GetElement(SECURITY); Error(secError.GetElementAsString(MESSAGE)); Error(security.ToString()); } 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 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.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 } // end foreach }