1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 07:56:12 +00:00

Updated examples, added trackers example

This commit is contained in:
Jkorf 2024-10-28 15:38:25 +01:00
parent b1b05c8f6b
commit be75449e4a
7 changed files with 155 additions and 39 deletions

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
@ -6,10 +6,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0"></PackageReference>
<PackageReference Include="Moq" Version="4.20.70" />
<PackageReference Include="NUnit" Version="4.1.0"></PackageReference>
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"></PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1"></PackageReference>
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="NUnit" Version="4.2.2"></PackageReference>
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"></PackageReference>
</ItemGroup>
<ItemGroup>

View File

@ -5,22 +5,22 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Binance.Net" Version="10.7.0" />
<PackageReference Include="Bitfinex.Net" Version="7.8.2" />
<PackageReference Include="BitMart.Net" Version="1.4.0" />
<PackageReference Include="Bybit.Net" Version="3.14.3" />
<PackageReference Include="CoinEx.Net" Version="7.7.2" />
<PackageReference Include="CryptoCom.Net" Version="1.0.1" />
<PackageReference Include="GateIo.Net" Version="1.9.0" />
<PackageReference Include="JK.BingX.Net" Version="1.11.2" />
<PackageReference Include="JK.Bitget.Net" Version="1.10.4" />
<PackageReference Include="JK.Mexc.Net" Version="1.9.0" />
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
<PackageReference Include="JKorf.Coinbase.Net" Version="1.1.2" />
<PackageReference Include="JKorf.HTX.Net" Version="6.2.0" />
<PackageReference Include="KrakenExchange.Net" Version="5.0.2" />
<PackageReference Include="Kucoin.Net" Version="5.16.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.2" />
<PackageReference Include="Binance.Net" Version="10.8.0" />
<PackageReference Include="Bitfinex.Net" Version="7.9.0" />
<PackageReference Include="BitMart.Net" Version="1.5.0" />
<PackageReference Include="Bybit.Net" Version="3.15.0" />
<PackageReference Include="CoinEx.Net" Version="7.8.0" />
<PackageReference Include="CryptoCom.Net" Version="1.1.0" />
<PackageReference Include="GateIo.Net" Version="1.10.0" />
<PackageReference Include="JK.BingX.Net" Version="1.12.0" />
<PackageReference Include="JK.Bitget.Net" Version="1.11.0" />
<PackageReference Include="JK.Mexc.Net" Version="1.10.0" />
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
<PackageReference Include="JKorf.Coinbase.Net" Version="1.2.0" />
<PackageReference Include="JKorf.HTX.Net" Version="6.3.0" />
<PackageReference Include="KrakenExchange.Net" Version="5.1.0" />
<PackageReference Include="Kucoin.Net" Version="5.17.0" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
</ItemGroup>
</Project>

View File

@ -74,7 +74,7 @@
{ "Bybit", bybitFactory.Create("ETHBTC", Bybit.Net.Enums.Category.Spot) },
{ "Coinbase", coinbaseFactory.Create("ETH-BTC", null) },
{ "CoinEx", coinExFactory.CreateSpot("ETHBTC") },
{ "CryptoCom", cryptocomFactory.CreateExchange("ETH_BTC") },
{ "CryptoCom", cryptocomFactory.Create("ETH_BTC") },
{ "GateIo", gateioFactory.CreateSpot("ETH_BTC") },
{ "HTX", htxFactory.CreateSpot("ethbtc") },
{ "Kraken", krakenFactory.CreateSpot("ETH/XBT") },

View File

