Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        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);
            }
        }