diff --git a/Examples/BlazorClient/BlazorClient.csproj b/Examples/BlazorClient/BlazorClient.csproj index 67d97860..6eea01c0 100644 --- a/Examples/BlazorClient/BlazorClient.csproj +++ b/Examples/BlazorClient/BlazorClient.csproj @@ -5,37 +5,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + diff --git a/Examples/BlazorClient/Pages/Index.razor b/Examples/BlazorClient/Pages/Index.razor index 3ddfbe3d..0be0f794 100644 --- a/Examples/BlazorClient/Pages/Index.razor +++ b/Examples/BlazorClient/Pages/Index.razor @@ -5,7 +5,6 @@ @inject IBitfinexRestClient bitfinexClient @inject IBitgetRestClient bitgetClient @inject IBitMartRestClient bitmartClient -@inject IBitMEXRestClient bitmexClient @inject IBloFinRestClient bloFinClient @inject IBybitRestClient bybitClient @inject ICoinbaseRestClient coinbaseClient @@ -47,7 +46,6 @@ var bitfinexTask = bitfinexClient.ExchangeApi.ExchangeData.GetTickerAsync("tBTCUSD"); var bitgetTask = bitgetClient.SpotApiV2.ExchangeData.GetTickersAsync("BTCUSDT"); var bitmartTask = bitmartClient.SpotApi.ExchangeData.GetTickerAsync("BTC_USDT"); - var bitmexTask = bitmexClient.ExchangeApi.ExchangeData.GetSymbolsAsync("XBT_USDT"); var bloFinTask = bloFinClient.FuturesApi.ExchangeData.GetTickersAsync("BTC-USDT"); var bybitTask = bybitClient.V5Api.ExchangeData.GetSpotTickersAsync("BTCUSDT"); var coinbaseTask = coinbaseClient.AdvancedTradeApi.ExchangeData.GetSymbolAsync("BTC-USDT"); @@ -71,7 +69,7 @@ var whitebitTask = whitebitClient.V4Api.ExchangeData.GetTickersAsync(); var xtTask = xtClient.SpotApi.ExchangeData.GetTickersAsync("btc_usdt"); - await Task.WhenAll(asterTask, binanceTask, bingXTask, bitfinexTask, bitgetTask, bitmartTask, bloFinTask, bitmexTask, bybitTask, coinexTask, coinWTask, deepCoinTask, gateioTask, + await Task.WhenAll(asterTask, binanceTask, bingXTask, bitfinexTask, bitgetTask, bitmartTask, bloFinTask, bybitTask, coinexTask, coinWTask, deepCoinTask, gateioTask, htxTask, krakenTask, kucoinTask, lBankTask, mexcTask, okxTask, pionexTask, toobitTask, upbitTask, weexTask, whitebitTask, xtTask); if (asterTask.Result.Success) @@ -92,9 +90,6 @@ if (bitmartTask.Result.Success) _prices.Add("BitMart", bitmartTask.Result.Data.LastPrice); - if (bitmexTask.Result.Success) - _prices.Add("BitMEX", bitmexTask.Result.Data.First().LastPrice); - if (bloFinTask.Result.Success) _prices.Add("BloFin", bloFinTask.Result.Data.First().LastPrice); diff --git a/Examples/BlazorClient/Pages/LiveData.razor b/Examples/BlazorClient/Pages/LiveData.razor index dfd53536..120aeb53 100644 --- a/Examples/BlazorClient/Pages/LiveData.razor +++ b/Examples/BlazorClient/Pages/LiveData.razor @@ -5,7 +5,6 @@ @inject IBitfinexSocketClient bitfinexSocketClient @inject IBitgetSocketClient bitgetSocketClient @inject IBitMartSocketClient bitmartSocketClient -@inject IBitMEXSocketClient bitmexSocketClient @inject IBloFinSocketClient bloFinSocketClient @inject IBybitSocketClient bybitSocketClient @inject ICoinbaseSocketClient coinbaseSocketClient @@ -56,7 +55,6 @@ bitfinexSocketClient.ExchangeApi.SubscribeToTickerUpdatesAsync("tETHBTC", data => UpdateData("Bitfinex", data.Data.LastPrice)), bitgetSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.First().LastPrice)), bitmartSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("BitMart", data.Data.LastPrice)), - bitmexSocketClient.ExchangeApi.SubscribeToSymbolUpdatesAsync("ETH_XBT", data => UpdateData("BitMEX", data.Data.LastPrice ?? 0)), // BloFin doesn't support the ETH/BTC pair //bloFinSocketClient.FuturesApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("BloFin", data.Data.LastPrice)), bybitSocketClient.V5SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bybit", data.Data.LastPrice)), diff --git a/Examples/BlazorClient/Pages/OrderBooks.razor b/Examples/BlazorClient/Pages/OrderBooks.razor index e471f19f..e54f1d06 100644 --- a/Examples/BlazorClient/Pages/OrderBooks.razor +++ b/Examples/BlazorClient/Pages/OrderBooks.razor @@ -7,7 +7,6 @@ @using Bitfinex.Net.Interfaces @using Bitget.Net.Interfaces; @using BitMart.Net.Interfaces; -@using BitMEX.Net.Interfaces; @using BloFin.Net.Interfaces; @using Bybit.Net.Interfaces @using CoinEx.Net.Interfaces @@ -40,7 +39,6 @@ @inject IBitfinexOrderBookFactory bitfinexFactory @inject IBitgetOrderBookFactory bitgetFactory @inject IBitMartOrderBookFactory bitmartFactory -@inject IBitMEXOrderBookFactory bitmexFactory @inject IBloFinOrderBookFactory bloFinFactory @inject IBybitOrderBookFactory bybitFactory @inject ICoinbaseOrderBookFactory coinbaseFactory @@ -103,7 +101,6 @@ { "Bitfinex", bitfinexFactory.Create("tETHBTC") }, { "Bitget", bitgetFactory.CreateSpot("ETHBTC") }, { "BitMart", bitmartFactory.CreateSpot("ETH_BTC", null) }, - { "BitMEX", bitmexFactory.Create("ETH_XBT") }, { "BloFin", bloFinFactory.CreateFutures("ETH-USDT") }, { "Bybit", bybitFactory.Create("ETHBTC", Bybit.Net.Enums.Category.Spot) }, { "Coinbase", coinbaseFactory.Create("ETH-BTC", null) }, diff --git a/Examples/BlazorClient/Pages/SpotClient.razor b/Examples/BlazorClient/Pages/SpotClient.razor index f2e0c541..14536f2b 100644 --- a/Examples/BlazorClient/Pages/SpotClient.razor +++ b/Examples/BlazorClient/Pages/SpotClient.razor @@ -1,7 +1,7 @@ @page "/SpotClient" @using CryptoExchange.Net.SharedApis @using System.Diagnostics -@inject IEnumerable restClients +@inject IEnumerable restClients

