private static void ProcessEvent(Event evt, Session session) { switch (evt.Type) { case Event.EventType.SESSION_STATUS: //use this to open the service foreach (Message message in evt.GetMessages()) { if (message.MessageType.Equals("SessionStarted")) { try { session.OpenServiceAsync("//blp/mktdata", new CorrelationID(-9999)); } catch (Exception) { System.Console.Error.WriteLine("Could not open //blp/mktdata for async"); } } } break; case Event.EventType.SERVICE_STATUS: //use this to subscribe to ticker feeds List<Subscription> slist = new List<Subscription>(); //Conflate the data to show every two seconds. // Please note that the Bloomberg API Emulator code does not treat this exactly correct: individual subscriptions should each have their own interval setting. // I have not coded that in the emulator. List<string> options = new string[] { "interval=2" }.ToList(); //2 seconds. //Comment this line to receive a subscription data event whenever it happens in the market. //slist.Add(new Subscription("ZYZZ US EQUITY", MarketDataRequest._fields, options)); //the code treats securities that start with a "Z" as non-existent slist.Add(new Subscription("SPY US EQUITY", MarketDataRequest._fields, options)); slist.Add(new Subscription("AAPL 150117C00600000 EQUITY", MarketDataRequest._fields, options)); session.Subscribe(slist); break; case Event.EventType.SUBSCRIPTION_DATA: case Event.EventType.RESPONSE: case Event.EventType.PARTIAL_RESPONSE: MarketDataRequest.ProcessEvent(evt); break; case Event.EventType.SUBSCRIPTION_STATUS: foreach (var msg in evt.GetMessages()) { bool fieldExceptionsExist = msg.HasElement("exceptions", true); if (fieldExceptionsExist) { Element elmExceptions = msg["exceptions"]; for (int i = 0; i < elmExceptions.NumValues; i++) { Element elmException = elmExceptions.GetValueAsElement(i); string fieldId = elmException.GetElementAsString("fieldId"); Element elmReason = elmException["reason"]; string source = elmReason.GetElementAsString("source"); int errorCode = elmReason.GetElementAsInt32("errorCode"); string category = elmReason.GetElementAsString("category"); string description = elmReason.GetElementAsString("description"); Console.WriteLine("field error: "); Console.WriteLine(string.Format("\tfieldId = {0}", fieldId)); Console.WriteLine(string.Format("\tsource = {0}", source)); Console.WriteLine(string.Format("\terrorCode = {0}", errorCode)); Console.WriteLine(string.Format("\tcategory = {0}", category)); Console.WriteLine(string.Format("\tdescription = {0}", description)); } } } break; } }
private static void ProcessResponse(Event evt, string security) { //Note that the IntradayBarResponse does not include the name of the requested security anywhere Console.WriteLine(security); foreach (var msg in evt.GetMessages()) { bool isSecurityError = msg.HasElement("responseError", true); if (isSecurityError) { Element secError = msg["responseError"]; string source = secError.GetElementAsString("source"); int code = secError.GetElementAsInt32("code"); string category = secError.GetElementAsString("category"); string errorMessage = secError.GetElementAsString("message"); string subCategory = secError.GetElementAsString("subcategory"); Console.WriteLine("response error"); Console.WriteLine(string.Format("source = {0}", source)); Console.WriteLine(string.Format("code = {0}", code)); Console.WriteLine(string.Format("category = {0}", category)); Console.WriteLine(string.Format("errorMessage = {0}", errorMessage)); Console.WriteLine(string.Format("subCategory = {0}", subCategory)); } else { Element elmBarTickDataArray = msg["barData"]["barTickData"]; for (int valueIndex = 0; valueIndex < elmBarTickDataArray.NumValues; valueIndex++) { Element elmBarTickData = elmBarTickDataArray.GetValueAsElement(valueIndex); DateTime dtTick = elmBarTickData.GetElementAsDatetime("time").ToSystemDateTime(); double open = elmBarTickData.GetElementAsFloat64("open"); double high = elmBarTickData.GetElementAsFloat64("high"); double low = elmBarTickData.GetElementAsFloat64("low"); double close = elmBarTickData.GetElementAsFloat64("close"); int numEvents = elmBarTickData.GetElementAsInt32("numEvents"); long volume = elmBarTickData.GetElementAsInt64("volume"); double value = elmBarTickData.GetElementAsFloat64("value"); Console.WriteLine(dtTick.ToString("HH:mm:ss")); Console.WriteLine(string.Format("\t open = {0:c2}", open)); Console.WriteLine(string.Format("\t high = {0:c2}", high)); Console.WriteLine(string.Format("\t low = {0:c2}", low)); Console.WriteLine(string.Format("\t close = {0:c2}", close)); Console.WriteLine(string.Format("\t numEvents = {0:n0}", numEvents)); Console.WriteLine(string.Format("\t volume = {0:n0}", volume)); Console.WriteLine(string.Format("\t value = {0:n0}", value)); Console.WriteLine(); } } } }
private static void ProcessEvent(Event evt) { const bool excludeNullElements = true; foreach (Message message in evt.GetMessages()) { string security = message.TopicName; foreach (var field in MarketDataRequest._fields) { //This ignores the extraneous fields in the response if (message.HasElement(field, excludeNullElements)) //be careful, excludeNullElements is false by default { Element elmField = message[field]; Console.WriteLine(string.Format("{0:HH:mm:ss}: {1}, {2}", DateTime.Now, security, elmField.ToString().Trim())); } } } Console.WriteLine(); }
private static void handleOtherEvent(Event eventObj) { Console.WriteLine("EventType=" + eventObj.Type); foreach (Message message in eventObj.GetMessages()) { Console.WriteLine("correlationID=" + message.CorrelationID); Console.WriteLine("messageType=" + message.MessageType); Console.WriteLine(message.ToString()); if (Event.EventType.SESSION_STATUS == eventObj.Type && message.MessageType.Equals("SessionTerminated")) { Console.WriteLine("Terminating: " + message.MessageType); } } }
private static void handleResponseEvent(Event eventObj) { Console.WriteLine(); Console.WriteLine(); Console.WriteLine("EventType =" + eventObj.Type); foreach (Message message in eventObj.GetMessages()) { Console.WriteLine(); Console.WriteLine(); Console.WriteLine("correlationID=" + message.CorrelationID); Console.WriteLine("messageType =" + message.MessageType); Element elmSecurityDataArray = message["securityData"]; for (int valueIndex = 0; valueIndex < elmSecurityDataArray.NumValues; valueIndex++) { Element elmSecurityData = elmSecurityDataArray.GetValueAsElement(valueIndex); string security = elmSecurityData.GetElementAsString("security"); Console.WriteLine(security); bool hasFieldErrors = elmSecurityData.HasElement("fieldExceptions", true); if (hasFieldErrors) { Element elmFieldErrors = elmSecurityData["fieldExceptions"]; for (int errorIndex = 0; errorIndex < elmFieldErrors.NumValues; errorIndex++) { Element fieldError = elmFieldErrors.GetValueAsElement(errorIndex); string fieldId = fieldError.GetElementAsString("fieldId"); Element errorInfo = fieldError["errorInfo"]; string source = errorInfo.GetElementAsString("source"); int code = errorInfo.GetElementAsInt32("code"); string category = errorInfo.GetElementAsString("category"); string strMessage = errorInfo.GetElementAsString("message"); string subCategory = errorInfo.GetElementAsString("subcategory"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("\tfield error"); Console.WriteLine(string.Format("\tfieldId = {0}", fieldId)); Console.WriteLine(string.Format("\tsource = {0}", source)); Console.WriteLine(string.Format("\tcode = {0}", code)); Console.WriteLine(string.Format("\tcategory = {0}", category)); Console.WriteLine(string.Format("\terrorMessage = {0}", strMessage)); Console.WriteLine(string.Format("\tsubCategory = {0}", subCategory)); } } bool isSecurityError = elmSecurityData.HasElement("securityError", true); if (isSecurityError) { Element secError = elmSecurityData["securityError"]; string source = secError.GetElementAsString("source"); int code = secError.GetElementAsInt32("code"); string category = secError.GetElementAsString("category"); string errorMessage = secError.GetElementAsString("message"); string subCategory = secError.GetElementAsString("subcategory"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("\tsecurity error"); Console.WriteLine(string.Format("\tsource = {0}", source)); Console.WriteLine(string.Format("\tcode = {0}", code)); Console.WriteLine(string.Format("\tcategory = {0}", category)); Console.WriteLine(string.Format("\terrorMessage = {0}", errorMessage)); Console.WriteLine(string.Format("\tsubCategory = {0}", subCategory)); } else { Element elmFieldData = elmSecurityData["fieldData"]; double pxLast = elmFieldData.GetElementAsFloat64("PX_LAST"); double bid = elmFieldData.GetElementAsFloat64("BID"); double ask = elmFieldData.GetElementAsFloat64("ASK"); string ticker = elmFieldData.GetElementAsString("TICKER"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("\tPX_LAST = " + pxLast.ToString()); Console.WriteLine("\tBID = " + bid.ToString()); Console.WriteLine("\tASK = " + ask.ToString()); Console.WriteLine("\tTICKER = " + ticker.ToString()); bool excludeNullElements = true; if (elmFieldData.HasElement("CHAIN_TICKERS", excludeNullElements)) //be careful, excludeNullElements is false by default { Element chainTickers = elmFieldData["CHAIN_TICKERS"]; for (int chainTickerValueIndex = 0; chainTickerValueIndex < chainTickers.NumValues; chainTickerValueIndex++) { Element chainTicker = chainTickers.GetValueAsElement(chainTickerValueIndex); string strChainTicker = chainTicker.GetElementAsString("Ticker"); Console.WriteLine("\tCHAIN_TICKER = " + strChainTicker.ToString()); } } else { Console.WriteLine("\tNo CHAIN_TICKER information"); } } } } }
private static void ProcessResponse(Event evt, string security) { //Note that the IntradayTickResponse does not include the name of the requested security anywhere Console.WriteLine(security); foreach (var msg in evt.GetMessages()) { bool isSecurityError = msg.HasElement("responseError", true); if (isSecurityError) { Element secError = msg["responseError"]; string source = secError.GetElementAsString("source"); int code = secError.GetElementAsInt32("code"); string category = secError.GetElementAsString("category"); string errorMessage = secError.GetElementAsString("message"); string subCategory = secError.GetElementAsString("subcategory"); Console.WriteLine("response error"); Console.WriteLine(string.Format("source = {0}", source)); Console.WriteLine(string.Format("code = {0}", code)); Console.WriteLine(string.Format("category = {0}", category)); Console.WriteLine(string.Format("errorMessage = {0}", errorMessage)); Console.WriteLine(string.Format("subCategory = {0}", subCategory)); } else { Element elmTickDataArr = msg["tickData"]; Element elmTickData = elmTickDataArr["tickData"]; for (int valueCount = 0; valueCount < elmTickData.NumValues; valueCount++) { Element elmTickDataValue = elmTickData.GetValueAsElement(valueCount); DateTime time = elmTickDataValue.GetElementAsTime("time").ToSystemDateTime(); string type = elmTickDataValue.GetElementAsString("type"); double value = elmTickDataValue.GetElementAsFloat64("value"); int size = elmTickDataValue.GetElementAsInt32("size"); Console.WriteLine(string.Format("{0:HH:mm:ss}: {1}, {2} @ {3}", time, type, size, value)); } } } }
private static void handleResponseEvent(Event eventObj) { Console.WriteLine("EventType = " + eventObj.Type); foreach (Message message in eventObj.GetMessages()) { Console.WriteLine(); Console.WriteLine("correlationID= " + message.CorrelationID); Console.WriteLine("messageType = " + message.MessageType); Element elmSecurityData = message["securityData"]; Element elmSecurity = elmSecurityData["security"]; string security = elmSecurity.GetValueAsString(); Console.WriteLine(security); if (elmSecurityData.HasElement("securityError", true)) { Element elmSecError = elmSecurityData["securityError"]; string source = elmSecError.GetElementAsString("source"); int code = elmSecError.GetElementAsInt32("code"); string category = elmSecError.GetElementAsString("category"); string errorMessage = elmSecError.GetElementAsString("message"); string subCategory = elmSecError.GetElementAsString("subcategory"); Console.WriteLine("security error"); Console.WriteLine(string.Format("source = {0}", source)); Console.WriteLine(string.Format("code = {0}", code)); Console.WriteLine(string.Format("category = {0}", category)); Console.WriteLine(string.Format("errorMessage = {0}", errorMessage)); Console.WriteLine(string.Format("subCategory = {0}", subCategory)); } else { bool hasFieldErrors = elmSecurityData.HasElement("fieldExceptions", true); if (hasFieldErrors) { Element elmFieldErrors = elmSecurityData["fieldExceptions"]; for (int errorIndex = 0; errorIndex < elmFieldErrors.NumValues; errorIndex++) { Element fieldError = elmFieldErrors.GetValueAsElement(errorIndex); string fieldId = fieldError.GetElementAsString("fieldId"); Element errorInfo = fieldError["errorInfo"]; string source = errorInfo.GetElementAsString("source"); int code = errorInfo.GetElementAsInt32("code"); string category = errorInfo.GetElementAsString("category"); string strMessage = errorInfo.GetElementAsString("message"); string subCategory = errorInfo.GetElementAsString("subcategory"); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("field error: "); Console.WriteLine(string.Format("\tfieldId = {0}", fieldId)); Console.WriteLine(string.Format("\tsource = {0}", source)); Console.WriteLine(string.Format("\tcode = {0}", code)); Console.WriteLine(string.Format("\tcategory = {0}", category)); Console.WriteLine(string.Format("\terrorMessage = {0}", strMessage)); Console.WriteLine(string.Format("\tsubCategory = {0}", subCategory)); } } Element elmFieldData = elmSecurityData["fieldData"]; for (int valueIndex = 0; valueIndex < elmFieldData.NumValues; valueIndex++) { Element elmValues = elmFieldData.GetValueAsElement(valueIndex); DateTime date = elmValues.GetElementAsDate("date").ToSystemDateTime(); double bid = elmValues.GetElementAsFloat64("BID"); double ask = elmValues.GetElementAsFloat64("ASK"); Console.WriteLine(string.Format("{0:yyyy-MM-dd}: BID = {1}, ASK = {2}", date, bid, ask)); } } } }