diff --git a/Examples/BlazorClient/BlazorClient.csproj b/Examples/BlazorClient/BlazorClient.csproj index 5ff316f..b5047b1 100644 --- a/Examples/BlazorClient/BlazorClient.csproj +++ b/Examples/BlazorClient/BlazorClient.csproj @@ -5,29 +5,30 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + diff --git a/Examples/BlazorClient/Pages/Index.razor b/Examples/BlazorClient/Pages/Index.razor index 269fdf2..b162935 100644 --- a/Examples/BlazorClient/Pages/Index.razor +++ b/Examples/BlazorClient/Pages/Index.razor @@ -5,6 +5,7 @@ @inject IBitgetRestClient bitgetClient @inject IBitMartRestClient bitmartClient @inject IBitMEXRestClient bitmexClient +@inject IBloFinRestClient bloFinClient @inject IBybitRestClient bybitClient @inject ICoinbaseRestClient coinbaseClient @inject ICoinExRestClient coinexClient @@ -39,6 +40,7 @@ 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"); var coinexTask = coinexClient.SpotApiV2.ExchangeData.GetTickersAsync(["BTCUSDT"]); @@ -76,6 +78,9 @@ if (bitmexTask.Result.Success) _prices.Add("BitMEX", bitmexTask.Result.Data.First().LastPrice); + if (bloFinTask.Result.Success) + _prices.Add("BloFin", bloFinTask.Result.Data.First().LastPrice); + if (bybitTask.Result.Success) _prices.Add("Bybit", bybitTask.Result.Data.List.First().LastPrice); diff --git a/Examples/BlazorClient/Pages/LiveData.razor b/Examples/BlazorClient/Pages/LiveData.razor index 78318d9..7edfa25 100644 --- a/Examples/BlazorClient/Pages/LiveData.razor +++ b/Examples/BlazorClient/Pages/LiveData.razor @@ -5,6 +5,7 @@ @inject IBitgetSocketClient bitgetSocketClient @inject IBitMartSocketClient bitmartSocketClient @inject IBitMEXSocketClient bitmexSocketClient +@inject IBloFinSocketClient bloFinSocketClient @inject IBybitSocketClient bybitSocketClient @inject ICoinbaseSocketClient coinbaseSocketClient @inject ICoinExSocketClient coinExSocketClient @@ -48,6 +49,8 @@ bitgetSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Bitget", data.Data.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)), coinExSocketClient.SpotApiV2.SubscribeToTickerUpdatesAsync(["ETHBTC"], data => UpdateData("CoinEx", data.Data.First().LastPrice)), coinWSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH_BTC", data => UpdateData("CoinW", data.Data.LastPrice)), @@ -61,7 +64,8 @@ //hyperLiquidSocketClient.SpotApi.SubscribeToSymbolUpdatesAsync("ETH", data => UpdateData("HyperLiquid", data.Data.MidPrice ?? 0)), krakenSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH/BTC", data => UpdateData("Kraken", data.Data.LastPrice)), kucoinSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("Kucoin", data.Data.LastPrice ?? 0)), - mexcSocketClient.SpotApi.SubscribeToMiniTickerUpdatesAsync("ETHBTC", data => UpdateData("Mexc", data.Data.LastPrice)), + // Mexc doesn't offer a ticker stream currently + //mexcSocketClient.SpotApi.SubscribeToMiniTickerUpdatesAsync("ETHBTC", data => UpdateData("Mexc", data.Data.LastPrice)), okxSocketClient.UnifiedApi.ExchangeData.SubscribeToTickerUpdatesAsync("ETH-BTC", data => UpdateData("OKX", data.Data.LastPrice ?? 0)), // Toobit doesn't support the ETH/BTC pair //toobitSocketClient.SpotApi.SubscribeToTickerUpdatesAsync("ETHBTC", data => UpdateData("Toobit", data.Data.LastPrice ?? 0)), diff --git a/Examples/BlazorClient/Pages/OrderBooks.razor b/Examples/BlazorClient/Pages/OrderBooks.razor index 4a67740..8804575 100644 --- a/Examples/BlazorClient/Pages/OrderBooks.razor +++ b/Examples/BlazorClient/Pages/OrderBooks.razor @@ -7,6 +7,7 @@ @using Bitget.Net.Interfaces; @using BitMart.Net.Interfaces; @using BitMEX.Net.Interfaces; +@using BloFin.Net.Interfaces; @using Bybit.Net.Interfaces @using CoinEx.Net.Interfaces @using CoinW.Net.Interfaces @@ -32,6 +33,7 @@ @inject IBitgetOrderBookFactory bitgetFactory @inject IBitMartOrderBookFactory bitmartFactory @inject IBitMEXOrderBookFactory bitmexFactory +@inject IBloFinOrderBookFactory bloFinFactory @inject IBybitOrderBookFactory bybitFactory @inject ICoinbaseOrderBookFactory coinbaseFactory @inject ICoinExOrderBookFactory coinExFactory @@ -55,7 +57,7 @@ @foreach(var book in _books.OrderBy(p => p.Key)) {
-

