Example #1
0
 public void SettingEmptyValuesForDefaultAPICredentials_Should_ThrowException(string key, string secret)
 {
     // arrange
     // act
     // assert
     Assert.Throws(typeof(ArgumentException), () => BinanceDefaults.SetDefaultApiCredentials(key, secret));
 }
Example #2
0
        //private IBinanceApiUser iuser;
        public VolumeInfo()
        {
            InitializeComponent();
            enableTrading = chkLiveTrading.Checked;
            BinanceDefaults.SetDefaultApiCredentials("jfjGYilh6zE3EN0k4ENvFHPfun1MmIhvZsYvOBPgmqExCKyYVb1gjyE2DyAo4Ks8", "eUYGrWr30TDy8iIrI3SVUXg1D7Jo4ysj1wvFuUCaLZlE3ZqcqqjLl08zcIcNr2xc");
            BinanceDefaults.SetDefaultLogVerbosity(LogVerbosity.Debug);
            //BinanceDefaults.SetDefaultLogOutput(Console.Out);
            using (var client = new BinanceClient())
            {
                BinanceAccountInfo           accountInfo = client.GetAccountInfo().Data;
                IEnumerable <BinanceBalance> candlearray = accountInfo.Balances.Select(e => e).Where(e => (e.Total + e.Locked) > 0); //
            }
            if (!System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\Database.sqlite"))
            {
                SQLiteConnection.CreateFile("Database.sqlite");
            }
            _conn = new SQLiteConnection("Data Source=Database.sqlite;Version=3;");
            _conn.Open();
            try
            {
                string        sql     = "CREATE TABLE IF NOT EXISTS TICKERS (Symbol VARCHAR(20), active INT)";
                SQLiteCommand command = new SQLiteCommand(sql, _conn);
                command.ExecuteNonQueryAsync();
                sql     = "CREATE TABLE IF NOT EXISTS ORDERS (Symbol VARCHAR(20),Scanned DATE, Price decimal, Volume decimal, TakerBuyBaseAssetVolume decimal, TakerBuyQuoteAssetVolume decimal, NumberOfTrades INT, Hr8Av INT, NowPercent decimal, Min15Percent decimal, GreenCandles decimal)";
                command = new SQLiteCommand(sql, _conn);
                command.ExecuteNonQueryAsync();
                sql = "CREATE VIEW IF NOT EXISTS [V_Symbols] AS SELECT COUNT(Symbol), Symbol FROM ORDERS GROUP BY Symbol ORDER By COUNT(Symbol) DESC;";
                command.ExecuteNonQueryAsync();
            }
            catch (Exception ex)
            {
                //_conn.Close();
            }
            TableInit();
            //RefreshButton.Visible = false;
            FontSet();

            //this.loopThread = new Thread(new ThreadStart(this.GetVolumes));
            //this.loopThread.Start();

            this.backgroundWorkerView = new System.ComponentModel.BackgroundWorker();
            this.backgroundWorkerView.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorkerView_RunWorkerCompleted);
            this.backgroundWorkerView.DoWork             += new DoWorkEventHandler(backgroundWorkerView_DoWork);
            //Task.Run(() =>
            //{
            //GetVolumes();
            //});
            //this.Show();
        }
Example #3
0
        public BinanceAccount(string coin,
                              decimal tradingFee,
                              decimal bitcoinTransferFee)
        {
            BinanceDefaults.SetDefaultApiCredentials("APIKEY", "APISECRET");

            // Setup coin
            this.TradeCoin = new Coin {
                Token = coin
            };
            this.Bitcoin = new Coin {
                Token = "BTC", TransferFee = bitcoinTransferFee
            };
            this.TradingFee = tradingFee;
        }
Example #4
0
        public void SettingDefaults_Should_ImpactNewClients()
        {
            // arrange
            var stringBuilder = new StringBuilder();

            BinanceDefaults.SetDefaultApiCredentials("test", "test");
            BinanceDefaults.SetDefaultLogOutput(new StringWriter(stringBuilder));
            BinanceDefaults.SetDefaultLogVerbosity(LogVerbosity.Debug);

            var client = PrepareClient(JsonConvert.SerializeObject(new BinancePing()));

            // act
            Assert.DoesNotThrow(() => client.GetAccountInfo());

            // assert
            Assert.IsFalse(string.IsNullOrEmpty(stringBuilder.ToString()));
        }
Example #5
0
        public BinanceAccount(string coin,
                              decimal tradingFee,
                              decimal bitcoinTransferFee,
                              string apiKey,
                              string apiSecret,
                              ILogger <BinanceAccount> logger)
        {
            BinanceDefaults.SetDefaultApiCredentials(apiKey, apiSecret);

            // Setup coin
            this.TradeCoin = new Coin {
                Token = coin
            };
            this.Bitcoin = new Coin {
                Token = "BTC", TransferFee = bitcoinTransferFee
            };
            this.TradingFee = tradingFee;
            this._logger    = logger;
        }
