diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/BalanceTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/BalanceTracker.cs index 43242231..dbfd7186 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/BalanceTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/BalanceTracker.cs @@ -28,10 +28,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers SharedAccountType accountType, TrackerItemConfig config, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Balances, restClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Balances, restClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _restClient = restClient; _socketClient = socketClient; diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesOrderTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesOrderTracker.cs index 201f540e..889b5233 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesOrderTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesOrderTracker.cs @@ -24,6 +24,7 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers private readonly Dictionary _openOrderNotReturnedTimes = new(); private readonly TimeSpan _pollOverlapPeriod = TimeSpan.FromSeconds(3); + private bool _openOrderWarningDone = false; internal event Func? OnTradeUpdate; /// @@ -39,10 +40,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers IEnumerable symbols, bool onlyTrackProvidedSymbols, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Orders, openRestClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Orders, openRestClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _openOrdersClient = openRestClient; _closedOrdersClient = closedRestClient; @@ -234,7 +236,14 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers } else { - foreach (var symbol in _symbolTracker.GetTrackedSymbols()) + var trackedSymbols = _symbolTracker.GetTrackedSymbols(); + if (!_openOrderWarningDone && trackedSymbols.Count() == 0) + { + _openOrderWarningDone = true; + _logger.LogDebug("No tracked symbols specified while symbol is required to retrieve open orders. Tracked symbols should be updated before orders may be returned"); + } + + foreach (var symbol in trackedSymbols) { var openOrdersResult = await _openOrdersClient.GetOpenFuturesOrdersAsync(new GetOpenOrdersRequest(symbol, exchangeParameters: _exchangeParameters)).ConfigureAwait(false); if (!openOrdersResult.Success) diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesUserTradeTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesUserTradeTracker.cs index e657ee42..05bc3bed 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesUserTradeTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/FuturesUserTradeTracker.cs @@ -34,10 +34,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers IEnumerable symbols, bool onlyTrackProvidedSymbols, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Trades, restClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Trades, restClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _restClient = restClient; _socketClient = socketClient; diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/PositionTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/PositionTracker.cs index 5bcac4d0..0903d387 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/PositionTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/PositionTracker.cs @@ -37,10 +37,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers bool onlyTrackProvidedSymbols, bool websocketPositionUpdatesAreFullSnapshots, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Positions, restClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Positions, restClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _restClient = restClient; _socketClient = socketClient; diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotOrderTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotOrderTracker.cs index 76eb7888..ee22fe76 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotOrderTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotOrderTracker.cs @@ -23,6 +23,7 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers private readonly bool _timeFilterSupportedClosedOrders; private readonly Dictionary _openOrderNotReturnedTimes = new(); private readonly TimeSpan _pollOverlapPeriod = TimeSpan.FromSeconds(3); + private bool _openOrderWarningDone = false; internal event Func? OnTradeUpdate; @@ -39,10 +40,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers IEnumerable symbols, bool onlyTrackProvidedSymbols, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Orders, openOrderClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Orders, openOrderClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _openOrderClient = openOrderClient; _closedOrderClient = closedOrderClient; @@ -244,7 +246,14 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers } else { - foreach (var symbol in _symbolTracker.GetTrackedSymbols()) + var trackedSymbols = _symbolTracker.GetTrackedSymbols(); + if (!_openOrderWarningDone && trackedSymbols.Count() == 0) + { + _openOrderWarningDone = true; + _logger.LogDebug("No tracked symbols specified while symbol is required to retrieve open orders. Tracked symbols should be updated before orders may be returned"); + } + + foreach (var symbol in trackedSymbols) { var openOrdersResult = await _openOrderClient.GetOpenSpotOrdersAsync(new GetOpenOrdersRequest(symbol, exchangeParameters: _exchangeParameters)).ConfigureAwait(false); if (!openOrdersResult.Success) diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotUserTradeTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotUserTradeTracker.cs index b830aa60..5d5337b5 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotUserTradeTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/SpotUserTradeTracker.cs @@ -34,10 +34,11 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers IEnumerable symbols, bool onlyTrackProvidedSymbols, ExchangeParameters? exchangeParameters = null - ) : base(logger, symbolTracker, UserDataType.Trades, restClient.Exchange, config) + ) : base(logger, symbolTracker, UserDataType.Trades, restClient.Exchange) { - if (_socketClient == null) + if (socketClient == null) config = config with { PollIntervalConnected = config.PollIntervalDisconnected }; + SetConfig(config); _restClient = restClient; _socketClient = socketClient; diff --git a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/UserDataItemTracker.cs b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/UserDataItemTracker.cs index b9db2fc4..4b1c90f1 100644 --- a/CryptoExchange.Net/Trackers/UserData/ItemTrackers/UserDataItemTracker.cs +++ b/CryptoExchange.Net/Trackers/UserData/ItemTrackers/UserDataItemTracker.cs @@ -242,15 +242,21 @@ namespace CryptoExchange.Net.Trackers.UserData.ItemTrackers ILogger logger, UserDataSymbolTracker symbolTracker, UserDataType dataType, - string exchange, - TrackerItemConfig config) : base(logger, dataType, exchange) + string exchange) : base(logger, dataType, exchange) + { + _isSymbolModel = typeof(T).IsSubclassOf(typeof(SharedSymbolModel)); + _symbolTracker = symbolTracker; + } + + /// + /// Set the tracker item config + /// + protected void SetConfig(TrackerItemConfig config) { _pollIntervalDisconnected = config.PollIntervalDisconnected; _pollIntervalConnected = config.PollIntervalConnected; _pollAtStart = config.PollAtStart; _retentionTime = config is TrackerTimedItemConfig timeConfig ? timeConfig.RetentionTime : TimeSpan.MaxValue; - _isSymbolModel = typeof(T).IsSubclassOf(typeof(SharedSymbolModel)); - _symbolTracker = symbolTracker; } ///