Example #1
0
 protected virtual void OnLevel1SummaryUpdateEvent(Level1SummaryUpdateEventArgs e)
 {
     if (Level1SummaryUpdateEvent != null)
     {
         Level1SummaryUpdateEvent(this, e);
     }
 }
            /// <summary>
            /// Handle a new price update packet:
            /// </summary>
            private void OnLevel1SummaryUpdateEvent(object sender, Level1SummaryUpdateEventArgs e)
            {
                // if ticker is not found, unsubscribe
                if (e.NotFound)
                {
                    Unsubscribe(e.Symbol);
                }

                // only update if we have a value
                if (e.Last == 0)
                {
                    return;
                }

                // only accept trade updates
                if (e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.ExtendedTrade &&
                    e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.Trade)
                {
                    return;
                }

                count++;
                var time   = FeedTime;
                var symbol = Symbol.Create(e.Symbol, SecurityType.Equity, Market.USA);
                var last   = (decimal)(e.TypeOfUpdate == Level1SummaryUpdateEventArgs.UpdateType.ExtendedTrade ? e.ExtendedTradingLast : e.Last);

                if (e.Symbol.Contains(".FXCM"))
                {
                    // the feed time is in NYC/EDT, convert it into EST
                    time   = FeedTime.ConvertTo(TimeZones.NewYork, TimeZones.EasternStandard);
                    symbol = Symbol.Create(e.Symbol.Replace(".FXCM", string.Empty), SecurityType.Forex, Market.FXCM);
                }

                var tick = new Tick(time, symbol, last, (decimal)e.Bid, (decimal)e.Ask)
                {
                    AskSize  = e.AskSize,
                    BidSize  = e.BidSize,
                    TickType = TickType.Trade,
                    Quantity = e.IncrementalVolume
                };

                _dataQueue.Add(tick);
                _prices[e.Symbol] = e.Last;
            }