/// <summary> /// Example using manager without DI framework (not recommended). /// </summary> private static void ExampleMainWithoutDI() { try { // Load configuration. var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", true, false) .Build(); // Get configuration settings. var symbols = configuration.GetSection("TradeHistory:Symbols").Get <string[]>() ?? new string[] { Symbol.BTC_USDT }; var limit = 25; try { limit = Convert.ToInt32(configuration.GetSection("TradeHistory")?["Limit"]); } catch { /* ignored */ } var loggerFactory = new LoggerFactory(); loggerFactory.AddFile(configuration.GetSection("Logging:File")); var api = new BinanceApi(BinanceHttpClient.Instance, logger: loggerFactory.CreateLogger <BinanceApi>()); var client = new AggregateTradeClient(loggerFactory.CreateLogger <AggregateTradeClient>()); var webSocket = new DefaultWebSocketClient(loggerFactory.CreateLogger <DefaultWebSocketClient>()); var stream = new BinanceWebSocketStream(webSocket, loggerFactory.CreateLogger <BinanceWebSocketStream>()); var controller = new BinanceWebSocketStreamController(api, stream); controller.Error += (s, e) => HandleError(e.Exception); // Initialize manager. using (var manager = new AggregateTradeWebSocketClientManager(client, controller, loggerFactory.CreateLogger <AggregateTradeWebSocketClientManager>())) { // Initialize cache and link manager (JSON client). var cache = new AggregateTradeCache(api, client, loggerFactory.CreateLogger <AggregateTradeCache>()) { Client = manager // use manager as client. }; foreach (var symbol in symbols) { // Subscribe to symbol with callback. cache.Subscribe(symbol, limit, Display); lock (_sync) { _message = symbol == symbols.Last() ? $"Symbol: \"{symbol}\" ...press any key to exit." : $"Symbol: \"{symbol}\" ...press any key to continue."; } Console.ReadKey(true); // Unsubscribe from symbol. cache.Unsubscribe(); } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(); Console.WriteLine(" ...press any key to close window."); Console.ReadKey(true); } }
public static async Task ExampleMain(string[] args) { var api = new BinanceApi(); if (await api.PingAsync()) { Console.WriteLine("Successful!"); } /* * using (var user = new BinanceApiUser("<API-Key>", "<API-Secret>")) * { * var order = new MarketOrder(user) * { * Symbol = Symbol.BTC_USDT, * Side = OrderSide.Buy, * Quantity = 0.01m * }; * * try * { * order.Validate(); * * await api.TestPlaceAsync(order); * * Console.WriteLine("Test Order Successful!"); * } * catch (Exception e) * { * Console.WriteLine($"Test Order Failed: \"{e.Message}\""); * } * } */ using (var webSocketManager = new AggregateTradeWebSocketClientManager()) { webSocketManager.Error += (s, e) => { Console.WriteLine(e.Exception.Message); }; webSocketManager.Subscribe(Symbol.BTC_USDT, evt => { var side = evt.Trade.IsBuyerMaker ? "SELL" : "BUY "; Console.WriteLine($"{evt.Trade.Symbol} {side} {evt.Trade.Quantity} @ {evt.Trade.Price}"); }); Console.ReadKey(true); } using (var webSocketManager = new DepthWebSocketCacheManager()) { webSocketManager.Error += (s, e) => { Console.WriteLine(e.Exception.Message); }; webSocketManager.Subscribe(Symbol.BTC_USDT, evt => { Symbol symbol = evt.OrderBook.Symbol; // use implicit conversion. var minBidPrice = evt.OrderBook.Bids.Last().Price; var maxAskPrice = evt.OrderBook.Asks.Last().Price; Console.WriteLine($"Bid Quantity: {evt.OrderBook.Depth(minBidPrice)} {symbol.BaseAsset} - " + $"Ask Quantity: {evt.OrderBook.Depth(maxAskPrice)} {symbol.BaseAsset}"); }); Console.ReadKey(true); } }