コード例 #1
0
        private static void SendSubscriptionRequests(BitfinexWebsocketClient client)
        {
            client.Send(new PingRequest()
            {
                Cid = 123456
            });

            client.Send(new TickerSubscribeRequest("BTC/USD"));
            client.Send(new TickerSubscribeRequest("ETH/USD"));

            client.Send(new TradesSubscribeRequest("ETH/USD"));

            //client.Send(new CandlesSubscribeRequest("BTC/USD", BitfinexTimeFrame.OneMinute));
            //client.Send(new CandlesSubscribeRequest("ETH/USD", BitfinexTimeFrame.OneMinute));

            //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P0, BitfinexFrequency.TwoSecDelay));
            //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P3, BitfinexFrequency.Realtime));

            if (!string.IsNullOrWhiteSpace(API_SECRET))
            {
                client.Authenticate(API_KEY, API_SECRET);

                // Place BUY order
                // client.Send(new NewOrderRequest(33, 1, "ETH/USD", OrderType.ExchangeLimit, 0.2, 100));

                // Place SELL order
                // client.Send(new NewOrderRequest(33, 2, "ETH/USD", OrderType.ExchangeLimit, -0.2, 2000));

                // Cancel order
                // client.Send(new CancelOrderRequest(1));
            }
        }
コード例 #2
0
        public async Task Authentication()
        {
            Skip.If(string.IsNullOrWhiteSpace(API_SECRET));

            var url = BitfinexValues.ApiWebsocketUrl;

            using (var communicator = new BitfinexWebsocketCommunicator(url))
            {
                AuthenticationResponse received = null;
                var receivedEvent = new ManualResetEvent(false);

                using (var client = new BitfinexWebsocketClient(communicator))
                {
                    client.Streams.AuthenticationStream.Subscribe(auth =>
                    {
                        received = auth;
                        receivedEvent.Set();
                    });

                    await communicator.Start();

                    client.Authenticate(API_KEY, API_SECRET);

                    receivedEvent.WaitOne(TimeSpan.FromSeconds(30));

                    Assert.NotNull(received);
                    Assert.True(received.IsAuthenticated);
                }
            }
        }
コード例 #3
0
        static void Main(string[] args)
        {
            InitLogging();

            AppDomain.CurrentDomain.ProcessExit   += CurrentDomainOnProcessExit;
            AssemblyLoadContext.Default.Unloading += DefaultOnUnloading;
            Console.CancelKeyPress += ConsoleOnCancelKeyPress;

            Console.WriteLine("|=======================|");
            Console.WriteLine("|    BITFINEX CLIENT    |");
            Console.WriteLine("|=======================|");
            Console.WriteLine();

            Log.Debug("====================================");
            Log.Debug("              STARTING              ");
            Log.Debug("====================================");


            //var url = new Uri("wss://real.okex.com:10441/websocket");
            var url          = BitfinexValues.ApiWebsocketUrl;
            var communicator = new BitfinexWebsocketCommunicator(url);
            var client       = new BitfinexWebsocketClient(communicator);

            client.Streams.InfoStream.Subscribe(info =>
            {
                client.Authenticate(API_KEY, API_SECRET);
                client.Send(new PingRequest()
                {
                    Cid = 123456
                });

                Log.Information($"Info received version: {info.Version}, reconnection happened, resubscribing to streams");
                SendSubscriptionRequests(client);
            });

            SubscribeToStreams(client);

            communicator.Start();

            ExitEvent.WaitOne();

            Log.Debug("====================================");
            Log.Debug("              STOPPING              ");
            Log.Debug("====================================");
            Log.CloseAndFlush();
        }
        public async Task Authentication()
        {
            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Verbose()
                         .WriteTo.File(logPath, rollingInterval: RollingInterval.Day)
                         .WriteTo.ColoredConsole(LogEventLevel.Verbose)
                         .CreateLogger();

            Skip.If(string.IsNullOrWhiteSpace(API_SECRET));

            var url = BitfinexValues.ApiWebsocketUrl;

            using (var communicator = new BitfinexWebsocketCommunicator(url))
            {
                AuthenticationResponse received = null;
                var receivedEvent = new ManualResetEvent(false);

                using (var client = new BitfinexWebsocketClient(communicator))
                {
                    client.Streams.AuthenticationStream.Subscribe(auth =>
                    {
                        received = auth;
                        receivedEvent.Set();
                    });

                    await communicator.Start();

                    await client.Authenticate(API_KEY, API_SECRET);

                    receivedEvent.WaitOne(TimeSpan.FromSeconds(30));

                    Assert.NotNull(received);
                    Assert.True(received.IsAuthenticated);
                }
            }
        }