Example #6
0
        static void Main(string[] args)
        {
            BinanceDefaults.SetDefaultApiCredentials("APIKEY", "APISECRET");
            BinanceDefaults.SetDefaultLogVerbosity(LogVerbosity.Debug);
            BinanceDefaults.SetDefaultLogOutput(Console.Out);

            using (var client = new BinanceClient())
                using (var socketClient = new BinanceSocketClient())
                {
                    // Public
                    var ping          = client.Ping();
                    var serverTime    = client.GetServerTime();
                    var orderBook     = client.GetOrderBook("BNBBTC", 10);
                    var aggTrades     = client.GetAggregatedTrades("BNBBTC", startTime: DateTime.UtcNow.AddMinutes(-2), endTime: DateTime.UtcNow, limit: 10);
                    var klines        = client.GetKlines("BNBBTC", KlineInterval.OneHour, startTime: DateTime.UtcNow.AddHours(-10), endTime: DateTime.UtcNow, limit: 10);
                    var prices24h     = client.Get24HPrices("BNBBTC");
                    var allPrices     = client.GetAllPrices();
                    var allBookPrices = client.GetAllBookPrices();

                    // Private
                    var openOrders      = client.GetOpenOrders("BNBBTC");
                    var allOrders       = client.GetAllOrders("BNBBTC");
                    var testOrderResult = client.PlaceTestOrder("BNBBTC", OrderSide.Buy, OrderType.Limit, TimeInForce.GoodTillCancel, 1, 1);
                    var queryOrder      = client.QueryOrder("BNBBTC", allOrders.Data[0].OrderId);
                    var orderResult     = client.PlaceOrder("BNBBTC", OrderSide.Sell, OrderType.Limit, TimeInForce.GoodTillCancel, 10, 0.0002);
                    var cancelResult    = client.CancelOrder("BNBBTC", orderResult.Data.OrderId);
                    var accountInfo     = client.GetAccountInfo();
                    var myTrades        = client.GetMyTrades("BNBBTC");


                    // Withdrawal/deposit
                    var withdrawalHistory = client.GetWithdrawHistory();
                    var depositHistory    = client.GetDepositHistory();
                    var withdraw          = client.Withdraw("ASSET", "ADDRESS", 0);


                    // Streams
                    var successDepth = socketClient.SubscribeToDepthStream("bnbbtc", (data) =>
                    {
                        // handle data
                    });
                    var successTrades = socketClient.SubscribeToTradesStream("bnbbtc", (data) =>
                    {
                        // handle data
                    });
                    var successKline = socketClient.SubscribeToKlineStream("bnbbtc", KlineInterval.OneMinute, (data) =>
                    {
                        // handle data
                    });

                    var successStart   = client.StartUserStream();
                    var successAccount = socketClient.SubscribeToAccountUpdateStream(successStart.Data.ListenKey, (data) =>
                    {
                        // handle data
                    });
                    var successOrder = socketClient.SubscribeToOrderUpdateStream(successStart.Data.ListenKey, (data) =>
                    {
                        // handle data
                    });

                    socketClient.UnsubscribeFromStream(successDepth.Data);
                    socketClient.UnsubscribeFromAccountUpdateStream();
                    socketClient.UnsubscribeAllStreams();
                }

            Console.ReadLine();
        }
Example #7
0
        public MainViewModel()
        {
            MainViewModel.MainViewModels.Add(this);


            BinanceDefaults.SetDefaultLogVerbosity(Logging.LogVerbosity.Warning);
            TextWriter tw = new StreamWriter("log.txt"); // This is not threadsafe!

            BinanceDefaults.SetDefaultLogOutput(tw);

            // DB
            storage = new Storage();

            // Load key and secret
            string configLocation = "config.ini";

            if (File.Exists(configLocation))
            {
                mainConfig = File.ReadAllLines(configLocation).ToDictionary(line => line.Split('=')[0], line => line.Split('=')[1].Trim());
                var apiKey    = mainConfig.GetValue("APIKey");
                var apiSecret = mainConfig.GetValue("APISecret");
                if (!string.IsNullOrWhiteSpace(apiKey))
                {
                    ApiKey = apiKey;
                }
                if (!string.IsNullOrWhiteSpace(apiSecret))
                {
                    ApiSecret = apiSecret;
                }
            }
            else
            {
                mainConfig = new Dictionary <string, string>();
                mainConfig.Add("APIKey", "");
                mainConfig.Add("APISecret", "");
                File.WriteAllLines(configLocation, mainConfig.Select(kvp => $"{kvp.Key}={kvp.Value}").ToList());
            }

            // Should be done with DI
            messageBoxService = new MessageBoxService();
            orderLock         = new object();

            BuyCommand           = new DelegateCommand(Buy);
            SellCommand          = new DelegateCommand(Sell);
            CancelCommand        = new DelegateCommand(Cancel);
            SettingsCommand      = new DelegateCommand(Settings);
            CloseSettingsCommand = new DelegateCommand(CloseSettings);


            binanceSocketClient = new BinanceSocketClient();

            var allSymbolsTask = Task.Run(() => GetAllSymbols());

            SubscribeUserStream();

            allSymbolsTask.Wait();


            Task.Run(() =>
            {
                // Doing this voilates the ratelimit
                //GetAllHistory("BTC");
                //GetAllHistory("ETH");
                //GetAllHistory("USDT");
                //GetAllHistory("BNB");
            });
        }
