示例#1
0
        //static DateTime dtt = DateTime.Now.AddSeconds(30);

        private static void MessageLoop(object o)
        {
            Console.WriteLine(dtt);
            Stream str = (Stream)o;

            sendMessage($"Window will open at {dtt}");
            int         packetCount    = 0;
            int         packetInterval = 0;
            int         l1             = 0;
            int         resp           = 0;
            int         trade          = 0;
            DateTime    dt             = DateTime.Now;
            DateTime    ldt            = DateTime.Now;
            QuoteHolder qh;

            for (;;)
            {
                //Packet p = new Packet(str);
                Packet p = Packet.GetPacket(str);
                if (!T92750 && DateTime.Now > dtt)
                {
                    Console.WriteLine($"window open {DateTime.Now}");
                    T92750 = true;
                    foreach (string sym in dict.Keys)
                    {
                        QuoteHolder qhx = dict[sym];
                        double      Ask = -1;
                        if (qhx.L1 == null)
                        {
                            if (qhx.Resp.Count > 0)
                            {
                                if (qhx.Resp[0].rawPayload[14] == 15)
                                {
                                    Ask = qhx.Resp[0].Ask;
                                }
                            }
                        }
                        else
                        {
                            Ask = qhx.L1.Ask;
                        }
                        if (qhx.Volume < 100 && Ask > qhx.PrevClose)
                        {
                            double TargetPrice = qhx.PrevClose - (qhx.ATR * .25);
                            string m           = $"B {sym} Ask={Ask} PrevClose={qhx.PrevClose} vol={qhx.Volume} atr={qhx.ATR} buyprice={TargetPrice.ToString("0.00")}";
                            sendMessage(m);
                        }
                    }
                }
                try
                {
                    packetCount++;
                    packetInterval++;
                    if ((DateTime.Now - ldt).TotalSeconds > 10)
                    {
                        Console.WriteLine("total = " + packetCount / 1000000 + " interval = " + packetInterval + " l1=" + l1 + " resp=" + resp + " trade=" + trade + " symbols = " + dict.Keys.Count);
                        l1  = 0; trade = 0; packetInterval = 0;
                        ldt = DateTime.Now;
                        //Packet.audit.Flush();
                    }
                    switch (p.packetType)
                    {
                    case Packet.PacketType.M_RESP_REFRESH_SYMBOL:
                        //Console.WriteLine("resp");
                        resp++;
                        RespRefreshSymbolPacket rp = (RespRefreshSymbolPacket)p;
                        lock (outstanding)
                        {
                            if (outstanding.ContainsKey(rp.Symbol))
                            {
                                outstanding.Remove(rp.Symbol);
                            }
                        }
                        if (dict.ContainsKey(rp.Symbol))
                        {
                            qh = dict[rp.Symbol];
                            qh.Resp.Add(rp);
                            qh.Volume = qh.Resp[0].Volume;
                        }
                        break;

                    case Packet.PacketType.M_TRADE_REPORT:
                        trade++;
                        TradeReportPacket tp = (TradeReportPacket)p;
                        string            ts = tp.Symbol;
                        qh         = dict[ts];
                        qh.Volume += tp.Size;
                        //Console.WriteLine(p);
                        if (watching == ts)
                        {
                            Console.WriteLine("TR + " + qh.L1 == null ? "xx" : qh.L1 + " " + qh.Volume + " " + tp.Size);
                        }
                        break;

                    case Packet.PacketType.M_BOOK_TRADE:
                        //trade++;
                        //Console.WriteLine(p);
                        break;

                    case Packet.PacketType.M_LEVEL1:
                        l1++;
                        L1Packet q  = (L1Packet)p;
                        string   qs = q.Symbol;
                        try
                        {
                            qh = dict[qs];
                            //double pct = .2;
                            //double targetPrice = qh.PrevClose + (qh.ATR * pct);
                            ////if (watching == qs)
                            //if (!qh.hasPosition)
                            //{
                            //    if (q.Bid > targetPrice)
                            //    {
                            //        string s = $"{qs} prevClose={qh.PrevClose} targetPrice={targetPrice}  atr={qh.ATR} bid={q.Bid} pct={pct.ToString("0.00")}";
                            //        Console.WriteLine(s);
                            //        qh.hasPosition = true;
                            //        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                            //        IPAddress send_to_address = IPAddress.Parse("127.0.0.1");
                            //        IPEndPoint sending_end_point = new IPEndPoint(send_to_address, 5555);
                            //        socket.SendTo(ASCIIEncoding.ASCII.GetBytes(s), sending_end_point);
                            //    }
                            //    //Console.WriteLine($"{q} {qh.Volume} {qh.PrevClose} {qh.ATR}");
                            //}
                            qh.L1 = (L1Packet)p;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("unsolicited pack");
                        }
                        break;

                    case Packet.PacketType.M_BOOK_NEW_QUOTE:
                    case Packet.PacketType.M_BOOK_MODIFY_QUOTE:
                    case Packet.PacketType.M_BOOK_DELETE_QUOTE:
                    case Packet.PacketType.M_STOCK_IMBALANCE_INDICATOR:
                    case Packet.PacketType.M_BOOK_ORDER_CANCELED:
                        break;

                    default:
                        //Console.WriteLine(p);
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
示例#2
0
        //static DateTime dtt = DateTime.Now.AddMinutes(2.5);
        //static DateTime dtt = DateTime.Now.AddSeconds(30);

        private static void MessageLoop(object o)
        {
            Console.WriteLine(dtt);
            Stream str = (Stream)o;

            sendMessage($"Window will open at {dtt}");
            int         packetCount    = 0;
            int         packetInterval = 0;
            int         l1             = 0;
            int         resp           = 0;
            int         trade          = 0;
            DateTime    dt             = DateTime.Now;
            DateTime    ldt            = DateTime.Now;
            QuoteHolder qh;

            QuoteHolder.Logger = new StreamWriter($@"e:\QHL{DateTime.Now.ToString("MMddyyyy-HHmmss")}.txt");
            for (int i = 0; ; i++)
            {
                if (i % 10000 == 0)
                {
                    QuoteHolder.Logger.Flush();
                }
                //Packet p = new Packet(str);
                Packet p = Packet.GetPacket(str);
                if (!T92750 && DateTime.Now > dtt)
                {
                    Console.WriteLine($"window open {DateTime.Now}");
                    T92750 = true;
                    foreach (string sym in dict.Keys)
                    {
                        QuoteHolder qhx = dict[sym];
                        if (qhx.Resp.Count > 0 && qhx.Resp[0].Snapshot != null)
                        {
                            RespRefreshSymbolPacket.SnapShot snap = qhx.Resp[0].Snapshot;
                            Double Ask = 0;
                            Double Bid = 0;
                            if (qhx.L1 == null)
                            {
                                Ask = snap.Ask;
                                Bid = snap.Bid;
                            }
                            else
                            {
                                Ask = qhx.L1.Ask;
                                Bid = qhx.L1.Bid;
                            }
                            if (qhx.Volume < 100 && Ask > qhx.PrevClose && qhx.L1 != null) //TESTCLIENT
                            //if (qhx.Volume < 100000 && Ask > qhx.PrevClose && qhx.L1 != null) //TESTING
                            {
                                double TargetPrice = qhx.PrevClose - (qhx.ATR * .25);
                                string m           = $"B {sym} Ask={Ask} PrevClose={qhx.PrevClose} vol={qhx.Volume} atr={qhx.ATR} buyprice={TargetPrice.ToString("0.00")}";
                                qhx.PostExec(sym, 100, TargetPrice);
                                Console.WriteLine(m);
                                sendMessage(m);
                            }
                        }
                    }
                }
                try
                {
                    packetCount++;
                    packetInterval++;
                    if ((DateTime.Now - ldt).TotalSeconds > 10)
                    {
                        Console.WriteLine("total = " + packetCount / 1000000 + " interval = " + packetInterval + " l1=" + l1 + " resp=" + resp + " trade=" + trade + " symbols = " + dict.Keys.Count);
                        l1  = 0; trade = 0; packetInterval = 0;
                        ldt = DateTime.Now;
                        Packet.audit.Flush();
                    }
                    switch (p.packetType)
                    {
                    case Packet.PacketType.M_RESP_REFRESH_SYMBOL:
                        //Console.WriteLine("resp");
                        resp++;
                        RespRefreshSymbolPacket rp = (RespRefreshSymbolPacket)p;
                        lock (outstanding)
                        {
                            if (outstanding.ContainsKey(rp.Symbol))
                            {
                                outstanding.Remove(rp.Symbol);
                            }
                        }
                        if (dict.ContainsKey(rp.Symbol))
                        {
                            qh = dict[rp.Symbol];
                            qh.Resp.Add(rp);
                            qh.Volume = qh.Resp[0].Volume;
                            const byte SRS_LEVEL1 = 1 << 2;
                            if ((rp.Steps & SRS_LEVEL1) != 0)
                            {
                                Console.WriteLine(rp.Snapshot);
                            }
                        }
                        //for(int i = 42;i < p.length; i += 32)
                        //{
                        //    string t = ASCIIEncoding.ASCII.GetString(p.rawPayload, i, 4);
                        //    Console.WriteLine(t);
                        //}
                        //string symbol = ASCIIEncoding.ASCII.GetString(p.rawPayload, 6, 10).TrimEnd((Char)0);
                        //if (last != null)
                        //{
                        //    for (int i = 16; i < 42; i++)
                        //    {
                        //        if (last[i] != p.rawPayload[i])
                        //        {
                        //            Console.WriteLine("i=" + i + " l=" + last[i] + " cu=" + p.rawPayload[i]);
                        //        }
                        //    }
                        //    for (int i = 16; i < 42; i++)
                        //    {
                        //        Console.WriteLine(i + " " + BitConverter.ToInt16(p.rawPayload,i));
                        //    }
                        //    for (int i = 16; i < 42; i++)
                        //    {
                        //        Console.WriteLine(i + " " + BitConverter.ToInt32(p.rawPayload, i));
                        //    }
                        //}
                        //last = p.rawPayload;
                        break;

                    case Packet.PacketType.M_TRADE_REPORT:
                        trade++;
                        TradeReportPacket tp = (TradeReportPacket)p;
                        string            ts = tp.Symbol;
                        qh = dict[ts];
                        qh.ProcessTrade(tp);
                        //Console.WriteLine(p);
                        if (watching == ts)
                        {
                            Console.WriteLine("TR + " + qh.L1 == null ? "xx" : qh.L1 + " " + qh.Volume + " " + tp.Size);
                        }
                        break;

                    case Packet.PacketType.M_BOOK_TRADE:
                        //trade++;
                        //Console.WriteLine(p);
                        break;

                    case Packet.PacketType.M_LEVEL1:
                        l1++;
                        L1Packet q  = (L1Packet)p;
                        string   qs = q.Symbol;
                        try
                        {
                            qh = dict[qs];
                            //double pct = .2;
                            //double targetPrice = qh.PrevClose + (qh.ATR * pct);
                            ////if (watching == qs)
                            //if (!qh.hasPosition)
                            //{
                            //    if (q.Bid > targetPrice)
                            //    {
                            //        string s = $"{qs} prevClose={qh.PrevClose} targetPrice={targetPrice}  atr={qh.ATR} bid={q.Bid} pct={pct.ToString("0.00")}";
                            //        Console.WriteLine(s);
                            //        qh.hasPosition = true;
                            //        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                            //        IPAddress send_to_address = IPAddress.Parse("127.0.0.1");
                            //        IPEndPoint sending_end_point = new IPEndPoint(send_to_address, 5555);
                            //        socket.SendTo(ASCIIEncoding.ASCII.GetBytes(s), sending_end_point);
                            //    }
                            //    //Console.WriteLine($"{q} {qh.Volume} {qh.PrevClose} {qh.ATR}");
                            //}
                            qh.L1 = (L1Packet)p;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("unsolicitied pack");
                        }
                        break;

                    case Packet.PacketType.M_BOOK_NEW_QUOTE:
                    case Packet.PacketType.M_BOOK_MODIFY_QUOTE:
                    case Packet.PacketType.M_BOOK_DELETE_QUOTE:
                    case Packet.PacketType.M_STOCK_IMBALANCE_INDICATOR:
                    case Packet.PacketType.M_BOOK_ORDER_CANCELED:
                        break;

                    default:
                        //Console.WriteLine(p);
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
示例#3
0
        //static string getTime(byte[] b, int off)
        //{
        //    int t = BitConverter.ToInt32(b, off);
        //    int tmp;
        //    tmp = t;
        //    int h = tmp / 3600000;
        //    tmp -= (h * 3600000);
        //    int m = tmp / 60000;
        //    tmp -= (m * 60000);
        //    int s = tmp / 1000;
        //    int f = tmp % 1000;
        //    string rv = h.ToString("00:") + m.ToString("00:") + s.ToString("00") + "." + f.ToString("000");
        //    return rv;
        //}
        //static double getPrice(byte[] b, int off)
        //{
        //    double rv;
        //    int d = BitConverter.ToInt32(b, off);
        //    double  c = (double)BitConverter.ToInt32(b, off + 4);
        //    rv = d + (c / 1000000000);
        //    return rv;
        //}
        static void Main(string[] args)
        {
            //byte[] znext = File.ReadAllBytes(@"c:\src\znext.raw");
            //for(int i = 26;i < znext.Length - 4;i+=24)
            //{
            //    string t = getTime(znext,i + 8);
            //    double price = getPrice(znext, i);
            //    int j = BitConverter.ToInt32(znext, i + 12);
            //    string s1 = i.ToString("X4") + " " + j;
            //    j = BitConverter.ToInt32(znext, i + 16);
            //    //string s2 = i.ToString("X4") + " " + j;
            //    string s2a = ASCIIEncoding.ASCII.GetString(znext, i + 16, 4);
            //    j = BitConverter.ToInt32(znext, i + 20);
            //    string s3 = i.ToString("X4") + " " + j;
            //}
            //byte[] connect = File.ReadAllBytes(@"e:\rawconnect.dat");
            //byte[] pgrefresh = File.ReadAllBytes(@"e:\rawpgrefresh.dat");
            //pgrefresh[4] = 83;
            //pgrefresh[5] = 80;
            //pgrefresh[6] = 89;
            //pgrefresh[7] = 0;
            //byte[] zerorefresh = File.ReadAllBytes(@"e:\raw0refresh.dat");
            TcpClient cl = new TcpClient();

            cl.Connect(config.quoteServerEP);
            //cl.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555));
            StreamWriter sw = new StreamWriter(cl.GetStream());

            sw.AutoFlush = true;
            Stream str = cl.GetStream();

            byte[] key = { 0x08, 0x00, 0x0eb, 0x03, 0x00, 0x00, 0x00, 0x00 };
            str.Write(key, 0, 8);
            str.Flush();
            //str.Write(connect, 0, connect.Length);
            str.Write(config.logonRequest, 0, config.logonRequest.Length);
            str.Flush();
            byte[] r    = new byte[100000];
            bool   z    = false;
            bool   done = false;

            //new Thread(t =>
            //{
            for (;;)
            {
                //Packet p = new Packet(str);
                Packet p = Packet.GetPacket(str);
                if (p.packetType == Packet.PacketType.M_LEVEL1)
                {
                    L1Packet l1 = (L1Packet)(p);
                    //l1.ToString();
                    Console.WriteLine(l1);
                }
                //byte[] lbuff = new byte[2];
                //if (!partialPacket)
                //{
                //    str.Read(lbuff, 0, 2);
                //    length = BitConverter.ToUInt16(lbuff, 0) - 2;
                //    offset = 0;
                //}
                //Console.Write("packet length " + length);
                //int count = str.Read(r, offset, length);
                //packetType = BitConverter.ToUInt16(r, 0);
                //Console.WriteLine(" read " + count + " bytes packettype " + packetType);
                //if(count != length)
                //{
                //    partialPacket = true;
                //    length -= count;
                //    offset = count;
                //}
                //else
                //{
                //    partialPacket = false;
                //}
                if (!z)
                {
                    str.Write(config.zeroRequest, 0, config.zeroRequest.Length);
                    z = true;
                    str.Flush();
                }
                else
                {
                    if (!done)
                    {
                        config.updateSymbol("SPY");
                        str.Write(config.symbolRequest, 0, config.symbolRequest.Length);
                        done = true;
                        str.Flush();
                    }
                }
            }
            //}).Start();
        }
示例#4
0
        static DateTime dtt = DateTime.Now.AddSeconds(20); //TESTING USE ABOVE LINE

        private static void MessageLoop(object o)
        {
            Console.WriteLine(dtt);
            Stream str = (Stream)o;

            //sendMessage($"Window will open at {dtt}");
            Console.WriteLine($"Window will open at {dtt}");
            int         packetCount    = 0;
            int         packetInterval = 0;
            int         l1             = 0;
            int         resp           = 0;
            int         trade          = 0;
            DateTime    dt             = DateTime.Now;
            DateTime    ldt            = DateTime.Now;
            QuoteHolder qh;

            QuoteHolder.Logger = new StreamWriter($@"e:\Q{DateTime.Now.ToString("HHmmss")}.txt");
            new Thread(t => {
                Thread.Sleep(1000);
                QuoteHolder.Logger.Flush();
            }).Start();
            for (int i = 0;; i++)
            {
                if (i % 10000 == 0)
                {
                    QuoteHolder.Logger.Flush();
                }
                //Packet p = new Packet(str);
                Packet p = Packet.GetPacket(str);
                if (!T92750 && DateTime.Now > dtt)
                {
                    ExecuteOPG();
                }
                try
                {
                    packetCount++;
                    packetInterval++;
                    if ((DateTime.Now - ldt).TotalSeconds > 10)
                    {
                        Console.WriteLine("total = " + packetCount / 1000000 + " interval = " + packetInterval + " l1=" + l1 + " resp=" + resp + " trade=" + trade + " symbols = " + dict.Keys.Count);
                        l1  = 0; trade = 0; packetInterval = 0;
                        ldt = DateTime.Now;
                        Packet.audit.Flush();
                    }
                    switch (p.packetType)
                    {
                    case Packet.PacketType.M_RESP_REFRESH_SYMBOL:
                        //Console.WriteLine("resp");
                        resp++;
                        RespRefreshSymbolPacket rp = (RespRefreshSymbolPacket)p;
                        lock (outstanding)
                        {
                            if (outstanding.ContainsKey(rp.Symbol))
                            {
                                outstanding.Remove(rp.Symbol);
                            }
                        }
                        if (dict.ContainsKey(rp.Symbol))
                        {
                            qh = dict[rp.Symbol];
                            qh.Resp.Add(rp);
                            //qh.Volume = qh.Resp[0].Volume;
                            const byte SRS_LEVEL1 = 1 << 2;
                            if ((rp.Steps & SRS_LEVEL1) != 0)
                            {
                                qh.Volume = rp.Snapshot.Volume;
                                //Console.WriteLine(rp.Snapshot.ToString());
                            }
                        }

                        break;

                    case Packet.PacketType.M_TRADE_REPORT:
                        trade++;
                        TradeReportPacket tp = (TradeReportPacket)p;
                        string            ts = tp.Symbol;
                        qh = dict[ts];
                        int QtyToSell = qh.ProcessTrade(tp);
                        Console.WriteLine($"{tp.Symbol} process Trade returned {QtyToSell}");
                        if (QtyToSell > 0 && !qh.Closing && !ExistingPosition.ContainsKey(ts))
                        {
                            QuoteHolder qhx = dict[tp.Symbol];
                            RespRefreshSymbolPacket.SnapShot snap = qhx.Resp[0].Snapshot;     //DANGEROUS
                            //double TargetPrice = qhx.Resp[0].Snapshot.Close - (qhx.ATR * .25);
                            double Ask         = qhx.L1 != null ? qhx.L1.Ask : snap.Ask;
                            double Bid         = qhx.L1 != null ? qhx.L1.Bid : snap.Bid;
                            double TargetPrice = Bid - .03;                                                                                                                                              //TESTING DELETE THIS LINE
                            string m           = $"S|{tp.Symbol}|{snap.Close}|{qhx.Volume}|{qhx.ATR.ToString("0.00")}|{TargetPrice.ToString("0.00")}|{Bid.ToString("0.00")}|{Ask.ToString("0.00")}|DAY"; //TESTING = shour be OPG
                            //qhx.PostExec(sym, 100, TargetPrice);
                            Console.WriteLine(m);
                            qh.Closing = true;
                            sendMessage(m);
                        }
                        if (watching == ts)
                        {
                            Console.WriteLine("TR + " + qh.L1 == null ? "xx" : qh.L1 + " " + qh.Volume + " " + tp.Size);
                        }
                        break;

                    case Packet.PacketType.M_BOOK_TRADE:
                        //trade++;
                        //Console.WriteLine(p);
                        break;

                    case Packet.PacketType.M_LEVEL1:
                        l1++;
                        L1Packet q  = (L1Packet)p;
                        string   qs = q.Symbol;
                        try
                        {
                            qh    = dict[qs];
                            qh.L1 = (L1Packet)p;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("unsolicitied pack");
                        }
                        break;

                    case Packet.PacketType.M_BOOK_NEW_QUOTE:
                    case Packet.PacketType.M_BOOK_MODIFY_QUOTE:
                    case Packet.PacketType.M_BOOK_DELETE_QUOTE:
                    case Packet.PacketType.M_STOCK_IMBALANCE_INDICATOR:
                    case Packet.PacketType.M_BOOK_ORDER_CANCELED:
                        break;

                    default:
                        //Console.WriteLine(p);
                        break;
                    }
                } catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }