diff --git a/.DS_Store b/.DS_Store index 61f0536..de40e00 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store index 96f9a5f..32998d4 100644 Binary files a/src/.DS_Store and b/src/.DS_Store differ diff --git a/src/Managing.Application/Bots/TradingBot.cs b/src/Managing.Application/Bots/TradingBot.cs index 04704b8..ea8792d 100644 --- a/src/Managing.Application/Bots/TradingBot.cs +++ b/src/Managing.Application/Bots/TradingBot.cs @@ -440,8 +440,44 @@ public class TradingBot : Bot, ITradingBot var orders = await ExchangeService.GetOpenOrders(Account, Config.Ticker); if (orders.Any()) { - await LogInformation( - $"Cannot update Position. Position is still waiting for opening. There is {orders.Count()} open orders."); + // If there are 3 or more orders and position is still not filled, check if enough time has passed + if (orders.Count() >= 3) + { + var currentTime = Config.IsForBacktest ? OptimizedCandles.Last().Date : DateTime.UtcNow; + var timeSinceRequest = currentTime - positionForSignal.Open.Date; + var waitTimeMinutes = 10; + + if (timeSinceRequest.TotalMinutes >= waitTimeMinutes) + { + await LogWarning( + $"Too many open orders ({orders.Count()}) for unfilled position and {waitTimeMinutes} minutes have passed. Canceling all orders and marking position as canceled."); + + try + { + await ExchangeService.CancelOrder(Account, Config.Ticker); + await LogInformation($"Successfully canceled all orders for {Config.Ticker}"); + } + catch (Exception ex) + { + await LogWarning($"Failed to cancel orders: {ex.Message}"); + } + + await SetPositionStatus(signal.Identifier, PositionStatus.Canceled); + SetSignalStatus(signal.Identifier, SignalStatus.Expired); + return; + } + else + { + var remainingMinutes = waitTimeMinutes - timeSinceRequest.TotalMinutes; + await LogInformation( + $"Position has {orders.Count()} open orders but only {timeSinceRequest.TotalMinutes:F1} minutes have passed. Waiting {remainingMinutes:F1} more minutes before canceling."); + } + } + else + { + await LogInformation( + $"Cannot update Position. Position is still waiting for opening. There is {orders.Count()} open orders."); + } } else { diff --git a/src/Managing.Nswag/.DS_Store b/src/Managing.Nswag/.DS_Store index cebf5cc..635e842 100644 Binary files a/src/Managing.Nswag/.DS_Store and b/src/Managing.Nswag/.DS_Store differ diff --git a/src/Managing.Web3Proxy/.DS_Store b/src/Managing.Web3Proxy/.DS_Store index 5366bf7..3c3bb3a 100644 Binary files a/src/Managing.Web3Proxy/.DS_Store and b/src/Managing.Web3Proxy/.DS_Store differ