@ -0,0 +1,111 @@
@page "/Trackers"
@using System.Collections.Concurrent
@using System.Timers
@using Binance.Net.Interfaces
@using BingX.Net.Interfaces
@using Bitfinex.Net.Interfaces
@using Bitget.Net.Interfaces;
@using BitMart.Net.Interfaces;
@using Bybit.Net.Interfaces
@using CoinEx.Net.Interfaces
@using Coinbase.Net.Interfaces
@using CryptoExchange.Net.Interfaces
@using CryptoCom.Net.Interfaces
@using CryptoExchange.Net.SharedApis
@using CryptoExchange.Net.Trackers.Trades
@using GateIo.Net.Interfaces
@using HTX.Net.Interfaces
@using Kraken.Net.Interfaces
@using Kucoin.Net.Clients
@using Kucoin.Net.Interfaces
@using Mexc.Net.Interfaces
@using OKX.Net.Interfaces;
@inject IBinanceTrackerFactory binanceFactory
@inject IBingXTrackerFactory bingXFactory
@inject IBitfinexTrackerFactory bitfinexFactory
@inject IBitgetTrackerFactory bitgetFactory
@inject IBitMartTrackerFactory bitmartFactory
@inject IBybitTrackerFactory bybitFactory
@inject ICoinbaseTrackerFactory coinbaseFactory
@inject ICoinExTrackerFactory coinExFactory
@inject ICryptoComTrackerFactory cryptocomFactory
@inject IGateIoTrackerFactory gateioFactory
@inject IHTXTrackerFactory htxFactory
@inject IKrakenTrackerFactory krakenFactory
@inject IKucoinTrackerFactory kucoinFactory
@inject IMexcTrackerFactory mexcFactory
@inject IOKXTrackerFactory okxFactory
@implements IDisposable
<h3>ETH-BTC trade Trackers, live updates:</h3>
<div style="display:flex; flex-wrap: wrap;">
@foreach (var tracker in _trackers.OrderBy(p => p.Exchange))
{
<div style="margin-bottom: 20px; flex: 1; min-width: 700px;">
<h4>@tracker.Exchange</h4>
@foreach(var line in GetInfo(tracker))
{
<div>@line</div>
}
</div>
}
</div>
@code{
private List<ITradeTracker> _trackers = new List<ITradeTracker>();
private Timer _timer;
protected override async Task OnInitializedAsync()
{
var symbol = new SharedSymbol(TradingMode.Spot, "BTC", "USDT");
_trackers = new List<ITradeTracker>
{
{ binanceFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ bingXFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ bitfinexFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ bitgetFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ bitmartFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ bybitFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ coinbaseFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ coinExFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ cryptocomFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ gateioFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ htxFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ krakenFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ kucoinFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ mexcFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
{ okxFactory.CreateTradeTracker(symbol, period: TimeSpan.FromMinutes(5)) },
};
await Task.WhenAll(_trackers.Select(b => b.StartAsync()));
// Use a manual update timer so the page isn't refreshed too often
_timer = new Timer(500);
_timer.Start();
_timer.Elapsed += (o, e) => InvokeAsync(StateHasChanged);
}
private string[] GetInfo(ITradeTracker tracker)
{
var secondLastMinute = tracker.GetStats(DateTime.UtcNow.AddMinutes(-2), DateTime.UtcNow.AddMinutes(-1));
var lastMinute = tracker.GetStats(DateTime.UtcNow.AddMinutes(-1));
var compare = lastMinute.CompareTo(secondLastMinute);
return [
$"{tracker.SymbolName} | {tracker.Status} - Synced from {tracker.SyncedFrom}",
$"Total trades: {tracker.Count}",
$"Trades last minute: {lastMinute.TradeCount}, minute before: {secondLastMinute.TradeCount}",
$"Average weighted price: {lastMinute.VolumeWeightedAveragePrice}, minute before: {secondLastMinute.VolumeWeightedAveragePrice}, dif: {compare.VolumeWeightedAveragePriceDif.PercentageDifference}%"
];
}
public void Dispose()
{
_timer.Stop();
_timer.Dispose();
foreach (var tracker in _trackers.Where(b => b.Status != CryptoExchange.Net.Objects.SyncStatus.Disconnected))
// It's not necessary to wait for this
_ = tracker.StopAsync();
}
}

View File

@ -27,6 +27,11 @@
Order books
</NavLink>
</li>
<li class="nav-item px-3">
<NavLink class="nav-link" href="Trackers">
Trackers
</NavLink>
</li>
</ul>
</div>

View File

@ -6,20 +6,20 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Binance.Net" Version="10.7.0" />
<PackageReference Include="Bitfinex.Net" Version="7.8.2" />
<PackageReference Include="BitMart.Net" Version="1.4.0" />
<PackageReference Include="Bybit.Net" Version="3.14.3" />
<PackageReference Include="CoinEx.Net" Version="7.7.2" />
<PackageReference Include="CryptoCom.Net" Version="1.0.1" />
<PackageReference Include="GateIo.Net" Version="1.9.0" />
<PackageReference Include="JK.Bitget.Net" Version="1.10.4" />
<PackageReference Include="JK.Mexc.Net" Version="1.9.0" />
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
<PackageReference Include="JKorf.Coinbase.Net" Version="1.1.2" />
<PackageReference Include="JKorf.HTX.Net" Version="6.2.0" />
<PackageReference Include="KrakenExchange.Net" Version="5.0.2" />
<PackageReference Include="Kucoin.Net" Version="5.16.0" />
<PackageReference Include="Binance.Net" Version="10.8.0" />
<PackageReference Include="Bitfinex.Net" Version="7.9.0" />
<PackageReference Include="BitMart.Net" Version="1.5.0" />
<PackageReference Include="Bybit.Net" Version="3.15.0" />
<PackageReference Include="CoinEx.Net" Version="7.8.0" />
<PackageReference Include="CryptoCom.Net" Version="1.1.0" />
<PackageReference Include="GateIo.Net" Version="1.10.0" />
<PackageReference Include="JK.Bitget.Net" Version="1.11.0" />
<PackageReference Include="JK.Mexc.Net" Version="1.10.0" />
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
<PackageReference Include="JKorf.Coinbase.Net" Version="1.2.0" />
<PackageReference Include="JKorf.HTX.Net" Version="6.3.0" />
<PackageReference Include="KrakenExchange.Net" Version="5.1.0" />
<PackageReference Include="Kucoin.Net" Version="5.17.0" />
</ItemGroup>
</Project>

View File

@ -8,9 +8,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Binance.Net" Version="10.7.0" />
<PackageReference Include="BitMart.Net" Version="1.4.0" />
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
<PackageReference Include="Binance.Net" Version="10.8.0" />
<PackageReference Include="BitMart.Net" Version="1.5.0" />
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
</ItemGroup>
</Project>