/// <summary>
        /// occurs when data feed sends a quote
        /// </summary>
        ///
        void OnDdfClient_NewQuote(object sender, Client.NewQuoteEventArgs e)
        {
            try
            {
                string     aSymbolName;
                Instrument aType;
                Session    session = e.Quote.Sessions[Sessions.Combined];
                if (!TryParse(e.Quote.Symbol, out aSymbolName, out aType))
                {
                    return;
                }

                if (NewQuote != null && m_SubscribedSymbol.Contains(aSymbolName))
                {
                    SymbolItem aSymbol = new SymbolItem()
                    {
                        DataFeed = Name, Exchange = MarketName, Symbol = aSymbolName, Type = aType
                    };
                    NewQuote(Name, this.TimeZoneInfo, new Tick
                    {
                        Symbol = aSymbol,
                        //Date = e.Quote.Timestamp.ToUniversalTime(),
                        Date    = TimeZoneInfo.ConvertTimeToUtc(e.Quote.Timestamp, TimeZoneInfo),
                        Price   = session == null ? (e.Quote.Ask + e.Quote.Bid) / 2 : session.Last,
                        Volume  = session == null ? 0 : session.LastSize,
                        Bid     = e.Quote.Bid,
                        BidSize = e.Quote.BidSize,
                        Ask     = e.Quote.Ask,
                        AskSize = e.Quote.AskSize
                    });
                }

                if (NewLevel2 != null && m_Level2SubscribedSymbol.Contains(aSymbolName))
                {
                    SymbolItem aSymbol = new SymbolItem()
                    {
                        DataFeed = Name, Exchange = MarketName, Symbol = aSymbolName, Type = aType
                    };

                    Level2Data level2 = new Level2Data();
                    level2.Symbol = aSymbol;
                    level2.Asks   = new Level2Item[] { new Level2Item {
                                                           MarketMaker = Level1MarketMaker,
                                                           Price       = e.Quote.Ask,
                                                           Quantity    = (int)e.Quote.AskSize
                                                       } };
                    level2.Bids = new Level2Item[] { new Level2Item {
                                                         MarketMaker = Level1MarketMaker,
                                                         Price       = e.Quote.Bid,
                                                         Quantity    = (int)e.Quote.BidSize
                                                     } };

                    NewLevel2(Name, this.TimeZoneInfo, level2);
                }
            }
            catch (Exception ex)
            {
                WriteToLog("---OnDdfClient_NewQuote Exception", ex);
            }
        }
 private void ClientOnNewQuote(object sender, Client.NewQuoteEventArgs e)
 {
     SendOutMessage(new Level1ChangeMessage
     {
         SecurityId = new SecurityId
         {
             SecurityCode = e.Quote.Symbol,
             BoardCode    = e.Quote.ExchangeCode
         },
         ServerTime = e.Quote.Timestamp.ApplyTimeZone(TimeHelper.Est)
     }
                    .TryAdd(Level1Fields.BestBidPrice, e.Quote.Bid.ToDecimal())
                    .TryAdd(Level1Fields.BestBidVolume, (decimal)e.Quote.BidSize)
                    .TryAdd(Level1Fields.BestAskPrice, e.Quote.Ask.ToDecimal())
                    .TryAdd(Level1Fields.BestAskVolume, (decimal)e.Quote.AskSize));
 }
예제 #3
0
 private void _client_NewQuote(object sender, Client.NewQuoteEventArgs e)
 {
     NewQuote(e.Quote);
 }