Example #1
0
        void m_nativeUtilities_OnMessage(object sender, EventArgs e)
        {
            Action a = delegate
            {
                try
                {
                    BloombergMessageEventArgs args         = e as BloombergMessageEventArgs;
                    ISubscriptionId           subscription = args.SubscriptionId;
                    DataSet1.StockQuotesRow   row          = subscription.QuoteObject as DataSet1.StockQuotesRow;

                    if (checkBoxLog.Checked)
                    {
                        m_log.Info(args.MessageToXml());
                    }

                    bool bUpdated = false;
                    switch (args.Message.MessageType.ToString())
                    {
                    case "SubscriptionStarted":
                        row.Subscribed = true;
                        break;

                    case "SubscriptionTerminated":
                    case "SubscriptionFailure":
                        row.Subscribed = false;
                        break;

                    case "MarketDataEvents":

                        if (args.Message.HasElement("OPEN"))
                        {
                            row.Open = (double)args.Message.GetElementAsFloat64("OPEN");
                            bUpdated = true;
                        }

                        if (args.Message.HasElement("PREV_CLOSE_VALUE_REALTIME"))
                        {
                            row.PrevClose = (double)args.Message.GetElementAsFloat64("PREV_CLOSE_VALUE_REALTIME");
                            bUpdated      = true;
                        }

                        if (args.Message.HasElement("LAST_PRICE"))
                        {
                            if (!row.Closed)
                            {
                                row.LastPrice = (double)args.Message.GetElementAsFloat64("LAST_PRICE");
                                bUpdated      = true;
                            }
                        }

                        if (args.Message.HasElement("BID"))
                        {
                            if (!row.Closed)
                            {
                                row.Bid  = (double)args.Message.GetElementAsFloat64("BID");
                                bUpdated = true;
                            }
                        }
                        if (args.Message.HasElement("ASK"))
                        {
                            if (!row.Closed)
                            {
                                row.Ask  = (double)args.Message.GetElementAsFloat64("ASK");
                                bUpdated = true;
                            }
                        }
                        if (args.Message.HasElement("MID"))
                        {
                            if (!row.Closed)
                            {
                                row.Mid  = (double)args.Message.GetElementAsFloat64("MID");
                                bUpdated = true;
                            }
                        }
                        if (args.Message.HasElement("DELTA_MID_RT"))
                        {
                            if (!row.Closed)
                            {
                                row.Delta = (double)args.Message.GetElementAsFloat64("DELTA_MID_RT");
                                bUpdated  = true;
                            }
                        }
                        if (args.Message.HasElement("GAMMA_MID_RT"))
                        {
                            if (!row.Closed)
                            {
                                row.Gamma = (double)args.Message.GetElementAsFloat64("GAMMA_MID_RT");
                                bUpdated  = true;
                            }
                        }
                        if (args.Message.HasElement("THETA_MID_RT"))
                        {
                            if (!row.Closed)
                            {
                                row.Theta = (double)args.Message.GetElementAsFloat64("THETA_MID_RT");
                                bUpdated  = true;
                            }
                        }
                        if (args.Message.HasElement("VEGA_MID_RT"))
                        {
                            if (!row.Closed)
                            {
                                row.Vega = (double)args.Message.GetElementAsFloat64("VEGA_MID_RT");
                                bUpdated = true;
                            }
                        }
                        if (args.Message.HasElement("IVOL_MID_RT"))
                        {
                            if (!row.Closed)
                            {
                                row.ImpliedVol = (double)args.Message.GetElementAsFloat64("IVOL_MID_RT");
                                bUpdated       = true;
                            }
                        }

                        if (args.Message.HasElement("OFFICIAL_CLOSE_TODAY_RT"))
                        {
                            double closingPrice = (double)args.Message.GetElementAsFloat64("OFFICIAL_CLOSE_TODAY_RT");
                            row.ClosingPrice = closingPrice;
                            bUpdated         = true;
                        }

                        if (args.Message.HasElement("RT_SIMP_SEC_STATUS"))
                        {
                            switch (args.Message.GetElementAsString("RT_SIMP_SEC_STATUS"))
                            {
                            case "CLOS":
                            case "POST":
                            case "OUT":
                                if (!row.Closed)
                                {
                                    row.Closed = true;
                                    bUpdated   = true;
                                }
                                break;

                            default:
                                if (row.Closed)
                                {
                                    row.Closed = false;
                                    bUpdated   = true;
                                }
                                break;
                            }
                        }
                        break;
                    }

                    if (bUpdated)
                    {
                        row.Time = DateTime.Now - DateTime.Today;
                    }
                }
                catch (Exception ex)
                {
                    OnError("Error in message handler", ex);
                }
            };

            if (InvokeRequired)
            {
                BeginInvoke(a);
            }
            else
            {
                a.Invoke();
            }
        }
        QuoteMessage BuildQuoteMessage(Message message, ISubscriptionId id)
        {
            QuoteMessage quote = new QuoteMessage()
            {
                Ticker = id.Symbol
            };

            try
            {
                switch (message.MessageType.ToString())
                {
                case "SubscriptionStarted":
                    quote.SubscriptionStatus = SubscriptionStatus.Subscribed;
                    Info("Subscription started for " + id.Symbol);
                    break;

                case "SubscriptionTerminated":
                    quote.SubscriptionStatus = SubscriptionStatus.Unsubscribed;
                    Info("Subscription terminated for " + id.Symbol);
                    break;

                case "SubscriptionFailure":
                    quote.SubscriptionStatus = SubscriptionStatus.Rejected;
                    Info("Subscription rejected for " + id.Symbol);
                    break;

                case "MarketDataEvents":

                    if (message.HasElement("OPEN", true))
                    {
                        quote.Open = (double)message.GetElementAsFloat64("OPEN");
                    }

                    if (message.HasElement("PREV_CLOSE_VALUE_REALTIME", true))
                    {
                        quote.PrevClose = (double)message.GetElementAsFloat64("PREV_CLOSE_VALUE_REALTIME");
                    }

                    if (message.HasElement("LAST_PRICE", true))
                    {
                        quote.Last = (double)message.GetElementAsFloat64("LAST_PRICE");
                    }

                    if (message.HasElement("BID", true))
                    {
                        quote.Bid = (double)message.GetElementAsFloat64("BID");
                    }
                    if (message.HasElement("ASK", true))
                    {
                        quote.Ask = (double)message.GetElementAsFloat64("ASK");
                    }
                    if (message.HasElement("DELTA_MID_RT", true))
                    {
                        quote.Delta = (double)message.GetElementAsFloat64("DELTA_MID_RT");
                    }
                    if (message.HasElement("GAMMA_MID_RT", true))
                    {
                        quote.Gamma = (double)message.GetElementAsFloat64("GAMMA_MID_RT");
                    }
                    if (message.HasElement("THETA_MID_RT", true))
                    {
                        quote.Theta = (double)message.GetElementAsFloat64("THETA_MID_RT");
                    }
                    if (message.HasElement("VEGA_MID_RT", true))
                    {
                        quote.Vega = (double)message.GetElementAsFloat64("VEGA_MID_RT");
                    }
                    if (message.HasElement("IVOL_MID_RT", true))
                    {
                        quote.ImpliedVol = (double)message.GetElementAsFloat64("IVOL_MID_RT");
                    }

                    if (message.HasElement("OFFICIAL_CLOSE_TODAY_RT", true))
                    {
                        quote.Close = (double)message.GetElementAsFloat64("OFFICIAL_CLOSE_TODAY_RT");
                    }

                    if (message.HasElement("RT_SIMP_SEC_STATUS", true))
                    {
                        switch (message.GetElementAsString("RT_SIMP_SEC_STATUS"))
                        {
                        case "CLOS":
                        case "POST":
                        case "OUT":
                            quote.OpenStatus = OpenStatus.Closed;
                            break;

                        default:
                            quote.OpenStatus = OpenStatus.Open;
                            break;
                        }
                    }
                    break;

                default:
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Error("ERROR in Message handler: ", ex);
                return(null);
            }

            return(quote);
        }