Ejemplo n.º 1
0
        public L1quotes TD_GetLevel1Quote2(string symbol, int nTimeOut)
        {
            byte[] bReplyValue = null;
            L1quotes oL1Quotes = new L1quotes();
            Object oLockTD_GetLevel1Quote2 = new object();


            string _streamerCommand = "S=QUOTE" + "&C=GET&P=" + symbol + "&T=0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40";

            try
            {

                if (this.TD_loginStatus == true)
                {

                    bReplyValue = new byte[65535];
                    XMLHTTP xmlHttp_ = new XMLHTTP();
                    StringBuilder cpostdata = new StringBuilder();
                    string lcPostUrl = string.Empty;

                    cpostdata.Append("!U=" + _accountid);
                    cpostdata.Append("&W=" + _token);
                    cpostdata.Append("&A=userid=" + _accountid);
                    cpostdata.Append("&token=" + _token);
                    cpostdata.Append("&company=" + _company);
                    cpostdata.Append("&segment=" + _segment);
                    cpostdata.Append("&cddomain=" + _cdDomain);
                    cpostdata.Append("&usergroup=" + _usergroup);
                    cpostdata.Append("&accesslevel=" + _accesslevel);
                    cpostdata.Append("&authorized=" + _authorized);
                    cpostdata.Append("&acl=" + _acl);
                    cpostdata.Append("&timestamp=" + _timestamp);
                    cpostdata.Append("&appid=" + _appid);
                    cpostdata.Append("|" + _streamerCommand);

                    string encodedString = Encode_URL(cpostdata.ToString());
                    cpostdata = new StringBuilder();
                    cpostdata.Append(encodedString);

                    lcPostUrl = "http://" + this._streamerurl + "/" + cpostdata;

                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(lcPostUrl);
                    req.ContentType = "application/x-www-form-urlencoded";
                    req.Accept = "Accept	image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*";
                    req.Headers.Add("Accept-Encoding: deflate, gzip");
                    req.Method = "GET";
                    req.Timeout = (nTimeOut == 0 ? 5000 : nTimeOut);
                    req.ReadWriteTimeout = (nTimeOut == 0 ? 5000 : nTimeOut);
                    req.ServicePoint.ConnectionLimit = 50;

                    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();


                    // Retrieve response stream
                    Stream respStream = resp.GetResponseStream();

                    byte[] chunk = new byte[65535];
                    byte[] ChartByteArray = new byte[65535];

                    int bytesRead = respStream.Read(ChartByteArray, 0, ChartByteArray.Length);
                    string compressedText = Convert.ToBase64String(ChartByteArray);
                    byte[] gzBuffer = Convert.FromBase64String(compressedText);


                    respStream.Flush();
                    resp.Close();
                    respStream.Close();



                    MemoryStream ms = new MemoryStream();

                    int nFieldNDX = 0;
                    int nStartPos = 13;
                    int msgLength = BitConverter.ToInt32(gzBuffer, 0);
                    ms.Write(gzBuffer, 64, gzBuffer.Length - 64);


                    byte[] nMsg = new byte[sizeof(Int32)];

                    ms.Close();

                    /*/
                     * S = Streaming
                     * N = Snapshot
                    /*/

                    nMsg[0] = gzBuffer[0];
                    string cRequestType = System.Text.Encoding.ASCII.GetString(nMsg, 0, 1);



                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[2];
                    nMsg[1] = gzBuffer[1];
                    int nNextFieldLength = BitConverter.ToInt32(nMsg, 0);



                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[5];
                    nMsg[1] = gzBuffer[4];
                    nMsg[2] = gzBuffer[3];

                    long nNextField = BitConverter.ToInt32(nMsg, 0);



                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[7];
                    nMsg[1] = gzBuffer[6];
                    int nMessageLength = BitConverter.ToInt32(nMsg, 0);



                    /*/
                     * 1 = L1 Quote
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[9];
                    nMsg[1] = gzBuffer[8];
                    int nQuoteType = BitConverter.ToInt32(nMsg, 0);


                    /*/
                     * Stock Symbol : Field 0
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[10];
                    int nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[12];
                    nMsg[1] = gzBuffer[11];
                    int nSymbolLength = BitConverter.ToInt32(nMsg, 0);
                    nMsg = new byte[nSymbolLength];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, nSymbolLength);
                    oL1Quotes.stock = TD_GetResponseValue(0, nMsg, 0, nSymbolLength);



                    /*/
                     * Bid Price : Field 1
                    /*/

                    nFieldNDX = nStartPos + nSymbolLength;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Ask Price : Field 2
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                    /*/
                     * Last Price : Field 3
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                    /*/
                     * Bid Size : Field 4
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);


                    /*/
                     * Ask Size : Field 5
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * Bid ID : Field 6
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(short)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);


                    /*/
                     * Ask ID : Field 7
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(short)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);


                    /*/
                     * Volume : Field 8
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(long)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    nMsg[4] = gzBuffer[nFieldNDX++];
                    nMsg[5] = gzBuffer[nFieldNDX++];
                    nMsg[6] = gzBuffer[nFieldNDX++];
                    nMsg[7] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);




                    /*/
                     * Last Size : Field 9
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * Trade Time : Field 10
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * Quote Time : Field 11
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * High : Field 12
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Low : Field 13
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Tick : Field 14
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(char)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);

                    nMsg = new byte[sizeof(char)];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                    oL1Quotes.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                    /*/
                     * Close : Field 15
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                    /*/
                      * Exchange : Field 16
                     /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(char)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);

                    nMsg = new byte[sizeof(char)];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                    oL1Quotes.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                    /*/
                     * Marginable : Field 17
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(bool)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));


                    /*/
                     * Shortable : Field 18
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(bool)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));


                    /*/
                     * ISLAND BID : Field 19
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * ISLAND ASK : Field 20
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * ISLAND ASK : Field 21
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(long)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    nMsg[4] = gzBuffer[nFieldNDX++];
                    nMsg[5] = gzBuffer[nFieldNDX++];
                    nMsg[6] = gzBuffer[nFieldNDX++];
                    nMsg[7] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);



                    /*/
                     * QUOTE DATE : Field 22
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);




                    /*/
                     * QUOTE DATE : Field 23
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);


                    /*/
                     * Volatility : Field 24
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Description : Field 25
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(short)];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nStartPos = nFieldNDX;

                    int nStringlLength = BitConverter.ToInt16(nMsg, 0);
                    nFieldNDX = nFieldNDX + nStringlLength;

                    nMsg = new byte[nStringlLength];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                    oL1Quotes.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength);




                    /*/
                     * Trade ID : Field 26
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(char)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);

                    nMsg = new byte[sizeof(char)];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                    oL1Quotes.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                    /*/
                     * Digits : Field 27
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * Open : Field 28
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Change : Field 29
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                    /*/
                     * 52-Week High : Field 30
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                    /*/
                     * 52-Week Low : Field 31
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * PE-Ratio : Field 32
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * Dividend Amount : Field 33
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                    /*/
                     * Dividend Yield : Field 34
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                    /*/
                     * ISLAND BID SIZE : Field 35
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);




                    /*/
                     * ISLAND ASK SIZE : Field 36
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                    /*/
                     * NAV : Field 37
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                    /*/
                     * FUND : Field 38
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                    nStartPos = nFieldNDX;


                    nMsg = new byte[sizeof(float)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[2] = gzBuffer[nFieldNDX++];
                    nMsg[3] = gzBuffer[nFieldNDX++];
                    Array.Reverse(nMsg);
                    oL1Quotes.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                    /*/
                     * EXCHANGE NAME : Field 39
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(short)];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nStartPos = nFieldNDX;

                    nStringlLength = BitConverter.ToInt16(nMsg, 0);
                    nFieldNDX = nFieldNDX + nStringlLength;

                    nMsg = new byte[nStringlLength];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                    oL1Quotes.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength);



                    /*/
                     * DIVIDEND DATE : Field 40
                    /*/

                    nMsg = new byte[sizeof(Int32)];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                    nMsg = new byte[sizeof(short)];
                    nMsg[1] = gzBuffer[nFieldNDX++];
                    nMsg[0] = gzBuffer[nFieldNDX++];
                    nStartPos = nFieldNDX;

                    nStringlLength = BitConverter.ToInt16(nMsg, 0);
                    nFieldNDX = nFieldNDX + nStringlLength;

                    nMsg = new byte[nStringlLength];
                    Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                    oL1Quotes.dividend_date = TD_GetResponseValue(0, nMsg, 0, nStringlLength);


                    GC.Collect();


                }


            }
            catch (Exception exc)
            { }


            return oL1Quotes;

        }
