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