mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-07 16:06:15 +00:00
Updated examples, added trackers example
This commit is contained in:
parent
b1b05c8f6b
commit
be75449e4a
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
@ -6,10 +6,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0"></PackageReference>
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1"></PackageReference>
|
||||||
<PackageReference Include="Moq" Version="4.20.70" />
|
<PackageReference Include="Moq" Version="4.20.72" />
|
||||||
<PackageReference Include="NUnit" Version="4.1.0"></PackageReference>
|
<PackageReference Include="NUnit" Version="4.2.2"></PackageReference>
|
||||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"></PackageReference>
|
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0"></PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -5,22 +5,22 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Binance.Net" Version="10.7.0" />
|
<PackageReference Include="Binance.Net" Version="10.8.0" />
|
||||||
<PackageReference Include="Bitfinex.Net" Version="7.8.2" />
|
<PackageReference Include="Bitfinex.Net" Version="7.9.0" />
|
||||||
<PackageReference Include="BitMart.Net" Version="1.4.0" />
|
<PackageReference Include="BitMart.Net" Version="1.5.0" />
|
||||||
<PackageReference Include="Bybit.Net" Version="3.14.3" />
|
<PackageReference Include="Bybit.Net" Version="3.15.0" />
|
||||||
<PackageReference Include="CoinEx.Net" Version="7.7.2" />
|
<PackageReference Include="CoinEx.Net" Version="7.8.0" />
|
||||||
<PackageReference Include="CryptoCom.Net" Version="1.0.1" />
|
<PackageReference Include="CryptoCom.Net" Version="1.1.0" />
|
||||||
<PackageReference Include="GateIo.Net" Version="1.9.0" />
|
<PackageReference Include="GateIo.Net" Version="1.10.0" />
|
||||||
<PackageReference Include="JK.BingX.Net" Version="1.11.2" />
|
<PackageReference Include="JK.BingX.Net" Version="1.12.0" />
|
||||||
<PackageReference Include="JK.Bitget.Net" Version="1.10.4" />
|
<PackageReference Include="JK.Bitget.Net" Version="1.11.0" />
|
||||||
<PackageReference Include="JK.Mexc.Net" Version="1.9.0" />
|
<PackageReference Include="JK.Mexc.Net" Version="1.10.0" />
|
||||||
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
|
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
|
||||||
<PackageReference Include="JKorf.Coinbase.Net" Version="1.1.2" />
|
<PackageReference Include="JKorf.Coinbase.Net" Version="1.2.0" />
|
||||||
<PackageReference Include="JKorf.HTX.Net" Version="6.2.0" />
|
<PackageReference Include="JKorf.HTX.Net" Version="6.3.0" />
|
||||||
<PackageReference Include="KrakenExchange.Net" Version="5.0.2" />
|
<PackageReference Include="KrakenExchange.Net" Version="5.1.0" />
|
||||||
<PackageReference Include="Kucoin.Net" Version="5.16.0" />
|
<PackageReference Include="Kucoin.Net" Version="5.17.0" />
|
||||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.2" />
|
<PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -74,7 +74,7 @@
|
|||||||
{ "Bybit", bybitFactory.Create("ETHBTC", Bybit.Net.Enums.Category.Spot) },
|
{ "Bybit", bybitFactory.Create("ETHBTC", Bybit.Net.Enums.Category.Spot) },
|
||||||
{ "Coinbase", coinbaseFactory.Create("ETH-BTC", null) },
|
{ "Coinbase", coinbaseFactory.Create("ETH-BTC", null) },
|
||||||
{ "CoinEx", coinExFactory.CreateSpot("ETHBTC") },
|
{ "CoinEx", coinExFactory.CreateSpot("ETHBTC") },
|
||||||
{ "CryptoCom", cryptocomFactory.CreateExchange("ETH_BTC") },
|
{ "CryptoCom", cryptocomFactory.Create("ETH_BTC") },
|
||||||
{ "GateIo", gateioFactory.CreateSpot("ETH_BTC") },
|
{ "GateIo", gateioFactory.CreateSpot("ETH_BTC") },
|
||||||
{ "HTX", htxFactory.CreateSpot("ethbtc") },
|
{ "HTX", htxFactory.CreateSpot("ethbtc") },
|
||||||
{ "Kraken", krakenFactory.CreateSpot("ETH/XBT") },
|
{ "Kraken", krakenFactory.CreateSpot("ETH/XBT") },
|
||||||
|
111
Examples/BlazorClient/Pages/Trackers.razor
Normal file
111
Examples/BlazorClient/Pages/Trackers.razor
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -27,6 +27,11 @@
|
|||||||
Order books
|
Order books
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link" href="Trackers">
|
||||||
|
Trackers
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -6,20 +6,20 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Binance.Net" Version="10.7.0" />
|
<PackageReference Include="Binance.Net" Version="10.8.0" />
|
||||||
<PackageReference Include="Bitfinex.Net" Version="7.8.2" />
|
<PackageReference Include="Bitfinex.Net" Version="7.9.0" />
|
||||||
<PackageReference Include="BitMart.Net" Version="1.4.0" />
|
<PackageReference Include="BitMart.Net" Version="1.5.0" />
|
||||||
<PackageReference Include="Bybit.Net" Version="3.14.3" />
|
<PackageReference Include="Bybit.Net" Version="3.15.0" />
|
||||||
<PackageReference Include="CoinEx.Net" Version="7.7.2" />
|
<PackageReference Include="CoinEx.Net" Version="7.8.0" />
|
||||||
<PackageReference Include="CryptoCom.Net" Version="1.0.1" />
|
<PackageReference Include="CryptoCom.Net" Version="1.1.0" />
|
||||||
<PackageReference Include="GateIo.Net" Version="1.9.0" />
|
<PackageReference Include="GateIo.Net" Version="1.10.0" />
|
||||||
<PackageReference Include="JK.Bitget.Net" Version="1.10.4" />
|
<PackageReference Include="JK.Bitget.Net" Version="1.11.0" />
|
||||||
<PackageReference Include="JK.Mexc.Net" Version="1.9.0" />
|
<PackageReference Include="JK.Mexc.Net" Version="1.10.0" />
|
||||||
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
|
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
|
||||||
<PackageReference Include="JKorf.Coinbase.Net" Version="1.1.2" />
|
<PackageReference Include="JKorf.Coinbase.Net" Version="1.2.0" />
|
||||||
<PackageReference Include="JKorf.HTX.Net" Version="6.2.0" />
|
<PackageReference Include="JKorf.HTX.Net" Version="6.3.0" />
|
||||||
<PackageReference Include="KrakenExchange.Net" Version="5.0.2" />
|
<PackageReference Include="KrakenExchange.Net" Version="5.1.0" />
|
||||||
<PackageReference Include="Kucoin.Net" Version="5.16.0" />
|
<PackageReference Include="Kucoin.Net" Version="5.17.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Binance.Net" Version="10.7.0" />
|
<PackageReference Include="Binance.Net" Version="10.8.0" />
|
||||||
<PackageReference Include="BitMart.Net" Version="1.4.0" />
|
<PackageReference Include="BitMart.Net" Version="1.5.0" />
|
||||||
<PackageReference Include="JK.OKX.Net" Version="2.6.0" />
|
<PackageReference Include="JK.OKX.Net" Version="2.7.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user