Ejemplo n.º 2
0
        public bool TD_IsStockSymbolValid(string symbol)
        {
            bool lStockSymbolFound = true;
            AmeritradeBrokerAPI.L1quotes oL1Quote = new L1quotes();

            /*/ Make sure that the stock symbolis valid. /*/

            try
            {
                oL1Quote = this.TD_GetLevel1Quote(symbol, 1000);
            }
            catch (Exception)
            {
                lStockSymbolFound = false;
            }

            lStockSymbolFound = (oL1Quote.stock == null || lStockSymbolFound == false ? false : true);

            return lStockSymbolFound;

        }
Ejemplo n.º 3
0
            public void process_AsyncLevelOneSnapshot(IAsyncResult asyncResult)
            {

                // Get the RequestState object from the asyncresult
                RequestState rs = (RequestState)asyncResult.AsyncState;


                if (rs.lNewStockSymbol == true)
                {
                    return;
                }


                try
                {
                    if (rs.Request.ServicePoint.CurrentConnections > 0)
                    {

                        // Pull out the ResponseStream that was set in RespCallback
                        Stream responseStream = rs.ResponseStream;

                        // At this point rs.BufferRead should have some data in it.
                        // Read will tell us if there is any data there

                        int read = responseStream.EndRead(asyncResult);


                        if (read > 0)
                        {
                            Array.Copy(rs.BufferRead, 0, ChartByteArray2, ChartByteArray2NDx, read);
                            ChartByteArray2NDx = ChartByteArray2NDx + read;

                            // Make another call so that we continue retrieving any all incoming data                                    
                            IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);

                        }
                        else
                        {

                            // Close the response stream since we do not have any more incoming data.


                            ChartByteArray2NDx = 0;

                            // If we have not more bytes read, then the server has finished sending us data.
                            if (read == 0)
                            {

                                List<L1quotes> oL1Quotes = new List<L1quotes>();
                                L1quotes oL1Quote = new L1quotes();

                                string compressedText = Convert.ToBase64String(ChartByteArray2);
                                byte[] gzBuffer = Convert.FromBase64String(compressedText);



                                MemoryStream ms = new MemoryStream();
                                int nFieldNDX = 0;
                                int nStartPos = 13;
                                int msgLength = BitConverter.ToInt32(gzBuffer, 0);
                                ms.Write(gzBuffer, 64, gzBuffer.Length - 64);

                                byte[] nMsg = new byte[sizeof(Int32)];

                                ms.Close();

                                /*/
                                 * S = Streaming
                                 * N = Snapshot
                                /*/

                                nMsg[0] = gzBuffer[0];
                                string cRequestType = System.Text.Encoding.ASCII.GetString(nMsg, 0, 1);



                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[2];
                                nMsg[1] = gzBuffer[1];
                                int nNextFieldLength = BitConverter.ToInt32(nMsg, 0);



                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[5];
                                nMsg[1] = gzBuffer[4];
                                nMsg[2] = gzBuffer[3];

                                long nNextField = BitConverter.ToInt32(nMsg, 0);



                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[7];
                                nMsg[1] = gzBuffer[6];
                                int nMessageLength = BitConverter.ToInt32(nMsg, 0);



                                /*/
                                 * 1 = L1 Quote
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[9];
                                nMsg[1] = gzBuffer[8];
                                int nQuoteType = BitConverter.ToInt32(nMsg, 0);


                                /*/
                                 * Stock Symbol : Field 0
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[10];
                                int nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[12];
                                nMsg[1] = gzBuffer[11];
                                int nSymbolLength = BitConverter.ToInt32(nMsg, 0);
                                nMsg = new byte[nSymbolLength];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, nSymbolLength);
                                oL1Quote.stock = rs.TD_GetResponseValue(0, nMsg, 0, nSymbolLength);



                                /*/
                                 * Bid Price : Field 1
                                /*/

                                nFieldNDX = nStartPos + nSymbolLength;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Ask Price : Field 2
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                /*/
                                 * Last Price : Field 3
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                /*/
                                 * Bid Size : Field 4
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);


                                /*/
                                 * Ask Size : Field 5
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * Bid ID : Field 6
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(short)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);


                                /*/
                                 * Ask ID : Field 7
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(short)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);


                                /*/
                                 * Volume : Field 8
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(long)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                nMsg[4] = gzBuffer[nFieldNDX++];
                                nMsg[5] = gzBuffer[nFieldNDX++];
                                nMsg[6] = gzBuffer[nFieldNDX++];
                                nMsg[7] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);




                                /*/
                                 * Last Size : Field 9
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * Trade Time : Field 10
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * Quote Time : Field 11
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * High : Field 12
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Low : Field 13
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Tick : Field 14
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(char)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);

                                nMsg = new byte[sizeof(char)];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                oL1Quote.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                                /*/
                                 * Close : Field 15
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                                /*/
                                  * Exchange : Field 16
                                 /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(char)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);

                                nMsg = new byte[sizeof(char)];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                oL1Quote.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                                /*/
                                 * Marginable : Field 17
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(bool)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));


                                /*/
                                 * Shortable : Field 18
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(bool)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));


                                /*/
                                 * ISLAND BID : Field 19
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * ISLAND ASK : Field 20
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * ISLAND ASK : Field 21
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(long)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                nMsg[4] = gzBuffer[nFieldNDX++];
                                nMsg[5] = gzBuffer[nFieldNDX++];
                                nMsg[6] = gzBuffer[nFieldNDX++];
                                nMsg[7] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);



                                /*/
                                 * QUOTE DATE : Field 22
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);




                                /*/
                                 * QUOTE DATE : Field 23
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);


                                /*/
                                 * Volatility : Field 24
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Description : Field 25
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(short)];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nStartPos = nFieldNDX;

                                int nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                nFieldNDX = nFieldNDX + nStringlLength;

                                nMsg = new byte[nStringlLength];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                oL1Quote.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength);




                                /*/
                                 * Trade ID : Field 26
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(char)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);

                                nMsg = new byte[sizeof(char)];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                oL1Quote.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char));



                                /*/
                                 * Digits : Field 27
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * Open : Field 28
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Change : Field 29
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                /*/
                                 * 52-Week High : Field 30
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                /*/
                                 * 52-Week Low : Field 31
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * PE-Ratio : Field 32
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * Dividend Amount : Field 33
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                                /*/
                                 * Dividend Yield : Field 34
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);



                                /*/
                                 * ISLAND BID SIZE : Field 35
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);




                                /*/
                                 * ISLAND ASK SIZE : Field 36
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);



                                /*/
                                 * NAV : Field 37
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                                /*/
                                 * FUND : Field 38
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                nStartPos = nFieldNDX;


                                nMsg = new byte[sizeof(float)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[2] = gzBuffer[nFieldNDX++];
                                nMsg[3] = gzBuffer[nFieldNDX++];
                                Array.Reverse(nMsg);
                                oL1Quote.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);




                                /*/
                                 * EXCHANGE NAME : Field 39
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(short)];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nStartPos = nFieldNDX;

                                nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                nFieldNDX = nFieldNDX + nStringlLength;

                                nMsg = new byte[nStringlLength];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                oL1Quote.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength);



                                /*/
                                 * DIVIDEND DATE : Field 40
                                /*/

                                nMsg = new byte[sizeof(Int32)];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                nMsg = new byte[sizeof(short)];
                                nMsg[1] = gzBuffer[nFieldNDX++];
                                nMsg[0] = gzBuffer[nFieldNDX++];
                                nStartPos = nFieldNDX;

                                nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                nFieldNDX = nFieldNDX + nStringlLength;

                                nMsg = new byte[nStringlLength];
                                Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                oL1Quote.dividend_date = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength);


                                oL1Quotes.Add(oL1Quote);
                                rs.SendLevelOneDataSnapshot(oL1Quotes, rs.stockSymbol);


                            }
                        }

                    }
                }
                catch (Exception exc) { }
            }
