void tl_newRegisterStocks(string msg)
 {
     // make sure logged in
     if (!login())
     {
         return;
     }
     // get symbols
     string[] sym = msg.Split(',');
     // look for new symbols
     foreach (string s in sym)
     {
         if (!havestock(s)) // if it's new
         {
             // get a subscription
             GTStock m_stock1 = m_session.CreateStock(s);
             // hook events
             m_stock1.HookExecMsgOpenPosition(new GTStock.PFNOnExecMsgOpenPosition(OnStockExecMsgOpenPosition));
             m_stock1.HookExecMsgTrade(new GTStock.PFNOnExecMsgTrade(OnStockExecMsgTrade));
             m_stock1.HookExecMsgPending(new GTStock.PFNOnExecMsgPending(OnStockExecMsgPending));
             m_stock1.HookExecMsgSending(new GTStock.PFNOnExecMsgSending(OnStockExecMsgSending));
             m_stock1.HookExecMsgCancel(new GTStock.PFNOnExecMsgCancel(OnStockExecMsgCancel));
             m_stock1.HookExecMsgReject(new GTStock.PFNOnExecMsgReject(OnStockExecMsgReject));
             m_stock1.HookExecMsgRejectCancel(new GTStock.PFNOnExecMsgRejectCancel(OnStockExecMsgRejectCancel));
             m_stock1.HookSendingOrder(new GTStock.PFNOnSendingOrder(OnStockSendingOrder));
             m_stock1.HookGotQuotePrint(new GTStock.PFNOnGotQuotePrint(OnStockExecMsgPrint));
             m_stock1.HookGotQuoteLevel2(new GTStock.PFNOnGotQuoteLevel2(OnStockGotQuoteLevel2));
             m_stock1.HookOnBestAskPriceChanged(new GTStock.PFNOnBestAskPriceChanged(OnStockGotBestAsk));
             m_stock1.HookOnBestBidPriceChanged(new GTStock.PFNOnBestBidPriceChanged(OnStockGotBestBid));
             // save subscription
             _stk.Add(m_stock1);
         }
     }
 }
        protected virtual int OnStockGotQuoteLevel2(UInt32 hStock, GTSession.GTLevel232 level232)
        {
            return(0);

            GTStock stock = new GTStock(hStock);

            if (stock.GetAskLevel2Count() > 0 && stock.GetBidLevel2Count() > 0)
            {
                if (stock.GetAskLevel2Item(0).dblPrice < stock.GetBidLevel2Item(0).dblPrice)
                {
                    //string str = "L1:" + level132.szStock + " " + level132.dblBidPrice + " " + level132.dblAskPrice;
                    string str = "BID: " + stock.GetBidLevel2Item(0).dblPrice + " " + "ASK: " + stock.GetAskLevel2Item(0).dblPrice;
                    //listMsg.Items.Insert(0, str);
                }
            }
            return(0);
        }
        void tl_newSendOrderRequest(Order o)
        {
            GTSession.GTOrder32 order = new GTSession.GTOrder32();
            order.szStock = o.symbol;
            //order.place = o.ex;
            order.szAccountID       = o.Account;
            order.chSide            = o.side ? 'B' : 'S';
            order.dblPrice          = (double)o.price;
            order.dblStopLimitPrice = (double)o.stopp;
            order.dwShare           = o.UnsignedSize;
            // this should be order id
            order.dwUserData = o.id == 0 ? OrderImpl.Unique : o.id;
            // send order
            GTStock stock = m_session.GetStock(o.symbol);
            int     err   = stock.PlaceOrder(order);

            if (err != 0)
            {
                debug("error " + err.ToString() + " sending: " + o.ToString());
            }
        }
        protected virtual int OnStockGotQuoteLevel2(UInt32 hStock, GTSession.GTLevel232 level232)
        {
            return 0;

            GTStock stock = new GTStock(hStock);

            if (stock.GetAskLevel2Count() > 0 && stock.GetBidLevel2Count() > 0)
                if (stock.GetAskLevel2Item(0).dblPrice < stock.GetBidLevel2Item(0).dblPrice)
                {
                    //string str = "L1:" + level132.szStock + " " + level132.dblBidPrice + " " + level132.dblAskPrice;
                    string str = "BID: " + stock.GetBidLevel2Item(0).dblPrice + " " + "ASK: " + stock.GetAskLevel2Item(0).dblPrice;
                    //listMsg.Items.Insert(0, str);
                }
            return 0;
        }