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; }
/// <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 and B/A updates if (e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.ExtendedTrade && e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.Trade && e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.Bid && e.TypeOfUpdate != Level1SummaryUpdateEventArgs.UpdateType.Ask) { return; } count++; var time = FeedTime; var last = (decimal)(e.TypeOfUpdate == Level1SummaryUpdateEventArgs.UpdateType.ExtendedTrade ? e.ExtendedTradingLast : e.Last); var symbol = GetLeanSymbol(e.Symbol); TickType tradeType; switch (symbol.ID.SecurityType) { // the feed time is in NYC/EDT, convert it into EST case SecurityType.Forex: time = FeedTime.ConvertTo(TimeZones.NewYork, TimeZones.EasternStandard); // TypeOfUpdate always equal to UpdateType.Trade for FXCM, but the message contains B/A and last data tradeType = TickType.Quote; break; // for all other asset classes we leave it as is (NYC/EDT) default: time = FeedTime; tradeType = e.TypeOfUpdate == Level1SummaryUpdateEventArgs.UpdateType.Bid || e.TypeOfUpdate == Level1SummaryUpdateEventArgs.UpdateType.Ask ? TickType.Quote : TickType.Trade; break; } var tick = new Tick(time, symbol, last, (decimal)e.Bid, (decimal)e.Ask) { AskSize = e.AskSize, BidSize = e.BidSize, Quantity = e.IncrementalVolume, TickType = tradeType, DataType = MarketDataType.Tick }; Emit(tick); _prices[e.Symbol] = e.Last; if (symbol.ID.SecurityType == SecurityType.Option || symbol.ID.SecurityType == SecurityType.Future) { if (!_openInterests.ContainsKey(e.Symbol) || _openInterests[e.Symbol] != e.OpenInterest) { var oi = new OpenInterest(time, symbol, e.OpenInterest); Emit(oi); _openInterests[e.Symbol] = e.OpenInterest; } } }
/// <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; }
protected virtual void OnLevel1SummaryUpdateEvent(Level1SummaryUpdateEventArgs e) { if (Level1SummaryUpdateEvent != null) Level1SummaryUpdateEvent(this, e); }