Beispiel #1
0
        static void Main(string[] args)
        {
            BinanceKlineData Minute        = null;
            BinanceKlineData FiveMinute    = null;
            BinanceKlineData FifteenMinute = null;
            BinanceKlineData ThirtyMinute  = null;
            BinanceKlineData Hour          = null;
            BinanceKlineData Day           = null;

            BinanceKlineData MinuteETH        = null;
            BinanceKlineData FiveMinuteETH    = null;
            BinanceKlineData FifteenMinuteETH = null;
            BinanceKlineData ThirtyMinuteETH  = null;
            BinanceKlineData HourETH          = null;
            BinanceKlineData DayETH           = null;

            BinanceKlineData MinuteLTC        = null;
            BinanceKlineData FiveMinuteLTC    = null;
            BinanceKlineData FifteenMinuteLTC = null;
            BinanceKlineData ThirtyMinuteLTC  = null;
            BinanceKlineData HourLTC          = null;
            BinanceKlineData DayLTC           = null;

            BinanceKlineData MinuteXRP        = null;
            BinanceKlineData FiveMinuteXRP    = null;
            BinanceKlineData FifteenMinuteXRP = null;
            BinanceKlineData ThirtyMinuteXRP  = null;
            BinanceKlineData HourXRP          = null;
            BinanceKlineData DayXRP           = null;

            /////////////// Main ////////////////////
            var ApiKey    = "TdRGlhtg7RsuQG6MPmbKvasd2EOMFBopLIVLmeAsoIRq5Q03qeCZwAOUCqjLhYIO";
            var SecretKey = "45gClX8cfTo2zUezse6ETFdH1kMO44OnqdgaZEHve3nu1vRLWpI26ku52yjS9odt";

            //////////////// Test ////////////////////
            //var ApiKey = "9fc2M7WrNl6FdsEv9Pk80eGXy68bZgtUscp1oOPX6w2cnOKQyGdvrtoEAox9gQR2";
            //var SecretKey = "fS7RG3om3ChfRI2JpD5cV1Qj2ZWwIvG8ANtRlrluDqSRVmz6bzDgS3CR5T0qp2gf";

            var client = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client1 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client2 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client3 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client4 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client5 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client6 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client7 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client8 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client9 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client10 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client11 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client12 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client13 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client14 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client15 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client16 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client17 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client18 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client19 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client20 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client21 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client22 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            var client23 = new BinanceClient(new ClientConfiguration()
            {
                ApiKey    = ApiKey,
                SecretKey = SecretKey,
            });

            Console.WriteLine("WebSocket Syncing Start...");
            ///////////////////////////////////////////////////////////////
            Thread WebSocketSyncing = new Thread(() =>
            {
                var manualWebSocketClient   = new InstanceBinanceWebSocketClient(client);
                var manualWebSocketClient2  = new InstanceBinanceWebSocketClient(client1);
                var manualWebSocketClient20 = new InstanceBinanceWebSocketClient(client2);
                var manualWebSocketClient3  = new InstanceBinanceWebSocketClient(client3);
                var manualWebSocketClient21 = new InstanceBinanceWebSocketClient(client4);
                var manualWebSocketClient22 = new InstanceBinanceWebSocketClient(client5);
                var manualWebSocketClient6  = new InstanceBinanceWebSocketClient(client6);
                var manualWebSocketClient7  = new InstanceBinanceWebSocketClient(client7);
                var manualWebSocketClient8  = new InstanceBinanceWebSocketClient(client8);
                var manualWebSocketClient23 = new InstanceBinanceWebSocketClient(client9);
                var manualWebSocketClient24 = new InstanceBinanceWebSocketClient(client10);
                var manualWebSocketClient25 = new InstanceBinanceWebSocketClient(client11);
                var manualWebSocketClient11 = new InstanceBinanceWebSocketClient(client12);
                var manualWebSocketClient12 = new InstanceBinanceWebSocketClient(client13);
                var manualWebSocketClient13 = new InstanceBinanceWebSocketClient(client14);
                var manualWebSocketClient26 = new InstanceBinanceWebSocketClient(client15);
                var manualWebSocketClient27 = new InstanceBinanceWebSocketClient(client16);
                var manualWebSocketClient28 = new InstanceBinanceWebSocketClient(client17);
                var manualWebSocketClient16 = new InstanceBinanceWebSocketClient(client18);
                var manualWebSocketClient17 = new InstanceBinanceWebSocketClient(client19);
                var manualWebSocketClient18 = new InstanceBinanceWebSocketClient(client20);
                var manualWebSocketClient29 = new InstanceBinanceWebSocketClient(client21);
                var manualWebSocketClient30 = new InstanceBinanceWebSocketClient(client22);
                var manualWebSocketClient31 = new InstanceBinanceWebSocketClient(client23);

                try
                {
                    var socketId = manualWebSocketClient.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.OneMinute, data =>
                    {
                        try
                        {
                            Minute = data;
                        }
                        catch (Exception) {
                            Environment.Exit(0);
                        }
                    });

                    var socketId2 = manualWebSocketClient2.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.OneHour, data =>
                    {
                        try
                        {
                            Hour = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId3 = manualWebSocketClient3.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.OneDay, data =>
                    {
                        try {
                            Day = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId20 = manualWebSocketClient20.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.FiveMinutes, data =>
                    {
                        try {
                            FiveMinute = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId21 = manualWebSocketClient21.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.FifteenMinutes, data =>
                    {
                        try {
                            FifteenMinute = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId22 = manualWebSocketClient22.ConnectToKlineWebSocket("BTCUSDT", KlineInterval.ThirtyMinutes, data =>
                    {
                        try {
                            ThirtyMinute = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    var socketId6 = manualWebSocketClient6.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.OneMinute, data =>
                    {
                        try {
                            MinuteETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId7 = manualWebSocketClient7.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.OneHour, data =>
                    {
                        try {
                            HourETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId8 = manualWebSocketClient8.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.OneDay, data =>
                    {
                        try {
                            DayETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId23 = manualWebSocketClient23.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.FiveMinutes, data =>
                    {
                        try {
                            FiveMinuteETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId24 = manualWebSocketClient24.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.FifteenMinutes, data =>
                    {
                        try {
                            FifteenMinuteETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId25 = manualWebSocketClient25.ConnectToKlineWebSocket("ETHUSDT", KlineInterval.ThirtyMinutes, data =>
                    {
                        try {
                            ThirtyMinuteETH = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    ////////////////////////////////  LTC-USDT  ////////////////////////////////////////
                    var socketId11 = manualWebSocketClient11.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.OneMinute, data =>
                    {
                        try {
                            MinuteLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId12 = manualWebSocketClient12.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.OneHour, data =>
                    {
                        try {
                            HourLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId13 = manualWebSocketClient13.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.OneDay, data =>
                    {
                        try {
                            DayLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId26 = manualWebSocketClient26.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.FiveMinutes, data =>
                    {
                        try {
                            FiveMinuteLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId27 = manualWebSocketClient27.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.FifteenMinutes, data =>
                    {
                        try {
                            FifteenMinuteLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId28 = manualWebSocketClient28.ConnectToKlineWebSocket("LTCUSDT", KlineInterval.ThirtyMinutes, data =>
                    {
                        try
                        {
                            ThirtyMinuteLTC = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    ////////////////////////////////////////   XRP-USDT   ///////////////////////////////////////
                    var socketId16 = manualWebSocketClient16.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.OneMinute, data =>
                    {
                        try {
                            MinuteXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId17 = manualWebSocketClient17.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.OneHour, data =>
                    {
                        try {
                            HourXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId18 = manualWebSocketClient18.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.OneDay, data =>
                    {
                        try {
                            DayXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId29 = manualWebSocketClient29.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.FiveMinutes, data =>
                    {
                        try {
                            FiveMinuteXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId30 = manualWebSocketClient30.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.FifteenMinutes, data =>
                    {
                        try {
                            FifteenMinuteXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });

                    var socketId31 = manualWebSocketClient31.ConnectToKlineWebSocket("XRPUSDT", KlineInterval.ThirtyMinutes, data =>
                    {
                        try {
                            ThirtyMinuteXRP = data;
                        }
                        catch (Exception)
                        {
                            Environment.Exit(0);
                        }
                    });
                }
                catch (Exception ex)
                {
                    Console.WriteLine("ERROR ON SOCKET:  " + ex.Message);
                    Environment.Exit(0);
                }
            });

            WebSocketSyncing.Start();

            //////////////////////////////////////////////////////////////
            Thread SetWebSocketData = new Thread(() =>
            {
                while (true)
                {
                    if (Minute != null && FiveMinute != null && FifteenMinute != null && ThirtyMinute != null && Hour != null && Day != null &&
                        MinuteETH != null && FiveMinuteETH != null && FifteenMinuteETH != null && ThirtyMinuteETH != null && HourETH != null && DayETH != null &&
                        MinuteLTC != null && FiveMinuteLTC != null && FifteenMinuteLTC != null && ThirtyMinuteLTC != null && HourLTC != null && DayLTC != null &&
                        MinuteXRP != null && FiveMinuteXRP != null && FifteenMinuteXRP != null && ThirtyMinuteXRP != null && HourXRP != null && DayXRP != null)
                    {
                        using (var db = new ExchangeEntities())
                        {
                            var candlesList = db.CandlesDatas.ToList();
                            for (int t = 0; t < candlesList.Count; t++)
                            {
                                if (candlesList[t].Status.Value)
                                {
                                    var tmp = candlesList[t];
                                    var dt  = db.CandlesDatas.Where(x => x.SymbolName == tmp.SymbolName && x.TimeFrame == tmp.TimeFrame).FirstOrDefault();
                                    BinanceKlineData commonDt = null;
                                    try
                                    {
                                        if (dt != null)
                                        {
                                            if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "OneMinute")
                                            {
                                                commonDt = Minute;
                                            }
                                            else if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "FiveMinute")
                                            {
                                                commonDt = FiveMinute;
                                            }
                                            else if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "FifteenMinute")
                                            {
                                                commonDt = FifteenMinute;
                                            }
                                            else if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "ThirtyMinute")
                                            {
                                                commonDt = ThirtyMinute;
                                            }
                                            else if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "OneHour")
                                            {
                                                commonDt = Hour;
                                            }
                                            else if (dt.SymbolName == "BTC-USDT" && dt.TimeFrame == "OneDay")
                                            {
                                                commonDt = Day;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "OneMinute")
                                            {
                                                commonDt = MinuteETH;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "FiveMinute")
                                            {
                                                commonDt = FiveMinuteETH;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "FifteenMinute")
                                            {
                                                commonDt = FifteenMinuteETH;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "ThirtyMinute")
                                            {
                                                commonDt = ThirtyMinuteETH;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "OneHour")
                                            {
                                                commonDt = HourETH;
                                            }
                                            else if (dt.SymbolName == "ETH-USDT" && dt.TimeFrame == "OneDay")
                                            {
                                                commonDt = DayETH;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "OneMinute")
                                            {
                                                commonDt = MinuteLTC;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "FiveMinute")
                                            {
                                                commonDt = FiveMinuteLTC;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "FifteenMinute")
                                            {
                                                commonDt = FifteenMinuteLTC;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "ThirtyMinute")
                                            {
                                                commonDt = ThirtyMinuteLTC;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "OneHour")
                                            {
                                                commonDt = HourLTC;
                                            }
                                            else if (dt.SymbolName == "LTC-USDT" && dt.TimeFrame == "OneDay")
                                            {
                                                commonDt = DayLTC;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "OneMinute")
                                            {
                                                commonDt = MinuteXRP;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "FiveMinute")
                                            {
                                                commonDt = FiveMinuteXRP;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "FifteenMinute")
                                            {
                                                commonDt = FifteenMinuteXRP;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "ThirtyMinute")
                                            {
                                                commonDt = ThirtyMinuteXRP;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "OneHour")
                                            {
                                                commonDt = HourXRP;
                                            }
                                            else if (dt.SymbolName == "XRP-USDT" && dt.TimeFrame == "OneDay")
                                            {
                                                commonDt = DayXRP;
                                            }

                                            DateTime javaEpoch = new DateTime(1970, 1, 1);

                                            dt.H         = commonDt.Kline.High;
                                            dt.L         = commonDt.Kline.Low;
                                            dt.O         = commonDt.Kline.Open;
                                            dt.C         = commonDt.Kline.Close;
                                            dt.Volume    = commonDt.Kline.Volume;
                                            dt.TimeStamp = (commonDt.Kline.StartTime.Ticks - javaEpoch.Ticks) / TimeSpan.TicksPerMillisecond;

                                            db.Configuration.ValidateOnSaveEnabled = false;
                                            db.SaveChanges();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("ERROR ON SAVING:  " + ex.Message);
                                    }
                                }
                            }
                        }
                        //Console.Clear();
                        //Console.WriteLine("      *** BTC-USDT Candle *** "); Console.WriteLine();
                        //Console.WriteLine("MINUTE:  " + "HIGH: " + Minute.Kline.High + "  LOW: " + Minute.Kline.Low + "  OPEN: " + Minute.Kline.Open + "  CLOSE: " + Minute.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("HOUR:    " + "HIGH: " + Hour.Kline.High + "  LOW: " + Hour.Kline.Low + "  OPEN: " + Hour.Kline.Open + "  CLOSE: " + Hour.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("DAY:     " + "HIGH: " + Day.Kline.High + "  LOW: " + Day.Kline.Low + "  OPEN: " + Day.Kline.Open + "  CLOSE: " + Day.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("WEEK:    " + "HIGH: " + Week.Kline.High + "  LOW: " + Week.Kline.Low + "  OPEN: " + Week.Kline.Open + "  CLOSE: " + Week.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("MONTH:   " + "HIGH: " + Month.Kline.High + "  LOW: " + Month.Kline.Low + "  OPEN: " + Month.Kline.Open + "  CLOSE: " + Month.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("      *** ETH-USDT Candle *** "); Console.WriteLine();
                        //Console.WriteLine("MINUTE:  " + "HIGH: " + MinuteETH.Kline.High + "  LOW: " + MinuteETH.Kline.Low + "  OPEN: " + MinuteETH.Kline.Open + "  CLOSE: " + MinuteETH.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("HOUR:    " + "HIGH: " + HourETH.Kline.High + "  LOW: " + HourETH.Kline.Low + "  OPEN: " + HourETH.Kline.Open + "  CLOSE: " + HourETH.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("DAY:     " + "HIGH: " + DayETH.Kline.High + "  LOW: " + DayETH.Kline.Low + "  OPEN: " + DayETH.Kline.Open + "  CLOSE: " + DayETH.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("WEEK:    " + "HIGH: " + WeekETH.Kline.High + "  LOW: " + WeekETH.Kline.Low + "  OPEN: " + WeekETH.Kline.Open + "  CLOSE: " + WeekETH.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("MONTH:   " + "HIGH: " + MonthETH.Kline.High + "  LOW: " + MonthETH.Kline.Low + "  OPEN: " + MonthETH.Kline.Open + "  CLOSE: " + MonthETH.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("      *** LTC-USDT Candle *** "); Console.WriteLine();
                        //Console.WriteLine("MINUTE:  " + "HIGH: " + MinuteLTC.Kline.High + "  LOW: " + MinuteLTC.Kline.Low + "  OPEN: " + MinuteLTC.Kline.Open + "  CLOSE: " + MinuteLTC.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("HOUR:    " + "HIGH: " + HourLTC.Kline.High + "  LOW: " + HourLTC.Kline.Low + "  OPEN: " + HourLTC.Kline.Open + "  CLOSE: " + HourLTC.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("DAY:     " + "HIGH: " + DayLTC.Kline.High + "  LOW: " + DayLTC.Kline.Low + "  OPEN: " + DayLTC.Kline.Open + "  CLOSE: " + DayLTC.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("WEEK:    " + "HIGH: " + WeekLTC.Kline.High + "  LOW: " + WeekLTC.Kline.Low + "  OPEN: " + WeekLTC.Kline.Open + "  CLOSE: " + WeekLTC.Kline.Close); Console.WriteLine();
                        //Console.WriteLine("MONTH:   " + "HIGH: " + MonthLTC.Kline.High + "  LOW: " + MonthLTC.Kline.Low + "  OPEN: " + MonthLTC.Kline.Open + "  CLOSE: " + MonthLTC.Kline.Close); Console.WriteLine();
                        Thread.Sleep(900);
                    }
                }
            });

            SetWebSocketData.Start();
        }
Beispiel #2
0
 public PaymentService(ExchangeEntities db)
 {
     _db = db;
 }
        static void Main(string[] args)
        {
            try
            {
                IKernel kernel = new StandardKernel();
                UOWRegistration.BindAll(kernel);
                uow = kernel.Get <IUnitOfWork>();
            }
            catch (Exception ex) { Console.WriteLine("Error on Application Start:   " + ex.Message); }

            Console.WriteLine("****Order Management Script****");

            /////////////////////// OrderManagment //////////////
            Thread OrderManagment = new Thread(() =>
            {
                while (true)
                {
                    try
                    {
                        var pairs = uow.MarketRates.GetAllPairs();
                        if (pairs != null)
                        {
                            for (var k = 0; k < pairs.Count; k++)
                            {
                                tradeList.Clear();
                                tradeList = uow.Payment.GetOrders().Where(tr => tr.Symbol == pairs[k].MarketSymbol).ToList();
                                if (tradeList.Count != 0)
                                {
                                    //var ticker = uow.MarketRates.GetSpecificTickerBinance(UtilityMethods.convertSymbol(pairs[k].MarketSymbol));
                                    var candle = uow.MarketRates.GetCandleWebSocket(pairs[k].MarketSymbol, "1m");
                                    GetSpecificTickerBinance ticker = new GetSpecificTickerBinance()
                                    {
                                        symbol   = candle.SymbolName,
                                        bidPrice = candle.C.ToString(),
                                        askPrice = candle.C.ToString(),
                                        askQty   = "",
                                        bidQty   = "",
                                    };

                                    for (var i = 0; i < tradeList.Count; i++)
                                    {
                                        if (tradeList[i].Status.Equals("PENDING"))
                                        {
                                            var firstSym  = tradeList[i].Symbol.Split('-')[0];
                                            var secondSym = tradeList[i].Symbol.Split('-')[1];
                                            var tId       = tradeList[i].TradeId;

                                            decimal PnLFinal = new Decimal();
                                            if (tradeList[i].Symbol == "BTC-USDT")
                                            {
                                                PnLFinal = 10;
                                            }
                                            else if (tradeList[i].Symbol == "ETH-USDT")
                                            {
                                                PnLFinal = 100;
                                            }
                                            else if (tradeList[i].Symbol == "LTC-USDT")
                                            {
                                                PnLFinal = 1000;
                                            }
                                            else if (tradeList[i].Symbol == "XRP-USDT")
                                            {
                                                PnLFinal = 100000;
                                            }
                                            else
                                            {
                                                PnLFinal = 10;
                                            }

                                            using (var db = new ExchangeEntities())
                                            {
                                                if (tradeList[i].StopLoss_TakeProfitEn.HasValue)
                                                {
                                                    if (tradeList[i].StopLoss_TakeProfitEn.Value)
                                                    {
                                                        List <Wallet> dbWallet = null;
                                                        string status          = "";
                                                        var accId = tradeList[i].Account_Id;

                                                        if (tradeList[i].Direction == "BUY")
                                                        {
                                                            if (tradeList[i].UpLimitValue.Value <= decimal.Parse(ticker.askPrice) || tradeList[i].DownLimitValue.Value >= decimal.Parse(ticker.askPrice))
                                                            {
                                                                dbWallet = db.Wallets.Where(m => m.Account_Id == accId && m.Currency == "USD").ToList();

                                                                if (tradeList[i].PnL != null)
                                                                {
                                                                    if (tradeList[i].PnL >= 0)
                                                                    {
                                                                        dbWallet.First().Balance += Math.Abs(tradeList[i].PnL.Value);
                                                                    }
                                                                    else
                                                                    {
                                                                        dbWallet.First().Balance -= Math.Abs(tradeList[i].PnL.Value);
                                                                    }
                                                                    status = "COMPLETED";
                                                                }
                                                                else
                                                                {
                                                                    dbWallet.First().Balance += (tradeList[i].Amount * tradeList[i].Value);
                                                                    status = "EXPIRED";
                                                                }
                                                                var tradeId        = tradeList[i].TradeId;
                                                                var tr             = db.Trades.Where(x => x.TradeId == tradeId).FirstOrDefault();
                                                                tr.Status          = status;
                                                                tr.TradeClose_Date = DateTime.UtcNow;
                                                                db.Configuration.ValidateOnSaveEnabled = false;
                                                                db.SaveChanges();
                                                                Console.WriteLine("Order with Account Id: " + accId + " and Order Id:  " + tradeList[i].TradeId + " is Closed");
                                                            }
                                                        }
                                                        else
                                                        {
                                                            if (tradeList[i].UpLimitValue.Value >= decimal.Parse(ticker.bidPrice) || tradeList[i].DownLimitValue.Value <= decimal.Parse(ticker.bidPrice))
                                                            {
                                                                dbWallet = db.Wallets.Where(m => m.Account_Id == accId && m.Currency == "USD").ToList();

                                                                if (tradeList[i].PnL != null)
                                                                {
                                                                    if (tradeList[i].PnL <= 0)
                                                                    {
                                                                        dbWallet.First().Balance += Math.Abs(tradeList[i].PnL.Value);
                                                                    }
                                                                    else
                                                                    {
                                                                        dbWallet.First().Balance -= Math.Abs(tradeList[i].PnL.Value);
                                                                    }
                                                                    status = "COMPLETED";
                                                                }
                                                                else
                                                                {
                                                                    dbWallet.First().Balance += (tradeList[i].Amount * tradeList[i].Value);
                                                                    status = "EXPIRED";
                                                                }
                                                                var tradeId        = tradeList[i].TradeId;
                                                                var tr             = db.Trades.Where(x => x.TradeId == tradeId).FirstOrDefault();
                                                                tr.Status          = status;
                                                                tr.TradeClose_Date = DateTime.UtcNow;
                                                                db.Configuration.ValidateOnSaveEnabled = false;
                                                                db.SaveChanges();
                                                                Console.WriteLine("Order with Account Id: " + accId + " and Order Id:  " + tradeList[i].TradeId + " is Closed  :  Closed due to S/T ");
                                                            }
                                                        }
                                                    }
                                                }

                                                if (tradeList[i].Status == "PENDING")
                                                {
                                                    if (tradeList[i].expiryTime != -1)
                                                    {
                                                        double time          = (double)(tradeList[i].expiryTime / 60);
                                                        DateTime tradeDate   = tradeList[i].TradeDate.AddMinutes(time);
                                                        DateTime currentTime = DateTime.UtcNow;
                                                        var val = DateTime.Compare(tradeDate, currentTime);

                                                        var accId = tradeList[i].Account_Id;

                                                        if (val <= 0)   ////////////////   if Time expire   //////////////////
                                                        {
                                                            List <Wallet> dbWallet = null;
                                                            string status          = "";
                                                            if (tradeList[i].Direction == "BUY")
                                                            {
                                                                dbWallet = db.Wallets.Where(m => m.Account_Id == accId && m.Currency == "USD").ToList();

                                                                if (tradeList[i].PnL != null)
                                                                {
                                                                    if (tradeList[i].PnL >= 0)
                                                                    {
                                                                        dbWallet.First().Balance += (Math.Abs(tradeList[i].PnL.Value));
                                                                    }
                                                                    else
                                                                    {
                                                                        dbWallet.First().Balance -= (Math.Abs(tradeList[i].PnL.Value));
                                                                    }
                                                                    status = "COMPLETED";
                                                                }
                                                                else
                                                                {
                                                                    dbWallet.First().Balance += (tradeList[i].Amount * tradeList[i].Value);
                                                                    status = "EXPIRED";
                                                                }
                                                            }
                                                            else
                                                            {
                                                                dbWallet = db.Wallets.Where(m => m.Account_Id == accId && m.Currency == "USD").ToList();

                                                                if (tradeList[i].PnL != null)
                                                                {
                                                                    if (tradeList[i].PnL <= 0)
                                                                    {
                                                                        dbWallet.First().Balance += (Math.Abs(tradeList[i].PnL.Value));
                                                                    }
                                                                    else
                                                                    {
                                                                        dbWallet.First().Balance -= (Math.Abs(tradeList[i].PnL.Value));
                                                                    }
                                                                    status = "COMPLETED";
                                                                }
                                                                else
                                                                {
                                                                    dbWallet.First().Balance += (tradeList[i].Amount * tradeList[i].Value);
                                                                    status = "EXPIRED";
                                                                }
                                                            }
                                                            var tradeId        = tradeList[i].TradeId;
                                                            var tr             = db.Trades.Where(x => x.TradeId == tradeId).FirstOrDefault();
                                                            tr.Status          = status;
                                                            tr.TradeClose_Date = DateTime.UtcNow;
                                                            db.Configuration.ValidateOnSaveEnabled = false;
                                                            db.SaveChanges();
                                                            Console.WriteLine("Order with Account Id: " + accId + " and order Id:  " + tradeList[i].TradeId + " is Closed");
                                                        }

                                                        else  // if there is some time remaining
                                                        {
                                                            if (tradeList[i].Direction.Equals("BUY"))
                                                            {
                                                                var tm = db.Trades.Where(t => t.TradeId == tId).FirstOrDefault();
                                                                if (tm.Status == "PENDING")
                                                                {
                                                                    tm.PnL       = (decimal.Parse(ticker.askPrice) - tm.Rate) * PnLFinal * tm.Amount;
                                                                    tm.ExitPrice = decimal.Parse(ticker.askPrice);
                                                                    db.Configuration.ValidateOnSaveEnabled = false;
                                                                    db.SaveChanges();
                                                                }
                                                            }
                                                            else if (tradeList[i].Direction.Equals("SELL"))
                                                            {
                                                                var tm = db.Trades.Where(t => t.TradeId == tId).FirstOrDefault();
                                                                if (tm.Status == "PENDING")
                                                                {
                                                                    tm.PnL       = (decimal.Parse(ticker.bidPrice) - tm.Rate) * PnLFinal * tm.Amount;
                                                                    tm.ExitPrice = decimal.Parse(ticker.bidPrice);
                                                                    db.Configuration.ValidateOnSaveEnabled = false;
                                                                    db.SaveChanges();
                                                                }
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if (tradeList[i].Direction.Equals("BUY"))
                                                        {
                                                            var tm = db.Trades.Where(t => t.TradeId == tId).FirstOrDefault();
                                                            if (tm.Status == "PENDING")
                                                            {
                                                                tm.PnL       = (decimal.Parse(ticker.askPrice) - tm.Rate) * PnLFinal * tm.Amount;
                                                                tm.ExitPrice = decimal.Parse(ticker.askPrice);
                                                                db.Configuration.ValidateOnSaveEnabled = false;
                                                                db.SaveChanges();
                                                            }
                                                        }
                                                        else if (tradeList[i].Direction.Equals("SELL"))
                                                        {
                                                            var tm = db.Trades.Where(t => t.TradeId == tId).FirstOrDefault();
                                                            if (tm.Status == "PENDING")
                                                            {
                                                                tm.PnL       = (decimal.Parse(ticker.bidPrice) - tm.Rate) * PnLFinal * tm.Amount;
                                                                tm.ExitPrice = decimal.Parse(ticker.bidPrice);
                                                                db.Configuration.ValidateOnSaveEnabled = false;
                                                                db.SaveChanges();
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        var LineNumber = new StackTrace(ex, true).GetFrame(0).GetFileLineNumber();
                        Console.WriteLine(ex.Message.ToString() + " -------- Line No:  " + LineNumber);
                    }
                    Thread.Sleep(1000);
                }
            });

            OrderManagment.Start();

            ////////////////////////////////// User Balance Checking ////////////////////
            Thread UserBalance = new Thread(() =>
            {
                while (true)
                {
                    try
                    {
                        List <Account> users = uow.Accounts.GetAllUsers();
                        foreach (var user in users)
                        {
                            List <Trade> trades = uow.Payment.GetOrdersById(user.AccountId);
                            if (trades.Count != 0)
                            {
                                CalculatePnL(trades, user);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        var LineNumber = new StackTrace(ex, true).GetFrame(0).GetFileLineNumber();
                        Console.WriteLine(ex.Message.ToString() + " -------- Line No:  " + LineNumber);
                    }
                    Thread.Sleep(8000);
                }
            });

            UserBalance.Start();

            ////////////////////////////////// Script Checking /////////////////////////////
            Thread ScriptChecking = new Thread(() =>
            {
                while (true)
                {
                    new ScriptChecking().CheckProcesses();
                    Thread.Sleep(10000);
                    GC.Collect();
                }
            });

            ScriptChecking.Start();
        }
        private static void CalculatePnL(List <Trade> trades, Account user)
        {
            using (var db = new ExchangeEntities())
            {
                var dbWallet = db.Wallets.Where(m => m.Account_Id == user.AccountId && m.Currency == "USD").ToList();
                if (dbWallet != null)
                {
                    decimal dummyPnL = 0;
                    foreach (var trade in trades)
                    {
                        var firstSym  = trade.Symbol.Split('-')[0];
                        var secondSym = trade.Symbol.Split('-')[1];
                        var tId       = trade.TradeId;

                        if (trade.Direction == "BUY")
                        {
                            if (trade.PnL != null)
                            {
                                if (trade.PnL >= 0)
                                {
                                    dummyPnL += Math.Abs(trade.PnL.Value);
                                }
                                else
                                {
                                    dummyPnL -= Math.Abs(trade.PnL.Value);
                                }
                            }
                        }
                        else
                        {
                            if (trade.PnL != null)
                            {
                                if (trade.PnL <= 0)
                                {
                                    dummyPnL += Math.Abs(trade.PnL.Value);
                                }
                                else
                                {
                                    dummyPnL -= Math.Abs(trade.PnL.Value);
                                }
                            }
                        }
                    }

                    if ((dummyPnL + dbWallet.FirstOrDefault().Balance) <= 10)
                    {
                        foreach (var obj in trades)
                        {
                            string status = "";
                            if (obj.Direction == "BUY")
                            {
                                if (obj.PnL != null)
                                {
                                    if (obj.PnL >= 0)
                                    {
                                        dbWallet.First().Balance += (Math.Abs(obj.PnL.Value));
                                    }
                                    else
                                    {
                                        dbWallet.First().Balance -= (Math.Abs(obj.PnL.Value));
                                    }
                                    status = "COMPLETED";
                                }
                                else
                                {
                                    dbWallet.First().Balance += (obj.Amount * obj.Value);
                                    status = "EXPIRED";
                                }
                            }
                            else
                            {
                                if (obj.PnL != null)
                                {
                                    if (obj.PnL <= 0)
                                    {
                                        dbWallet.First().Balance += (Math.Abs(obj.PnL.Value));
                                    }
                                    else
                                    {
                                        dbWallet.First().Balance -= (Math.Abs(obj.PnL.Value));
                                    }
                                    status = "COMPLETED";
                                }
                                else
                                {
                                    dbWallet.First().Balance += (obj.Amount * obj.Value);
                                    status = "EXPIRED";
                                }
                            }
                            var tm = db.Trades.Where(t => t.TradeId == obj.TradeId).FirstOrDefault();
                            tm.Status          = status;
                            tm.TradeClose_Date = DateTime.UtcNow;
                            db.Configuration.ValidateOnSaveEnabled = false;
                            db.SaveChanges();
                            Console.WriteLine("Order with Account Id:  " + user.AccountId + " and Order Id:  " + obj.TradeId + " Order Pair:  " + obj.Symbol + "  is Closed.  ---  ForceFully");
                        }
                    }
                }
            }
        }
Beispiel #5
0
 public MarketRatesService(ExchangeEntities db)
 {
     _db = db;
 }