1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2026-02-16 14:13:46 +00:00
This commit is contained in:
JKorf 2026-01-26 08:42:40 +01:00
parent 0ad94cce5a
commit a750075022
2 changed files with 24 additions and 15 deletions

View File

@ -48,6 +48,7 @@ namespace CryptoExchange.Net.Trackers.UserData
private TimeSpan _pollIntervalDisconnected; private TimeSpan _pollIntervalDisconnected;
private bool _pollAtStart; private bool _pollAtStart;
private bool _onlyTrackProvidedSymbols; private bool _onlyTrackProvidedSymbols;
private bool _trackTrades = true;
// Subscriptions // Subscriptions
private UpdateSubscription? _balanceSubscription; private UpdateSubscription? _balanceSubscription;
@ -106,6 +107,7 @@ namespace CryptoExchange.Net.Trackers.UserData
_symbols = config.Symbols?.ToList() ?? []; _symbols = config.Symbols?.ToList() ?? [];
_onlyTrackProvidedSymbols = config.OnlyTrackProvidedSymbols; _onlyTrackProvidedSymbols = config.OnlyTrackProvidedSymbols;
_pollAtStart = config.PollAtStart; _pollAtStart = config.PollAtStart;
_trackTrades = config.TrackTrades;
UserIdentifier = userIdentifier; UserIdentifier = userIdentifier;
} }
@ -160,7 +162,7 @@ namespace CryptoExchange.Net.Trackers.UserData
_orderSubscription = subOrderResult.Data; _orderSubscription = subOrderResult.Data;
subOrderResult.Data.SubscriptionStatusChanged += OrderSubscriptionStatusChanged; subOrderResult.Data.SubscriptionStatusChanged += OrderSubscriptionStatusChanged;
if (_userTradeSocketClient != null) if (_userTradeSocketClient != null && _trackTrades)
{ {
var subTradeResult = await _userTradeSocketClient.SubscribeToUserTradeUpdatesAsync(new SubscribeUserTradeRequest(listenKey), x => HandleTradeUpdate(UpdateSource.Push, x.Data), ct: _cts.Token).ConfigureAwait(false); var subTradeResult = await _userTradeSocketClient.SubscribeToUserTradeUpdatesAsync(new SubscribeUserTradeRequest(listenKey), x => HandleTradeUpdate(UpdateSource.Push, x.Data), ct: _cts.Token).ConfigureAwait(false);
if (!subOrderResult) if (!subOrderResult)
@ -604,22 +606,25 @@ namespace CryptoExchange.Net.Trackers.UserData
HandleOrderUpdate(UpdateSource.Poll, relevantOrders); HandleOrderUpdate(UpdateSource.Poll, relevantOrders);
} }
var fromTimeTrades = _lastDataTimeTradesBeforeDisconnect ?? _lastPollTimeTrades ?? _startTime; if (_trackTrades)
var tradesResult = await _spotOrderRestClient.GetSpotUserTradesAsync(new GetUserTradesRequest(symbol, startTime: fromTimeTrades)).ConfigureAwait(false);
if (!tradesResult.Success)
{ {
// .. ? var fromTimeTrades = _lastDataTimeTradesBeforeDisconnect ?? _lastPollTimeTrades ?? _startTime;
anyError = true; var tradesResult = await _spotOrderRestClient.GetSpotUserTradesAsync(new GetUserTradesRequest(symbol, startTime: fromTimeTrades)).ConfigureAwait(false);
} if (!tradesResult.Success)
else {
{ // .. ?
_lastDataTimeTradesBeforeDisconnect = null; anyError = true;
_lastPollTimeTrades = updatedPollTime; }
else
{
_lastDataTimeTradesBeforeDisconnect = null;
_lastPollTimeTrades = updatedPollTime;
// Filter trades to only include where timestamp is after the start time OR it's part of an order we're tracking // Filter trades to only include where timestamp is after the start time OR it's part of an order we're tracking
var relevantTrades = tradesResult.Data.Where(x => x.Timestamp >= _startTime || _orderStore.ContainsKey(x.OrderId)).ToArray(); var relevantTrades = tradesResult.Data.Where(x => x.Timestamp >= _startTime || _orderStore.ContainsKey(x.OrderId)).ToArray();
if (relevantTrades.Length > 0) if (relevantTrades.Length > 0)
HandleTradeUpdate(UpdateSource.Poll, tradesResult.Data); HandleTradeUpdate(UpdateSource.Poll, tradesResult.Data);
}
} }
} }

View File

@ -30,5 +30,9 @@ namespace CryptoExchange.Net.Trackers.UserData
/// Whether to poll for data initially when starting the tracker. /// Whether to poll for data initially when starting the tracker.
/// </summary> /// </summary>
public bool PollAtStart { get; set; } = true; public bool PollAtStart { get; set; } = true;
/// <summary>
/// Whether to track order trades, can lead to increased requests when polling
/// </summary>
public bool TrackTrades { get; set; } = true;
} }
} }