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())); }
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(); }
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"); }); }
// 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); }