Exemple #1
0
 protected virtual void OnLevel1SummaryUpdateEvent(Level1SummaryUpdateEventArgs e)
 {
     if (Level1SummaryUpdateEvent != null)
     {
         Level1SummaryUpdateEvent(this, e);
     }
 }
Exemple #2
0
            /// <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;
            }
Exemple #3
0
        /// <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;
            }
Exemple #5
0
 protected virtual void OnLevel1SummaryUpdateEvent(Level1SummaryUpdateEventArgs e)
 {
     if (Level1SummaryUpdateEvent != null) Level1SummaryUpdateEvent(this, e);
 }