1
0
mirror of https://github.com/JKorf/CryptoExchange.Net.git synced 2026-08-11 08:22:53 +00:00

Added ExchangeParameters parameter to KlineTracker, TradeTracker and ITrackerFactory methods

This commit is contained in:
Jkorf
2026-07-08 12:00:26 +02:00
parent c4a8b02054
commit d9850da282
3 changed files with 17 additions and 9 deletions
@@ -24,8 +24,9 @@ namespace CryptoExchange.Net.Interfaces
/// <param name="interval">Kline interval</param> /// <param name="interval">Kline interval</param>
/// <param name="limit">The max amount of klines to retain</param> /// <param name="limit">The max amount of klines to retain</param>
/// <param name="period">The max period the data should be retained</param> /// <param name="period">The max period the data should be retained</param>
/// <param name="exchangeParameters">Exchange parameters</param>
/// <returns></returns> /// <returns></returns>
IKlineTracker CreateKlineTracker(SharedSymbol symbol, SharedKlineInterval interval, int? limit = null, TimeSpan? period = null); IKlineTracker CreateKlineTracker(SharedSymbol symbol, SharedKlineInterval interval, int? limit = null, TimeSpan? period = null, ExchangeParameters? exchangeParameters = null);
/// <summary> /// <summary>
/// Whether the factory supports creating a TradeTracker instance for this symbol /// Whether the factory supports creating a TradeTracker instance for this symbol
@@ -39,7 +40,8 @@ namespace CryptoExchange.Net.Interfaces
/// <param name="symbol">The symbol</param> /// <param name="symbol">The symbol</param>
/// <param name="limit">The max amount of trades to retain</param> /// <param name="limit">The max amount of trades to retain</param>
/// <param name="period">The max period the data should be retained</param> /// <param name="period">The max period the data should be retained</param>
/// <param name="exchangeParameters">Exchange parameters</param>
/// <returns></returns> /// <returns></returns>
ITradeTracker CreateTradeTracker(SharedSymbol symbol, int? limit = null, TimeSpan? period = null); ITradeTracker CreateTradeTracker(SharedSymbol symbol, int? limit = null, TimeSpan? period = null, ExchangeParameters? exchangeParameters = null);
} }
} }
@@ -19,6 +19,7 @@ namespace CryptoExchange.Net.Trackers.Klines
private readonly IKlineRestClient _restClient; private readonly IKlineRestClient _restClient;
private SyncStatus _status; private SyncStatus _status;
private bool _startWithSnapshot; private bool _startWithSnapshot;
private ExchangeParameters? _exchangeParameters;
/// <summary> /// <summary>
/// The internal data structure /// The internal data structure
@@ -157,9 +158,11 @@ namespace CryptoExchange.Net.Trackers.Klines
SharedSymbol symbol, SharedSymbol symbol,
SharedKlineInterval interval, SharedKlineInterval interval,
int? limit = null, int? limit = null,
TimeSpan? period = null) TimeSpan? period = null,
ExchangeParameters? exchangeParameters = null)
{ {
_logger = logger ?? new NullLogger<KlineTracker>(); _logger = logger ?? new NullLogger<KlineTracker>();
_exchangeParameters = exchangeParameters;
Symbol = symbol; Symbol = symbol;
SymbolName = socketClient.FormatSymbol(symbol.BaseAsset, symbol.QuoteAsset, symbol.TradingMode, symbol.DeliverTime); SymbolName = socketClient.FormatSymbol(symbol.BaseAsset, symbol.QuoteAsset, symbol.TradingMode, symbol.DeliverTime);
Exchange = restClient.Exchange; Exchange = restClient.Exchange;
@@ -180,7 +183,7 @@ namespace CryptoExchange.Net.Trackers.Klines
Status = SyncStatus.Syncing; Status = SyncStatus.Syncing;
_logger.KlineTrackerStarting(SymbolName); _logger.KlineTrackerStarting(SymbolName);
var subResult = await _socketClient.SubscribeToKlineUpdatesAsync(new SubscribeKlineRequest(Symbol, Interval), var subResult = await _socketClient.SubscribeToKlineUpdatesAsync(new SubscribeKlineRequest(Symbol, Interval, exchangeParameters: _exchangeParameters),
update => update =>
{ {
AddOrUpdate(update.Data); AddOrUpdate(update.Data);
@@ -237,7 +240,7 @@ namespace CryptoExchange.Net.Trackers.Klines
var limit = Math.Min(_restClient.GetKlinesOptions.MaxLimit, Limit ?? 100); var limit = Math.Min(_restClient.GetKlinesOptions.MaxLimit, Limit ?? 100);
var request = new GetKlinesRequest(Symbol, Interval, startTime, DateTime.UtcNow, limit: limit); var request = new GetKlinesRequest(Symbol, Interval, startTime, DateTime.UtcNow, limit: limit, exchangeParameters: _exchangeParameters);
var data = new List<SharedKline>(); var data = new List<SharedKline>();
await foreach (var result in ExchangeHelpers.ExecutePages(_restClient.GetKlinesAsync, request).ConfigureAwait(false)) await foreach (var result in ExchangeHelpers.ExecutePages(_restClient.GetKlinesAsync, request).ConfigureAwait(false))
{ {
@@ -21,6 +21,7 @@ namespace CryptoExchange.Net.Trackers.Trades
private SyncStatus _status; private SyncStatus _status;
private long _snapshotId; private long _snapshotId;
private bool _startWithSnapshot; private bool _startWithSnapshot;
private ExchangeParameters? _exchangeParameters;
/// <summary> /// <summary>
/// The internal data structure /// The internal data structure
@@ -154,12 +155,14 @@ namespace CryptoExchange.Net.Trackers.Trades
ITradeSocketClient socketClient, ITradeSocketClient socketClient,
SharedSymbol symbol, SharedSymbol symbol,
int? limit = null, int? limit = null,
TimeSpan? period = null) TimeSpan? period = null,
ExchangeParameters? exchangeParameters = null)
{ {
_logger = logger ?? new NullLogger<TradeTracker>(); _logger = logger ?? new NullLogger<TradeTracker>();
_recentRestClient = recentRestClient; _recentRestClient = recentRestClient;
_historyRestClient = historyRestClient; _historyRestClient = historyRestClient;
_socketClient = socketClient; _socketClient = socketClient;
_exchangeParameters = exchangeParameters;
Exchange = socketClient.Exchange; Exchange = socketClient.Exchange;
Symbol = symbol; Symbol = symbol;
SymbolName = socketClient.FormatSymbol(symbol.BaseAsset, symbol.QuoteAsset, symbol.TradingMode, symbol.DeliverTime); SymbolName = socketClient.FormatSymbol(symbol.BaseAsset, symbol.QuoteAsset, symbol.TradingMode, symbol.DeliverTime);
@@ -203,7 +206,7 @@ namespace CryptoExchange.Net.Trackers.Trades
_startWithSnapshot = startWithSnapshot; _startWithSnapshot = startWithSnapshot;
Status = SyncStatus.Syncing; Status = SyncStatus.Syncing;
_logger.TradeTrackerStarting(SymbolName); _logger.TradeTrackerStarting(SymbolName);
var subResult = await _socketClient.SubscribeToTradeUpdatesAsync(new SubscribeTradeRequest(Symbol), var subResult = await _socketClient.SubscribeToTradeUpdatesAsync(new SubscribeTradeRequest(Symbol, exchangeParameters: _exchangeParameters),
update => update =>
{ {
AddData(update.Data); AddData(update.Data);
@@ -257,7 +260,7 @@ namespace CryptoExchange.Net.Trackers.Trades
if (_historyRestClient != null) if (_historyRestClient != null)
{ {
var startTime = Period == null ? DateTime.UtcNow.AddMinutes(-5) : DateTime.UtcNow.Add(-Period.Value); var startTime = Period == null ? DateTime.UtcNow.AddMinutes(-5) : DateTime.UtcNow.Add(-Period.Value);
var request = new GetTradeHistoryRequest(Symbol, startTime, DateTime.UtcNow); var request = new GetTradeHistoryRequest(Symbol, startTime, DateTime.UtcNow, exchangeParameters: _exchangeParameters);
var data = new List<SharedTrade>(); var data = new List<SharedTrade>();
await foreach (var result in ExchangeHelpers.ExecutePages(_historyRestClient.GetTradeHistoryAsync, request).ConfigureAwait(false)) await foreach (var result in ExchangeHelpers.ExecutePages(_historyRestClient.GetTradeHistoryAsync, request).ConfigureAwait(false))
{ {
@@ -278,7 +281,7 @@ namespace CryptoExchange.Net.Trackers.Trades
if (Limit.HasValue) if (Limit.HasValue)
limit = Math.Min(_recentRestClient.GetRecentTradesOptions.MaxLimit, Limit.Value); limit = Math.Min(_recentRestClient.GetRecentTradesOptions.MaxLimit, Limit.Value);
var snapshot = await _recentRestClient.GetRecentTradesAsync(new GetRecentTradesRequest(Symbol, limit)).ConfigureAwait(false); var snapshot = await _recentRestClient.GetRecentTradesAsync(new GetRecentTradesRequest(Symbol, limit, exchangeParameters: _exchangeParameters)).ConfigureAwait(false);
if (!snapshot.Success) if (!snapshot.Success)
{ {
return CallResult.Fail(snapshot.Error); return CallResult.Fail(snapshot.Error);