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; }