Esempio n. 1
0
        /// <summary>
        /// Event handler for streaming quote ticks
        /// </summary>
        /// <param name="quote">The data object containing the received tick</param>
        private void OnQuoteReceived(IStreamQuote quote)
        {
            Symbol symbol;

            if (!_subscribedSymbols.TryGetValue(quote.Symbol, out symbol))
            {
                return;
            }

            var time = quote.Time;

            // live ticks timestamps must be in exchange time zone
            DateTimeZone exchangeTimeZone;

            if (!_symbolExchangeTimeZones.TryGetValue(key: symbol, value: out exchangeTimeZone))
            {
                exchangeTimeZone = _marketHours.GetExchangeHours(Market.USA, symbol, SecurityType.Equity).TimeZone;
                _symbolExchangeTimeZones.Add(symbol, exchangeTimeZone);
            }
            time = time.ConvertFromUtc(exchangeTimeZone);

            var bidPrice = quote.BidPrice;
            var askPrice = quote.AskPrice;
            var tick     = new Tick(time, symbol, bidPrice, bidPrice, askPrice)
            {
                TickType = TickType.Quote,
                BidSize  = quote.BidSize,
                AskSize  = quote.AskSize
            };

            lock (_ticks)
            {
                _ticks.Add(tick);
            }
        }
Esempio n. 2
0
 private async Task SubscriptionResult_Received(IStreamQuote obj)
 {
     if (CheckIfLastMessageIsOldEnough(obj))
     {
         await _hub.Clients.All.StockUpdate(new StockChangedResponse
         {
             Symbol = obj.Symbol,
             Price  = obj.AskPrice
         });
         await UpdateStockPrice(obj.Symbol, obj.AskPrice);
     }
 }
Esempio n. 3
0
        private bool CheckIfLastMessageIsOldEnough(IStreamQuote obj)
        {
            var lastMessage = _lastBroadcastedMessages.FirstOrDefault(x => x.Key == obj.Symbol);

            if (lastMessage.Key == null || (DateTime.UtcNow - lastMessage.Value).Seconds > 20)
            {
                if (lastMessage.Key == null)
                {
                    _lastBroadcastedMessages.Add(obj.Symbol, DateTime.UtcNow);
                }
                else
                {
                    _lastBroadcastedMessages.Remove(lastMessage.Key);
                    _lastBroadcastedMessages.Add(obj.Symbol, obj.TimeUtc);
                }
                return(true);
            }
            return(false);
        }