diff --git a/src/Predictalytics.Infrastructure/Services/CopytradingEstimator.cs b/src/Predictalytics.Infrastructure/Services/CopytradingEstimator.cs index 0b78d9b..19c675d 100644 --- a/src/Predictalytics.Infrastructure/Services/CopytradingEstimator.cs +++ b/src/Predictalytics.Infrastructure/Services/CopytradingEstimator.cs @@ -201,24 +201,31 @@ public class CopytradingEstimator : ICopytradingEstimator int limit = 1000; int offset = 0; - while (true) + while (offset <= 4000) { - var page = await _polymarketClient.GetMarketTradesAsync(traderTrade.MarketId, limit, offset, ct); - if (page.Count == 0) break; - - var filtered = page.Where(p => - !string.Equals(p.ProxyWallet, traderTrade.Trader.PlatformUserId, StringComparison.OrdinalIgnoreCase) && - !string.Equals(p.User, traderTrade.Trader.PlatformUserId, StringComparison.OrdinalIgnoreCase)) - .ToList(); - - tape.AddRange(filtered); - - var oldestInPage = page.Last().Timestamp; - if (oldestInPage < tradeUnix) + try { - break; // We have gone back far enough + var page = await _polymarketClient.GetMarketTradesAsync(traderTrade.MarketId, limit, offset, ct); + if (page.Count == 0) break; + + var filtered = page.Where(p => + !string.Equals(p.ProxyWallet, traderTrade.Trader.PlatformUserId, StringComparison.OrdinalIgnoreCase) && + !string.Equals(p.User, traderTrade.Trader.PlatformUserId, StringComparison.OrdinalIgnoreCase)) + .ToList(); + + tape.AddRange(filtered); + + var oldestInPage = page.Last().Timestamp; + if (oldestInPage < tradeUnix) + { + break; // We have gone back far enough + } + offset += limit; + } + catch (Exception) + { + break; // Offset exceeded limit or API error } - offset += limit; } var relevantTrades = tape @@ -316,19 +323,26 @@ public class CopytradingEstimator : ICopytradingEstimator int limit = 1000; int offset = 0; - while (true) + while (offset <= 4000) { - var page = await _polymarketClient.GetMarketTradesAsync(tradeEvent.MarketId, limit, offset, ct); - if (page.Count == 0) break; - - tape.AddRange(page); - - var oldestInPage = page.Last().Timestamp; - if (oldestInPage < startUnix) + try { - break; + var page = await _polymarketClient.GetMarketTradesAsync(tradeEvent.MarketId, limit, offset, ct); + if (page.Count == 0) break; + + tape.AddRange(page); + + var oldestInPage = page.Last().Timestamp; + if (oldestInPage < startUnix) + { + break; + } + offset += limit; + } + catch (Exception) + { + break; // Offset exceeded limit or API error } - offset += limit; } var relevantTrades = tape