コード例 #5
0
        private static async Task SendSubscriptionRequests(BitfinexWebsocketClient client)
        {
            //client.Send(new ConfigurationRequest(ConfigurationFlag.Timestamp | ConfigurationFlag.Sequencing));
            client.Send(new PingRequest()
            {
                Cid = 123456
            });

            //client.Send(new TickerSubscribeRequest("BTC/USD"));
            //client.Send(new TickerSubscribeRequest("ETH/USD"));

            //client.Send(new TradesSubscribeRequest("BTC/USD"));
            //client.Send(new TradesSubscribeRequest("NEC/ETH")); // Nectar coin from ETHFINEX
            //client.Send(new FundingsSubscribeRequest("BTC"));
            //client.Send(new FundingsSubscribeRequest("USD"));

            //client.Send(new CandlesSubscribeRequest("BTC/USD", BitfinexTimeFrame.OneMinute));
            //client.Send(new CandlesSubscribeRequest("ETH/USD", BitfinexTimeFrame.OneMinute));

            //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P0, BitfinexFrequency.Realtime));
            //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P3, BitfinexFrequency.Realtime));
            //client.Send(new BookSubscribeRequest("ETH/USD", BitfinexPrecision.P0, BitfinexFrequency.Realtime));

            //client.Send(new BookSubscribeRequest("fUSD", BitfinexPrecision.P0, BitfinexFrequency.Realtime));

            client.Send(new RawBookSubscribeRequest("BTCUSD", "100"));
            //client.Send(new RawBookSubscribeRequest("fUSD", "25"));
            //client.Send(new RawBookSubscribeRequest("fBTC", "25"));

            //client.Send(new StatusSubscribeRequest("liq:global"));
            //client.Send(new StatusSubscribeRequest("deriv:tBTCF0:USTF0"));

            if (!string.IsNullOrWhiteSpace(API_SECRET))
            {
                client.Authenticate(API_KEY, API_SECRET);

#pragma warning disable 4014
                Task.Run(async() =>
#pragma warning restore 4014
                {
                    Task.Delay(2000).Wait();

                    // Place BUY order
                    //await client.Send(new NewOrderRequest(1, 100, "ETH/USD", OrderType.Limit, 0.2, 103) {Flags = OrderFlag.PostOnly});
                    //await client.Send(new NewOrderRequest(2, 101, "ETH/USD", OrderType.Limit, 0.2, 102) {Flags = OrderFlag.PostOnly});
                    //await client.Send(new NewOrderRequest(33, 102, "ETH/USD", OrderType.Limit, 0.2, 101) {Flags = OrderFlag.PostOnly});

                    // Place SELL order
                    //await client.Send(new NewOrderRequest(1, 200, "ETH/USD", OrderType.Limit, -0.2, 108) {Flags = OrderFlag.PostOnly});
                    //await client.Send(new NewOrderRequest(2, 201, "ETH/USD", OrderType.Limit, -0.2, 109) {Flags = OrderFlag.PostOnly});
                    //await client.Send(new NewOrderRequest(33, 202, "ETH/USD", OrderType.Limit, -0.2, 110) {Flags = OrderFlag.PostOnly});

                    Task.Delay(7000).Wait();

                    // Cancel order separately
                    //await client.Send(new CancelOrderRequest(new CidPair(100, DateTime.UtcNow)));
                    //await client.Send(new CancelOrderRequest(new CidPair(200, DateTime.UtcNow)));

                    Task.Delay(7000).Wait();

                    // Cancel order multi
                    //await client.Send(new CancelMultiOrderRequest(new[]
                    //{
                    //    new CidPair(101, DateTime.UtcNow),
                    //    new CidPair(201, DateTime.UtcNow)
                    //}));

                    Task.Delay(2000).Wait();

                    //await client.Send(CancelMultiOrderRequest.CancelGroup(33));
                    //await client.Send(CancelMultiOrderRequest.CancelEverything());

                    // request calculations
                    // await client.Send(new CalcRequest(new[]
                    // {
                    //     "margin_base",
                    //     "balance",
                    // }));
                });
            }
        }
