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 @@
-
-
-
+
+
+