Ejemplo n.º 4
0
        public bool TD_IsShortableCustom(string symbol)
        {

            L1quotes oL1Quote = new L1quotes();

            while (true)
            {
                oL1Quote = TD_GetLevel1Quote2(symbol.ToUpper(), 0);
                if (oL1Quote.shortable != null)
                {
                    break;
                }
            }
            return Convert.ToBoolean(oL1Quote.shortable);

        }
Ejemplo n.º 5
0
            public void process_AsyncLevelOneStreaming(IAsyncResult asyncResult)
            {


                // Get the RequestState object from the asyncresult
                RequestState rs = (RequestState)asyncResult.AsyncState;


                if (rs.lNewStockSymbol == true)
                {
                    /*/ This tells use to return because the resources have been destroyed. /*/

                    rs.CloseStream(rs);
                    return;
                }

                try
                {

                    if (rs.Request.ServicePoint.CurrentConnections > 0)
                    {

                        // Pull out the ResponseStream that was set in RespCallback
                        Stream responseStream = rs.ResponseStream;

                        // At this point rs.BufferRead should have some data in it.
                        // Read will tell us if there is any data there


                        int read = responseStream.EndRead(asyncResult);


                        if (read == 0)
                        {
                            rs.CloseStream(rs);
                            responseStream.Close();
                            rs.oParent.TD_RequestAsyncLevel2Streaming(rs.stockSymbol, rs.Level2DataSourceType, rs.oParentForm);
                            rs.oParent = null;
                            return;
                        }


                        if (read > 0)
                        {

                            Array.Copy(rs.BufferRead, 0, ChartByteArray2, ChartByteArray2NDx, read);
                            ChartByteArray2NDx = ChartByteArray2NDx + read;


                            string compressedText1 = Convert.ToBase64String(ChartByteArray2);
                            byte[] gzBuffer1 = Convert.FromBase64String(compressedText1);
                            byte[] DataByteArray = new byte[read];
                            byte[] aTempStorage = new byte[read];

                            string mydata = string.Empty;
                            int nStartPos1 = 0;
                            bool lStartFound = false;

                            int nEndPos1 = 0;
                            bool lEndFound = false;
                            int ntotalMessageChunkLength = 0;

                            for (int nLoop = 0; nLoop < ChartByteArray2NDx; nLoop++)
                            {

                                /*/
                                 * Find the start of the streaming message.
                                /*/
                                if (gzBuffer1[nLoop] == 83 && lStartFound == false)
                                {
                                    nStartPos1 = nLoop;
                                    lStartFound = true;

                                }


                                /*/
                                 * Find the end of the streaming message. End of message delimeter = 255,10
                                /*/
                                if (gzBuffer1[nLoop] == 255 && gzBuffer1[nLoop + 1] == 10 && lEndFound == false && lStartFound == true)
                                {

                                    byte[] nTotMsg = new byte[sizeof(short)];
                                    nTotMsg[0] = gzBuffer1[nStartPos1 + 1];
                                    nTotMsg[1] = gzBuffer1[nStartPos1 + 2];
                                    Array.Reverse(nTotMsg);
                                    ntotalMessageChunkLength = BitConverter.ToInt16(nTotMsg, 0);


                                    nEndPos1 = nLoop;
                                    lEndFound = true;
                                    nStartPos1 = nStartPos1 + 5;
                                    //DataByteArray = new byte[(nEndPos1 - nStartPos1)];
                                    DataByteArray = new byte[ntotalMessageChunkLength - 2];
                                    Array.Copy(gzBuffer1, nStartPos1, DataByteArray, 0, ntotalMessageChunkLength - 4);


                                    long nRemaining = ChartByteArray2NDx - (ntotalMessageChunkLength + nStartPos1);

                                    if (nRemaining == 0)
                                    {
                                        /*/
                                         * Reset the primary collection array.
                                        /*/
                                        ChartByteArray2NDx = 0;
                                        ChartByteArray2 = new byte[BUFFER_SIZE];
                                    }
                                    else
                                    {
                                        /*/
                                         * Reposition the primary collection array by moving the remaining data toward the top of the collection array.
                                         * This will allow for unprocessed data received to get processed next in line and any new data will get place
                                         * at the bottom of the collection array where it will wait its place in line.
                                        /*/

                                        ChartByteArray2NDx = ChartByteArray2NDx - (ntotalMessageChunkLength + nStartPos1);
                                        aTempStorage = new byte[nRemaining];

                                        Array.Copy(gzBuffer1, (ntotalMessageChunkLength + nStartPos1), aTempStorage, 0, nRemaining);
                                        ChartByteArray2 = new byte[BUFFER_SIZE];
                                        Array.Copy(aTempStorage, 0, ChartByteArray2, 0, nRemaining);

                                    }

                                    break;
                                }
                            }




                            if (lEndFound == true)
                            {

                                bool lContinueParsing = true;


                                while (lContinueParsing == true)
                                {

                                    List<L1quotes> oL1Quotes = new List<L1quotes>();
                                    L1quotes oL1Quote = new L1quotes();

                                    string compressedText = Convert.ToBase64String(DataByteArray);
                                    byte[] gzBuffer = Convert.FromBase64String(compressedText);


                                    byte[] nMsg = null;
                                    int nFieldNumber = 0;
                                    int nFieldNDX = 0;
                                    int nStartPos = 0;
                                    short nStringlLength = 0;


                                    /*/
                                     * Stock Symbol : Field 0
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 0)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            nStringlLength = BitConverter.ToInt16(nMsg, 0);


                                            nMsg = new byte[nStringlLength];
                                            Array.Copy(gzBuffer, nFieldNDX, nMsg, 0, nStringlLength);
                                            oL1Quote.stock = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength);
                                        }
                                        else
                                            nFieldNDX--;
                                    }



                                    /*/
                                     * Bid Price : Field 1
                                    /*/

                                    nFieldNDX = nFieldNDX + nStringlLength;


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 1)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.bid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Ask Price : Field 2
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 2)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.ask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Last Price : Field 3
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 3)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.last = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;
                                    }



                                    /*/
                                     * Bid Size : Field 4
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 4)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Ask Size : Field 5
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 5)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;

                                    }

                                    /*/
                                     * Bid ID : Field 6
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 6)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.bid_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Ask ID : Field 7
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 7)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.ask_id = TD_GetResponseValue(sizeof(short), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Volume : Field 8
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 8)
                                        {
                                            nMsg = new byte[sizeof(long)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            nMsg[4] = gzBuffer[nFieldNDX++];
                                            nMsg[5] = gzBuffer[nFieldNDX++];
                                            nMsg[6] = gzBuffer[nFieldNDX++];
                                            nMsg[7] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.volume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;
                                    }




                                    /*/
                                     * Last Size : Field 9
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 9)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.lastsize = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Trade Time : Field 10
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 10)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.tradetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Quote Time : Field 11
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 11)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.quotetime = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;


                                    }


                                    /*/
                                     * High : Field 12
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 12)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.high = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }



                                    /*/
                                     * Low : Field 13
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 13)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.low = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Tick : Field 14
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 14)
                                        {
                                            nMsg = new byte[sizeof(char)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);

                                            nMsg = new byte[sizeof(char)];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                            oL1Quote.tick = TD_GetResponseValue(0, nMsg, 0, sizeof(char));

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Close : Field 15
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 15)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.close = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Exchange : Field 16
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 16)
                                        {
                                            nMsg = new byte[sizeof(char)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);

                                            nMsg = new byte[sizeof(char)];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                            oL1Quote.exchange = TD_GetResponseValue(0, nMsg, 0, sizeof(char));

                                        }
                                        else
                                            nFieldNDX--;

                                    }



                                    /*/
                                     * Marginable : Field 17
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 17)
                                        {
                                            nMsg = new byte[sizeof(bool)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.marginable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Shortable : Field 18
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 18)
                                        {
                                            nMsg = new byte[sizeof(bool)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.shortable = TD_GetResponseValue(sizeof(bool), nMsg, 0, sizeof(char));

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * ISLAND BID : Field 19
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 19)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.islandbid = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);
                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * ISLAND ASK : Field 20
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 20)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.islandask = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * ISLAND ASK : Field 21
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 21)
                                        {
                                            nMsg = new byte[sizeof(long)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            nMsg[4] = gzBuffer[nFieldNDX++];
                                            nMsg[5] = gzBuffer[nFieldNDX++];
                                            nMsg[6] = gzBuffer[nFieldNDX++];
                                            nMsg[7] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.islandvolume = TD_GetResponseValue(sizeof(long), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;
                                    }



                                    /*/
                                     * QUOTE DATE : Field 22
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 22)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.quotedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * QUOTE DATE : Field 23
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 23)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.tradedate = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Volatility : Field 24
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 24)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.volatility = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Description : Field 25
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);

                                        if (nFieldNumber == 25)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nStartPos = nFieldNDX;

                                            nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                            nFieldNDX = nFieldNDX + nStringlLength;

                                            nMsg = new byte[nStringlLength];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                            oL1Quote.description = TD_GetResponseValue(0, nMsg, 0, nStringlLength);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Trade ID : Field 26
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 26)
                                        {
                                            nMsg = new byte[sizeof(char)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);

                                            nMsg = new byte[sizeof(char)];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, sizeof(char));
                                            oL1Quote.trade_id = TD_GetResponseValue(0, nMsg, 0, sizeof(char));

                                        }
                                        else
                                            nFieldNDX--;

                                    }



                                    /*/
                                     * Digits : Field 27
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 27)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.digits = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Open : Field 28
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 28)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.open = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Change : Field 29
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 29)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.change = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * 52-Week High : Field 30
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 30)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.week_high_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * 52-Week Low : Field 31
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 31)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.week_low_52 = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;
                                    }



                                    /*/
                                     * PE-Ratio : Field 32
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 32)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.pe_ratio = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Dividend Amount : Field 33
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 33)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.dividend_amt = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * Dividend Yield : Field 34
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 34)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.dividend_yield = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * ISLAND BID SIZE : Field 35
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 35)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.island_bid_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * ISLAND ASK SIZE : Field 36
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 36)
                                        {
                                            nMsg = new byte[sizeof(Int32)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.island_ask_size = TD_GetResponseValue(100, nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * NAV : Field 37
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 37)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.nav = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);

                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * FUND : Field 38
                                    /*/

                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);
                                        nStartPos = nFieldNDX;

                                        if (nFieldNumber == 38)
                                        {
                                            nMsg = new byte[sizeof(float)];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[2] = gzBuffer[nFieldNDX++];
                                            nMsg[3] = gzBuffer[nFieldNDX++];
                                            Array.Reverse(nMsg);
                                            oL1Quote.fund = TD_GetResponseValue(sizeof(float), nMsg, nStartPos, 0);


                                        }
                                        else
                                            nFieldNDX--;

                                    }


                                    /*/
                                     * EXCHANGE NAME : Field 39
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 39)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nStartPos = nFieldNDX;

                                            nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                            nFieldNDX = nFieldNDX + nStringlLength;

                                            nMsg = new byte[nStringlLength];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                            oL1Quote.exchange_name = TD_GetResponseValue(0, nMsg, 0, nStringlLength);

                                        }
                                        else
                                            nFieldNDX--;
                                    }



                                    /*/
                                     * DIVIDEND DATE : Field 40
                                    /*/


                                    if (nFieldNDX < gzBuffer.Length)
                                    {
                                        nMsg = new byte[sizeof(Int32)];
                                        nMsg[0] = gzBuffer[nFieldNDX++];
                                        nFieldNumber = BitConverter.ToInt32(nMsg, 0);


                                        if (nFieldNumber == 40)
                                        {
                                            nMsg = new byte[sizeof(short)];
                                            nMsg[1] = gzBuffer[nFieldNDX++];
                                            nMsg[0] = gzBuffer[nFieldNDX++];
                                            nStartPos = nFieldNDX;

                                            nStringlLength = BitConverter.ToInt16(nMsg, 0);
                                            nFieldNDX = nFieldNDX + nStringlLength;

                                            nMsg = new byte[nStringlLength];
                                            Array.Copy(gzBuffer, nStartPos, nMsg, 0, nStringlLength);
                                            oL1Quote.dividend_date = rs.TD_GetResponseValue(0, nMsg, 0, nStringlLength);


                                        }
                                        else
                                            nFieldNDX--;
                                    }


                                    oL1Quotes.Add(oL1Quote);


                                    rs.SendLevelOneDataStreaming(oL1Quotes, rs.stockSymbol, rs.ServiceName);

                                    if (nFieldNDX >= gzBuffer.Length - 1)
                                    {
                                        lContinueParsing = false;
                                    }
                                }
                            }
                        }


                        //// Make another call so that we continue retrieving any all incoming data                                                           

                        if (rs.lNewStockSymbol == false)
                        {
                            try
                            {

                                IAsyncResult ar = responseStream.BeginRead(rs.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);

                            }
                            catch (Exception exc)
                            {
                                rs.CloseStream(rs);
                                responseStream.Close();

                                rs.oParent.TD_RequestAsyncLevel1QuoteStreaming(rs.stockSymbol, rs.ServiceName, rs.oParentForm);
                                rs.oParent = null;
                            }

                        }

                    }

                }
                catch (Exception exc)
                {

                    /*/ This is very important.  In case the remote server should drop our connection /*/
                    /*/ This will allow us to recreate the original request and begin reciving data.  /*/

                    if (rs.lNewStockSymbol == false)
                    {
                        rs.CloseStream(rs);

                        rs.oParent.TD_RequestAsyncLevel1QuoteStreaming(rs.stockSymbol, rs.ServiceName, rs.oParentForm);
                        rs.oParent = null;
                    }

                    return;
                }

            }