コード例 #6
0
        static void Main(string[] args)
        {
            InitLogging();

            AppDomain.CurrentDomain.ProcessExit   += CurrentDomainOnProcessExit;
            AssemblyLoadContext.Default.Unloading += DefaultOnUnloading;
            Console.CancelKeyPress += ConsoleOnCancelKeyPress;

            Console.WriteLine("|=======================|");
            Console.WriteLine("|    BITFINEX CLIENT    |");
            Console.WriteLine("|=======================|");
            Console.WriteLine();

            Log.Debug("====================================");
            Log.Debug("              STARTING              ");
            Log.Debug("====================================");


            var url = BitfinexValues.ApiWebsocketUrl;

            using (var communicator = new BitfinexWebsocketCommunicator(url))
            {
                using (var client = new BitfinexWebsocketClient(communicator))
                {
                    client.Streams.PongStream.Subscribe(pong => Log.Information($"Pong received! Id: {pong.Cid}"));
                    client.Streams.TickerStream.Subscribe(ticker =>
                                                          Log.Information($"{ticker.Pair} - last price: {ticker.LastPrice}, bid: {ticker.Bid}, ask: {ticker.Ask}"));
                    client.Streams.TradesStream.Where(x => x.Type == TradeType.Executed).Subscribe(x =>
                                                                                                   Log.Information($"Trade {x.Pair} executed. Time: {x.Mts:mm:ss.fff}, Amount: {x.Amount}, Price: {x.Price}"));

                    client.Streams.CandlesStream.Subscribe(candles =>
                    {
                        candles.CandleList.OrderBy(x => x.Mts).ToList().ForEach(x =>
                        {
                            Log.Information(
                                $"Candle(Pair : {candles.Pair} TimeFrame : {candles.TimeFrame.GetStringValue()}) --> {x.Mts} High : {x.High} Low : {x.Low} Open : {x.Open} Close : {x.Close}");
                        });
                    });

                    client.Streams.BookStream.Subscribe(book =>
                                                        Log.Information(
                                                            $"Book | channel: {book.ChanId} pair: {book.Pair}, price: {book.Price}, amount {book.Amount}, count: {book.Count}"));

                    client.Streams.CandlesStream.Subscribe(candles =>
                    {
                        candles.CandleList.OrderBy(x => x.Mts).ToList().ForEach(x =>
                        {
                            Log.Information(
                                $"Candle(Pair : {candles.Pair} TimeFrame : {candles.TimeFrame.GetStringValue()}) --> {x.Mts} High : {x.High} Low : {x.Low} Open : {x.Open} Close : {x.Close}");
                        });
                    });

                    client.Streams.AuthenticationStream.Subscribe(auth => Log.Information($"Authenticated: {auth.IsAuthenticated}"));
                    client.Streams.WalletStream
                    .Subscribe(wallet =>
                               Log.Information($"Wallet {wallet.Currency} balance: {wallet.Balance} type: {wallet.Type}"));

                    communicator.Start().Wait();

                    client.Send(new PingRequest()
                    {
                        Cid = 123456
                    });

                    client.Send(new TickerSubscribeRequest("BTC/USD"));
                    client.Send(new TickerSubscribeRequest("ETH/USD"));

                    //client.Send(new TradesSubscribeRequest("ETH/USD"));

                    client.Send(new CandlesSubscribeRequest("BTC/USD", BitfinexTimeFrame.OneMinute));
                    client.Send(new CandlesSubscribeRequest("ETH/USD", BitfinexTimeFrame.OneMinute));

                    //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P0, BitfinexFrequency.TwoSecDelay));
                    //client.Send(new BookSubscribeRequest("BTC/USD", BitfinexPrecision.P3, BitfinexFrequency.Realtime));

                    if (!string.IsNullOrWhiteSpace(API_SECRET))
                    {
                        client.Authenticate(API_KEY, API_SECRET);

                        // Place BUY order
                        // client.Send(new NewOrderRequest(33, 1, "ETH/USD", OrderType.ExchangeLimit, 0.2, 100));

                        // Place SELL order
                        // client.Send(new NewOrderRequest(33, 2, "ETH/USD", OrderType.ExchangeLimit, -0.2, 2000));

                        // Cancel order
                        // client.Send(new CancelOrderRequest(1));
                    }

                    ExitEvent.WaitOne();
                }
            }

            Log.Debug("====================================");
            Log.Debug("              STOPPING              ");
            Log.Debug("====================================");
            Log.CloseAndFlush();
        }
