Exemple #1
0
        // ReSharper disable once UnusedParameter.Local
        public static void Main(string[] args)
        {
            Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) {
                e.Cancel = true;
                CancellationTokenSource.Cancel();
                Console.WriteLine("Waiting....");
            };

            var options = new ArgumentOptions();
            var isValid = CommandLine.Parser.Default.ParseArgumentsStrict(args, options);

            if (!isValid)
            {
                Console.WriteLine("Parameter is wrong!");
                return;
            }

            InitializeAutoMappers();
            var serviceProvider = InitDependencyInjection.Init(options.Exchange, options.Strategy);

            Console.WriteLine("Starting parameters:");
            Console.WriteLine($"\tExchange name: {options.Exchange}");
            Console.WriteLine($"\tTrading pair: {options.TradingPair}");
            Console.WriteLine($"\tCandle period: {options.CandlePeriod}");
            Console.WriteLine($"\tStrategy name: {options.Strategy}");
            Console.WriteLine();

            try
            {
                _userBalanceService = serviceProvider.GetService <IUserBalanceService>();
                _realTimeService    = serviceProvider.GetService <ITraderService>();

                var utcNow = DateTime.UtcNow;
                var delayStartInSeconds = (int)options.CandlePeriod * 60 - utcNow.Minute % (int)options.CandlePeriod * 60 - utcNow.Second;
                Console.WriteLine($"Delaying realtime trading start. Delay time (seconds): {delayStartInSeconds}");

                Thread.Sleep(delayStartInSeconds * 1000);

                Console.WriteLine();
                Console.WriteLine("Started trading");
                Console.WriteLine();

                _realTimeService.StartTradingAsync(options.TradingPair, options.CandlePeriod, CancellationTokenSource.Token).Wait();
            }
            catch (Exception ex)
            {
                var emailService = serviceProvider.GetService <IEmailService>();
                emailService.SendEmail($"Exception {options.TradingPair}", ex.ToString());
                Console.WriteLine($"Exception: {ex}");
            }

            Console.WriteLine("############ SUMMARY ############");
            Console.WriteLine(_userBalanceService.TradingSummary());
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
Exemple #2
0
        public static void Main(string[] args)
        {
            var options = new ArgumentOptions();
            var isValid = CommandLine.Parser.Default.ParseArgumentsStrict(args, options);

            if (!isValid)
            {
                Console.WriteLine("Parameter is wrong!");
                return;
            }

            InitializeAutoMappers();
            var serviceProvider = InitDependencyInjection.Init(options.Exchange, options.Strategy, options.EnableBacktest);

            if (options.EnableBacktest)
            {
                var candleService          = serviceProvider.GetService <ICandleService>();
                var availableCandlePeriods = candleService.GetAvailableCandlePeriodsAsync(options.TradingPair).Result.ToList();

                Console.WriteLine("Available candle preiods:");
                var periodOptions = new Dictionary <int, long>();
                for (int i = 0; i < availableCandlePeriods.Count; i++)
                {
                    var availableCandlePeriod = availableCandlePeriods[i];
                    Console.WriteLine($"Options {i + 1}: {availableCandlePeriod.PeriodStart:yyyy-MM-dd hh:mm} - {availableCandlePeriod.PeriodEnd:yyyy-MM-dd hh:mm}; Sample count: {availableCandlePeriod.Candles.Count()}");
                    Console.WriteLine();
                    periodOptions.Add(i + 1, availableCandlePeriod.ScanId);
                }
                Console.WriteLine("Select option: ");
                var key = Console.ReadKey();

                int selectedOption;
                if (!int.TryParse(key.KeyChar.ToString(), out selectedOption))
                {
                    Console.WriteLine("Not exists option!");
                    return;
                }
                var scanId  = periodOptions[selectedOption];
                var candles = availableCandlePeriods.First(w => w.ScanId == scanId).Candles.ToList();
                Console.WriteLine();
                Console.WriteLine($"Selected option: {selectedOption}; Candle count: {candles.Count}");

                var backtesTraderService = serviceProvider.GetService <ITraderService>();
                backtesTraderService.CheckStrategyAsync(options.TradingPair, candles);

                Console.WriteLine("############ SUMMARY ############");
                var userBalanceService = serviceProvider.GetService <IUserBalanceService>();
                Console.WriteLine(userBalanceService.TradingSummary());
            }

            if (options.EnableImport)
            {
                var importProvider = serviceProvider.GetService <IImportRepository>();
                var candles        = importProvider.ImportCandlesAsync(options.TradingPair, options.ImportIntervalInHour, options.CandlePeriod).Result;
                Console.WriteLine($"Imported candle count: {candles.Count()}");
            }

            if (options.EnableOrderTesting)
            {
                var exchangeProvider = serviceProvider.GetService <IExchangeProvider>();
                var depthModel       = exchangeProvider.GetDepth(options.TradingPair).Result;

                //decimal price = 19150;
                //decimal defaultAmount = 10;
                ////var orderBook = exchangeProvider.GetOrderBook(options.TradingPair, 1).Result;
                ////price = orderBook.SellOrders.First();
                //var ticker = exchangeProvider.GetTicker(options.TradingPair).Result;
                //price = ticker.HighestBid;
                ////var balance = exchangeProvider.GetBalanceAsync().Result;
                //var rate = Math.Round(defaultAmount / price, 8);
                ////var orderNumber = exchangeProvider.CreateOrderAsync(TradeType.Buy, options.TradingPair, price, rate).Result;
                ////var result = exchangeProvider.CancelOrderAsync(orderNumber).Result;
                ////ticker = exchangeProvider.GetTicker(options.TradingPair).Result;
                ////price = ticker.HighestBid;
                //var orderNumber2 = exchangeProvider.CreateOrderAsync(TradeType.Sell, options.TradingPair, price, (decimal)0.00057228).Result;
                ////var a = exchangeProvider.GetOrderBook(options.TradingPair, 1).Result;
            }
        }