internal void EmitMarketDepth(object o, LevelIIUpdateMessageEventArgs args)
        {
            if (null != NewMarketDepth)
            {
                /*
                 * Console.WriteLine("EmitMarketDepth {0} {1} {2} {3} {4} {5}",
                 * args.Message.Symbol, args.Message.MMID, args.Message.BidPrice, args.Message.BidSize,
                 * args.Message.AskPrice, args.Message.AskSize);
                 */

                MarketDepth             md;
                string                  Symbol = args.Message.Symbol;
                IQFeedDataRequestRecord rr     = htL2WatchedSymbols[Symbol] as IQFeedDataRequestRecord;

                md = new MarketDepth(
                    rr.GetUniqueTimeStamp(),
                    args.Message.MMID, 0, MDOperation.Undefined, MDSide.Bid, args.Message.BidPrice, args.Message.BidSize);
                NewMarketDepth(this, new MarketDepthEventArgs(md, rr.instrument, this));

                md = new MarketDepth(
                    rr.GetUniqueTimeStamp(),
                    args.Message.MMID, 0, MDOperation.Undefined, MDSide.Ask, args.Message.AskPrice, args.Message.AskSize);
                NewMarketDepth(this, new MarketDepthEventArgs(md, rr.instrument, this));
            }
        }
        internal void EmitQuoteTrade(object sender, UpdateMessageEventArgs args)
        {
            IQFeedDataRequestRecord rr = htL1WatchedSymbols[args.Message.Symbol] as IQFeedDataRequestRecord;

            /*
             * if (SmartQuant.TraceLevel.Verbose == trace) {
             * string s;
             * s = string.Format("  sym='{0}',lst='{1}',vol='{2}',bid='{3}',ask='{4}',bsz='{5}',asz='{6}',typ='{7}'",
             *  args.Message.Symbol, args.Message.Last, args.Message.LastSize,
             *  args.Message.Bid, args.Message.Ask, args.Message.BidSize, args.Message.Type );
             * Console.WriteLine(s);
             * }
             */

            switch (args.Message.Type)
            {
            case "a":
            case "b":
                if (null != NewQuote)
                {
                    QuoteEventArgs q = new QuoteEventArgs(
                        new Quote(
                            rr.GetUniqueTimeStamp(),
                            args.Message.Bid,
                            args.Message.BidSize,
                            args.Message.Ask,
                            args.Message.AskSize),
                        rr.instrument, this);
                    NewQuote(this, q);
                }
                break;

            case "t":
            case "T":
                Trade trade = new Trade(
                    rr.GetUniqueTimeStamp(),
                    args.Message.Last,
                    args.Message.LastSize);
                if (null != NewTrade)
                {
                    TradeEventArgs t = new TradeEventArgs(trade, rr.instrument, this);
                    NewTrade(this, t);
                }
                if (null != factory)
                {
                    factory.OnNewTrade(rr.instrument, trade);
                }
                break;

            case "o":
                break;

            default:
                break;
            }
        }
        internal void EmitTradeSummary(object sender, SummaryMessageEventArgs args)
        {
            IQFeedDataRequestRecord rr = htL1WatchedSymbols[args.Message.Symbol] as IQFeedDataRequestRecord;

            if (null != TradeSummary)
            {
                //if (0 < args.Message.Last) {
                TradeEventArgs t = new TradeEventArgs(new Trade(
                                                          rr.GetUniqueTimeStamp(),
                                                          args.Message.Last,
                                                          args.Message.LastSize
                                                          ),
                                                      rr.instrument, this);
                TradeSummary(this, t);
                //}
                //else {
                //  Console.WriteLine("*** IQFeedProvider tradesummary dLast is {0} ***", args.Message.Last);
                //}
            }
        }