コード例 #7
0
        static void Main(string[] args)
        {
            InitLogging();

            AppDomain.CurrentDomain.ProcessExit   += CurrentDomainOnProcessExit;
            AssemblyLoadContext.Default.Unloading += DefaultOnUnloading;
            Console.CancelKeyPress += ConsoleOnCancelKeyPress;

            Console.WriteLine("|=======================|");
            Console.WriteLine("|    BITFINEX CLIENT    |");
            Console.WriteLine("|=======================|");
            Console.WriteLine();

            Log.Debug("====================================");
            Log.Debug("              STARTING              ");
            Log.Debug("====================================");


            var url = BitfinexValues.ApiWebsocketUrl;

            using (var communicator = new BitfinexWebsocketCommunicator(url))
            {
                using (var client = new BitfinexWebsocketClient(communicator))
                {
                    client.Streams.PongStream.Subscribe(pong => Log.Information($"Pong received! Id: {pong.Cid}"));
                    client.Streams.TickerStream.Subscribe(ticker => Log.Information($"{ticker.Pair} - last price: {ticker.LastPrice}"));

                    client.Streams.AuthenticationStream.Subscribe(auth => Log.Information($"Authenticated: {auth.IsAuthenticated}"));
                    client.Streams.WalletsStream
                    .Subscribe(wallets => wallets.ToList().ForEach(wallet =>
                                                                   Log.Information($"Wallet {wallet.Currency} balance: {wallet.Balance}")));

                    communicator.Start().Wait();

                    client.Send(new PingRequest()
                    {
                        Cid = 123456
                    });
                    client.Send(new TickerSubscribeRequest("BTC/USD"));
                    client.Send(new TickerSubscribeRequest("ETH/USD"));

                    if (!string.IsNullOrWhiteSpace(API_SECRET))
                    {
                        client.Authenticate(API_KEY, API_SECRET);

                        // Place BUY order
                        // client.Send(new NewOrderRequest(33, 1, "ETH/USD", OrderType.ExchangeLimit, 0.2, 100));

                        // Place SELL order
                        // client.Send(new NewOrderRequest(33, 2, "ETH/USD", OrderType.ExchangeLimit, -0.2, 2000));

                        // Cancel order
                        // client.Send(new CancelOrderRequest(1));
                    }

                    ExitEvent.WaitOne();
                }
            }

            Log.Debug("====================================");
            Log.Debug("              STOPPING              ");
            Log.Debug("====================================");
            Log.CloseAndFlush();
        }