Example #8
0
 static BinanceExchange()
 {
     BinanceDefaults.SetDefaultApiCredentials(AppSettings.Default.BinanceKey, AppSettings.Default.BinanceSecret);
 }
Example #9
0
        // Args = [Asset][Currency][start][end][gekko location]
        static void Main(string[] args)
        {
            string asset;
            string currency;
            string start;
            string end;
            string gekkoLocation;

            if (args.Length < 4)
            {
                //TODO: print help
                Console.WriteLine("please pass these parameters [asset][currency][start][end][gekko location]");
                return;
            }
            else
            {
                asset         = args[0];
                currency      = args[1];
                start         = args[2];
                end           = args[3];
                gekkoLocation = args[4];
            }


            //asset = "ETH";
            //currency = "BTC";
            //start = "2017-12-08";
            //end = "2018-1-10";
            //gekkoLocation = @"C:\gekko";

            var binanceDBLocation = Path.Combine(gekkoLocation, "history", "binance_0.1.db");


            var symbol    = asset + currency;
            var startTime = DateTime.Parse(start).ToUniversalTime();
            var endTime   = DateTime.Parse(end).ToUniversalTime();

            Console.WriteLine($"Getting Candles for {asset}|{currency}");
            Console.WriteLine($"From {startTime} to {endTime}");
            Console.WriteLine($"Storing to \"{binanceDBLocation}\" [Exists: {File.Exists(binanceDBLocation)}]");


            BinanceDefaults.SetDefaultLogOutput(Console.Out);

            SQLiteConnection dbConnection = null;

            try
            {
                dbConnection = new SQLiteConnection($"Data Source={binanceDBLocation};Version=3;");
                dbConnection.Open();

                Console.Write("Making Sure Table Exists...");
                var ensureTableSQL     = $"CREATE TABLE IF NOT EXISTS candles_{asset}_{currency} ( id INTEGER PRIMARY KEY AUTOINCREMENT, start INTEGER UNIQUE, open REAL NOT NULL, high REAL NOT NULL, low REAL NOT NULL, close REAL NOT NULL, vwp REAL NOT NULL, volume REAL NOT NULL, trades INTEGER NOT NULL )";
                var ensureTableCommand = new SQLiteCommand(ensureTableSQL, dbConnection);
                ensureTableCommand.ExecuteNonQuery();
                Console.WriteLine("Does now.");


                using (var client = new BinanceClient())
                    using (var socketClient = new BinanceSocketClient())
                    {
                        //Do this for every 2 weeks at a time. Binance limit is 500 on klines
                        DateTime segmentStartTime = startTime;
                        DateTime segmentEndTime   = startTime.AddDays(14);
                        bool     done             = false;
                        for (int week = 1; !done; week++)
                        {
                            if (segmentEndTime >= endTime)
                            {
                                segmentEndTime = endTime;
                                done           = true;
                            }

                            Console.Write($"Getting candles for period [{segmentStartTime.ToString("yyyy-MM-dd hh:mm")}]-[{segmentEndTime.ToString("yyyy-MM-dd hh:mm")}]...");

                            var klines = client.GetKlines(symbol, KlineInterval.OneHour, startTime: segmentStartTime, endTime: segmentEndTime);

                            if (klines.Success)
                            {
                                Console.Write($"Got {klines.Data.Count()} candles.");

                                if (klines.Data.Length == 0)
                                {
                                    Console.WriteLine("Nothing to save.");
                                    continue;
                                }

                                // Doesn't calculate Volume Weighted Price
                                string sql = $"replace into candles_{asset}_{currency} (start, open, high, low, close, vwp, volume, trades) values "
                                             + string.Join(",", klines.Data.Select(k => $"(\"{k.OpenTime.ToFileTimeUtc().ToString()}\",\"{k.Open}\",\"{k.High}\",\"{k.Low}\",\"{k.Close}\",\"{k.Open}\",\"{k.Volume}\",\"{k.Trades}\")").ToArray())
                                             + ";";

                                Console.Write("Saving to DB...");
                                var command = new SQLiteCommand(sql, dbConnection);
                                command.ExecuteNonQuery();
                                Console.WriteLine("Saved.");
                            }
                            else
                            {
                                Console.WriteLine($"Could not get klines\nCode: {klines.Error.Code}\nMessage: {klines.Error.Message}");
                                return;
                            }

                            // jump forward 2 weeks
                            segmentStartTime = segmentEndTime;
                            segmentEndTime   = segmentEndTime.AddDays(14);
                        }
                    }
                Console.WriteLine("Finished.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                dbConnection?.Close();
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey(true);
        }