ETH-BTC prices:

@foreach(var price in _prices.OrderBy(p => p.Key)) @@ -15,7 +15,7 @@ protected override async Task OnInitializedAsync() { var symbol = new SharedSymbol(TradingMode.Spot, "ETH", "BTC"); - var tasks = restClients.Select(x => x.GetSpotTickerAsync(new GetTickerRequest(symbol))); + var tasks = restClients.Where(x => x.SupportedTradingModes.Contains(TradingMode.Spot)).Select(x => x.GetTickerAsync(new GetTickerRequest(symbol))); await foreach (var ticker in ParallelEnumerateAsync(tasks)) { if (ticker.Success) diff --git a/Examples/BlazorClient/Pages/Trackers.razor b/Examples/BlazorClient/Pages/Trackers.razor index c02ee266..4b6e9d60 100644 --- a/Examples/BlazorClient/Pages/Trackers.razor +++ b/Examples/BlazorClient/Pages/Trackers.razor @@ -6,7 +6,6 @@ @using BingX.Net.Interfaces @using Bitfinex.Net.Interfaces @using Bitget.Net.Interfaces; -@using BitMEX.Net.Interfaces; @using BitMart.Net.Interfaces; @using BloFin.Net.Interfaces @using Bybit.Net.Interfaces @@ -40,7 +39,6 @@ @inject IBitfinexTrackerFactory bitfinexFactory @inject IBitgetTrackerFactory bitgetFactory @inject IBitMartTrackerFactory bitmartFactory -@inject IBitMEXTrackerFactory bitmexFactory @inject IBloFinTrackerFactory bloFinFactory @inject IBybitTrackerFactory bybitFactory @inject ICoinbaseTrackerFactory coinbaseFactory @@ -96,7 +94,6 @@ { bitfinexFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, { bitgetFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, { bitmartFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, - { bitmexFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, { bloFinFactory.CreateTradeTracker(futuresSymbol, period: TimeSpan.FromMinutes(5)) }, { bybitFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, { coinbaseFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) }, diff --git a/Examples/BlazorClient/Startup.cs b/Examples/BlazorClient/Startup.cs index 3f361ec5..45fca411 100644 --- a/Examples/BlazorClient/Startup.cs +++ b/Examples/BlazorClient/Startup.cs @@ -39,7 +39,6 @@ namespace BlazorClient services.AddBitfinex(); services.AddBitget(); services.AddBitMart(); - services.AddBitMEX(); services.AddBloFin(); services.AddBybit(); services.AddCoinbase(); diff --git a/Examples/BlazorClient/_Imports.razor b/Examples/BlazorClient/_Imports.razor index 4b16ba67..834e549b 100644 --- a/Examples/BlazorClient/_Imports.razor +++ b/Examples/BlazorClient/_Imports.razor @@ -14,7 +14,6 @@ @using Bitfinex.Net.Interfaces.Clients; @using Bitget.Net.Interfaces.Clients; @using BitMart.Net.Interfaces.Clients; -@using BitMEX.Net.Interfaces.Clients; @using BloFin.Net.Interfaces.Clients; @using Bybit.Net.Interfaces.Clients; @using Coinbase.Net.Interfaces.Clients; diff --git a/Examples/ConsoleClient/ConsoleClient.csproj b/Examples/ConsoleClient/ConsoleClient.csproj index 89e225b4..a49b9255 100644 --- a/Examples/ConsoleClient/ConsoleClient.csproj +++ b/Examples/ConsoleClient/ConsoleClient.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/Examples/ConsoleClient/Program.cs b/Examples/ConsoleClient/Program.cs index 83356aff..85d761f1 100644 --- a/Examples/ConsoleClient/Program.cs +++ b/Examples/ConsoleClient/Program.cs @@ -25,18 +25,22 @@ var exchanges = new Dictionary(StringComparer.OrdinalIg { ["binance"] = new ExchangeClients( "Binance", - binanceRest.SpotApi.SharedClient, - binanceRest.SpotApi.SharedClient, - binanceRest.SpotApi.SharedClient, - binanceRest.SpotApi.SharedClient, - binanceSocket.SpotApi.SharedClient), + binanceRest.SpotApi.SharedApi, + binanceRest.SpotApi.SharedApi, + binanceRest.SpotApi.SharedApi, + binanceRest.SpotApi.SharedApi, + binanceRest.SpotApi.SharedApi, + binanceRest.SpotApi.SharedApi, + binanceSocket.SpotApi.SharedApi), ["bybit"] = new ExchangeClients( "Bybit", - bybitRest.V5Api.SharedClient, - bybitRest.V5Api.SharedClient, - bybitRest.V5Api.SharedClient, - bybitRest.V5Api.SharedClient, - bybitSocket.V5SpotApi.SharedClient) + bybitRest.V5Api.SharedApi, + bybitRest.V5Api.SharedApi, + bybitRest.V5Api.SharedApi, + bybitRest.V5Api.SharedApi, + bybitRest.V5Api.SharedApi, + bybitRest.V5Api.SharedApi, + bybitSocket.V5SpotApi.SharedApi) }; PrintHelp(); @@ -98,7 +102,7 @@ async Task PrintPricesAsync(string[] args) var symbol = GetSymbol(args, 1); var tasks = exchanges.Values.Select(async exchange => { - var result = await exchange.TickerRest.GetSpotTickerAsync(new GetTickerRequest(symbol)); + var result = await exchange.TickerRest.GetTickerAsync(new GetTickerRequest(symbol)); if (!result.Success) { Console.WriteLine($"{exchange.Name,-8} error: {result.Error}"); @@ -171,7 +175,7 @@ async Task PrintOpenOrdersAsync(string[] args) var exchange = GetExchange(args, 1); var symbol = GetSymbol(args, 2); - var result = await exchange.OrderRest.GetOpenSpotOrdersAsync(new GetOpenOrdersRequest(symbol)); + var result = await exchange.GetOpenOrdersRest.GetOpenSpotOrdersAsync(new GetOpenOrdersRequest(symbol)); if (!result.Success) { Console.WriteLine($"Open orders request failed: {result.Error}"); @@ -203,23 +207,9 @@ async Task PlaceLimitOrderAsync(string[] args) SharedQuantity.Base(quantity), price, SharedTimeInForce.GoodTillCanceled, - exchange.OrderRest.GenerateClientOrderId()); + exchange.PlaceOrderRest.GenerateClientOrderId()); - var validationError = exchange.OrderRest.PlaceSpotOrderOptions.ValidateRequest( - exchange.Name, - request, - TradingMode.Spot, - exchange.OrderRest.SupportedTradingModes, - exchange.OrderRest.SpotSupportedOrderTypes, - exchange.OrderRest.SpotSupportedTimeInForce, - exchange.OrderRest.SpotSupportedOrderQuantity); - if (validationError != null) - { - Console.WriteLine($"Order request is not valid for {exchange.Name}: {validationError}"); - return; - } - - var result = await exchange.OrderRest.PlaceSpotOrderAsync(request); + var result = await exchange.PlaceOrderRest.PlaceSpotOrderAsync(request); Console.WriteLine(result.Success ? $"Order placed. Id: {result.Data.Id}" : $"Order failed: {result.Error}"); @@ -233,7 +223,7 @@ async Task CancelOrderAsync(string[] args) if (string.IsNullOrWhiteSpace(orderId)) throw new ArgumentException("Missing order id. Example: cancel-order binance BTC USDT 123456"); - var result = await exchange.OrderRest.CancelSpotOrderAsync(new CancelOrderRequest(symbol, orderId)); + var result = await exchange.CancelOrderRest.CancelSpotOrderAsync(new CancelOrderRequest(symbol, orderId)); Console.WriteLine(result.Success ? $"Order canceled. Id: {result.Data.Id}" : $"Cancel failed: {result.Error}"); @@ -296,8 +286,10 @@ static void PrintHelp() internal record ExchangeClients( string Name, - ISpotTickerRestClient TickerRest, - IOrderBookRestClient OrderBookRest, - IBalanceRestClient BalanceRest, - ISpotOrderRestClient OrderRest, - ITickerSocketClient TickerSocket); + IGetTickerRest TickerRest, + IGetOrderBookRest OrderBookRest, + IGetBalancesRest BalanceRest, + IPlaceSpotOrderRest PlaceOrderRest, + IGetOpenSpotOrdersRest GetOpenOrdersRest, + ICancelSpotOrderRest CancelOrderRest, + ISubscribeTickerSocket TickerSocket); diff --git a/Examples/SharedClients/Program.cs b/Examples/SharedClients/Program.cs index 053361b8..26272350 100644 --- a/Examples/SharedClients/Program.cs +++ b/Examples/SharedClients/Program.cs @@ -5,13 +5,13 @@ using CryptoExchange.Net.SharedApis; using OKX.Net.Clients; var symbol = new SharedSymbol(TradingMode.Spot, "ETH", "USDT"); -var binanceSpotRestClient = new BinanceRestClient().SpotApi.SharedClient; -var okxSpotRestClient = new OKXRestClient().UnifiedApi.SharedClient; -var bitmartSpotRestClient = new BitMartRestClient().SpotApi.SharedClient; +var binanceSpotRestClient = new BinanceRestClient().SpotApi.SharedApi; +var okxSpotRestClient = new OKXRestClient().UnifiedApi.SharedApi; +var bitmartSpotRestClient = new BitMartRestClient().SpotApi.SharedApi; -var binanceSpotSocketClient = new BinanceSocketClient().SpotApi.SharedClient; -var okxSpotSocketClient = new OKXSocketClient().UnifiedApi.SharedClient; -var bitmartSpotSocketClient = new BitMartSocketClient().SpotApi.SharedClient; +var binanceSpotSocketClient = new BinanceSocketClient().SpotApi.SharedApi; +var okxSpotSocketClient = new OKXSocketClient().UnifiedApi.SharedApi; +var bitmartSpotSocketClient = new BitMartSocketClient().SpotApi.SharedApi; await GetLastTradePriceAsync(binanceSpotRestClient, symbol); await GetLastTradePriceAsync(okxSpotRestClient, symbol); @@ -31,9 +31,9 @@ Console.ReadLine(); foreach (var subscription in subscriptions) await subscription.CloseAsync(); -async Task GetLastTradePriceAsync(ISpotTickerRestClient client, SharedSymbol symbol) +async Task GetLastTradePriceAsync(IGetTickerRest client, SharedSymbol symbol) { - var result = await client.GetSpotTickerAsync(new GetTickerRequest(symbol)); + var result = await client.GetTickerAsync(new GetTickerRequest(symbol)); if (!result.Success) { Console.WriteLine($"Failed to get ticker: {result.Error}"); @@ -43,7 +43,7 @@ async Task GetLastTradePriceAsync(ISpotTickerRestClient client, SharedSymbol sym Console.WriteLine($"{client.Exchange} {result.Data.Symbol}: {result.Data.LastPrice}"); } -async Task SubscribeTickerUpdatesAsync(ITickerSocketClient client, SharedSymbol symbol, ICollection subscriptions) +async Task SubscribeTickerUpdatesAsync(ISubscribeTickerSocket client, SharedSymbol symbol, ICollection subscriptions) { var result = await client.SubscribeToTickerUpdatesAsync(new SubscribeTickerRequest(symbol), update => { diff --git a/Examples/SharedClients/SharedClients.csproj b/Examples/SharedClients/SharedClients.csproj index 9151c061..f9639b76 100644 --- a/Examples/SharedClients/SharedClients.csproj +++ b/Examples/SharedClients/SharedClients.csproj @@ -8,9 +8,9 @@ - - - + + +