@book.Key

+

@book.Key - @book.Value.Symbol

@if (book.Value.AskCount >= 3 && book.Value.BidCount >= 3) { for (var i = 0; i < 3; i++) @@ -87,23 +89,21 @@ { "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) }, { "CoinEx", coinExFactory.CreateSpot("ETHBTC") }, { "CoinW", coinWFactory.CreateSpot("ETH_BTC") }, { "CryptoCom", cryptocomFactory.Create("ETH_BTC") }, { "GateIo", gateioFactory.CreateSpot("ETH_BTC") }, - // DeepCoin does not support the ETH/BTC pair - //{ "DeepCoin", deepCoinFactory.Create("ETH-BTC") }, + { "DeepCoin", deepCoinFactory.Create("ETH-USDT") }, { "HTX", htxFactory.CreateSpot("ethbtc") }, - // HyperLiquid does not support the ETH/BTC pair - //{ "HyperLiquid", hyperLiquidFactory.Create("ETH/BTC") }, + { "HyperLiquid", hyperLiquidFactory.Create("UETH/USDC") }, { "Kraken", krakenFactory.CreateSpot("ETH/BTC") }, { "Kucoin", kucoinFactory.CreateSpot("ETH-BTC") }, { "Mexc", mexcFactory.CreateSpot("ETHBTC") }, { "OKX", okxFactory.Create("ETH-BTC") }, - // Toobit does not support the ETH/BTC pair - //{ "Toobit", toobitFactory.Create("ETH/BTC") }, + { "Toobit", toobitFactory.CreateSpot("ETHUSDT") }, { "WhiteBit", whitebitFactory.CreateV4("ETH_BTC") }, { "XT", xtFactory.CreateSpot("eth_btc") }, }; diff --git a/Examples/BlazorClient/Pages/Trackers.razor b/Examples/BlazorClient/Pages/Trackers.razor index bb17b72..bacfb6c 100644 --- a/Examples/BlazorClient/Pages/Trackers.razor +++ b/Examples/BlazorClient/Pages/Trackers.razor @@ -7,6 +7,7 @@ @using Bitget.Net.Interfaces; @using BitMEX.Net.Interfaces; @using BitMart.Net.Interfaces; +@using BloFin.Net.Interfaces @using Bybit.Net.Interfaces @using CoinEx.Net.Interfaces @using CoinW.Net.Interfaces @@ -33,6 +34,7 @@ @inject IBitgetTrackerFactory bitgetFactory @inject IBitMartTrackerFactory bitmartFactory @inject IBitMEXTrackerFactory bitmexFactory +@inject IBloFinTrackerFactory bloFinFactory @inject IBybitTrackerFactory bybitFactory @inject ICoinbaseTrackerFactory coinbaseFactory @inject ICoinExTrackerFactory coinExFactory @@ -71,33 +73,35 @@ protected override async Task OnInitializedAsync() { - var usdtSymbol = new SharedSymbol(TradingMode.Spot, "BTC", "USDT"); + var usdcSpotSymbol = new SharedSymbol(TradingMode.Spot, "BTC", "USDC"); + var usdtSpotSymbol = new SharedSymbol(TradingMode.Spot, "BTC", "USDT"); + var usdtPerpLinSymbol = new SharedSymbol(TradingMode.PerpetualLinear, "BTC", "USDT"); _trackers = new List { - { binanceFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bingXFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bitfinexFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bitgetFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bitmartFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bitmexFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { bybitFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { coinbaseFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { coinExFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { coinWFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { cryptocomFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { deepCoinFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { gateioFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { htxFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - // HyperLiquid doesn't support spot pair, but does have a futures BTC/USDC pair - { hyperLiquidFactory.CreateTradeTracker(new SharedSymbol(TradingMode.PerpetualLinear, "BTC", "USDC"), period: TimeSpan.FromMinutes(5)) }, - { krakenFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { kucoinFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { mexcFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { okxFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { toobitFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { whitebitFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, - { xtFactory.CreateTradeTracker(usdtSymbol, period: TimeSpan.FromMinutes(5)) }, + { binanceFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bingXFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bitfinexFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bitgetFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bitmartFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bitmexFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { bloFinFactory.CreateTradeTracker(usdtPerpLinSymbol, period: TimeSpan.FromMinutes(5)) }, + { bybitFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { coinbaseFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { coinExFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { coinWFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { cryptocomFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { deepCoinFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { gateioFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { htxFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { hyperLiquidFactory.CreateTradeTracker(usdcSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { krakenFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { kucoinFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { mexcFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { okxFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { toobitFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { whitebitFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, + { xtFactory.CreateTradeTracker(usdtSpotSymbol, period: TimeSpan.FromMinutes(5)) }, }; await Task.WhenAll(_trackers.Select(b => b.StartAsync())); diff --git a/Examples/BlazorClient/Startup.cs b/Examples/BlazorClient/Startup.cs index 6b1bb33..415ff73 100644 --- a/Examples/BlazorClient/Startup.cs +++ b/Examples/BlazorClient/Startup.cs @@ -38,6 +38,7 @@ namespace BlazorClient services.AddBitget(); services.AddBitMart(); services.AddBitMEX(); + services.AddBloFin(); services.AddBybit(); services.AddCoinbase(); services.AddCoinEx(); diff --git a/Examples/BlazorClient/_Imports.razor b/Examples/BlazorClient/_Imports.razor index c47d96f..9367f9c 100644 --- a/Examples/BlazorClient/_Imports.razor +++ b/Examples/BlazorClient/_Imports.razor @@ -14,6 +14,7 @@ @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; @using CoinEx.Net.Interfaces.Clients; diff --git a/README.md b/README.md index 956ea93..5d03f53 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Full list of all libraries part of the CryptoExchange.Net ecosystem. Consider us |![Bitget](https://raw.githubusercontent.com/JKorf/Bitget.Net/refs/heads/main/Bitget.Net/Icon/icon.png)|Bitget|CEX|[JKorf/Bitget.Net](https://github.com/JKorf/Bitget.Net)|[![Nuget version](https://img.shields.io/nuget/v/JK.Bitget.net.svg?style=flat-square)](https://www.nuget.org/packages/JK.Bitget.Net)|[Link](https://partner.bitget.com/bg/1qlf6pj1)|20%| |![BitMart](https://raw.githubusercontent.com/JKorf/BitMart.Net/refs/heads/main/BitMart.Net/Icon/icon.png)|BitMart|CEX|[JKorf/BitMart.Net](https://github.com/JKorf/BitMart.Net)|[![Nuget version](https://img.shields.io/nuget/v/BitMart.net.svg?style=flat-square)](https://www.nuget.org/packages/BitMart.Net)|[Link](https://www.bitmart.com/invite/JKorfAPI/en-US)|30%| |![BitMEX](https://raw.githubusercontent.com/JKorf/BitMEX.Net/refs/heads/main/BitMEX.Net/Icon/icon.png)|BitMEX|CEX|[JKorf/BitMEX.Net](https://github.com/JKorf/BitMEX.Net)|[![Nuget version](https://img.shields.io/nuget/v/JKorf.BitMEX.net.svg?style=flat-square)](https://www.nuget.org/packages/JKorf.BitMEX.Net)|[Link](https://www.bitmex.com/app/register/94f98e)|30%| +|![BloFin](https://raw.githubusercontent.com/JKorf/BloFin.Net/refs/heads/main/BloFin.Net/Icon/icon.png)|BloFin|CEX|[JKorf/BloFin.Net](https://github.com/JKorf/BloFin.Net)|[![Nuget version](https://img.shields.io/nuget/v/BloFin.net.svg?style=flat-square)](https://www.nuget.org/packages/BloFin.Net)|-|-| |![Bybit](https://raw.githubusercontent.com/JKorf/Bybit.Net/refs/heads/main/ByBit.Net/Icon/icon.png)|Bybit|CEX|[JKorf/Bybit.Net](https://github.com/JKorf/Bybit.Net)|[![Nuget version](https://img.shields.io/nuget/v/Bybit.net.svg?style=flat-square)](https://www.nuget.org/packages/Bybit.Net)|[Link](https://partner.bybit.com/b/jkorf)|-| |![Coinbase](https://raw.githubusercontent.com/JKorf/Coinbase.Net/refs/heads/main/Coinbase.Net/Icon/icon.png)|Coinbase|CEX|[JKorf/Coinbase.Net](https://github.com/JKorf/Coinbase.Net)|[![Nuget version](https://img.shields.io/nuget/v/JKorf.Coinbase.Net.svg?style=flat-square)](https://www.nuget.org/packages/JKorf.Coinbase.Net)|[Link](https://advanced.coinbase.com/join/T6H54H8)|-| |![CoinEx](https://raw.githubusercontent.com/JKorf/CoinEx.Net/refs/heads/master/CoinEx.Net/Icon/icon.png)|CoinEx|CEX|[JKorf/CoinEx.Net](https://github.com/JKorf/CoinEx.Net)|[![Nuget version](https://img.shields.io/nuget/v/CoinEx.net.svg?style=flat-square)](https://www.nuget.org/packages/CoinEx.Net)|[Link](https://www.coinex.com/register?rc=rbtnp)|20%|