diff --git a/src/Managing.Application/Bots/TradingBot.cs b/src/Managing.Application/Bots/TradingBot.cs index ea8792d..ba34312 100644 --- a/src/Managing.Application/Bots/TradingBot.cs +++ b/src/Managing.Application/Bots/TradingBot.cs @@ -339,7 +339,6 @@ public class TradingBot : Bot, ITradingBot private async Task ManagePositions() { - // Update positions - iterate through positions instead of signals for better synchronization foreach (var position in Positions.Where(p => !p.IsFinished())) { var signalForPosition = Signals.FirstOrDefault(s => s.Identifier == position.SignalIdentifier); @@ -358,7 +357,7 @@ public class TradingBot : Bot, ITradingBot } // Ensure signal status is correctly set to PositionOpen if position is not finished - if (signalForPosition.Status != SignalStatus.PositionOpen) + if (signalForPosition.Status != SignalStatus.PositionOpen && position.Status != PositionStatus.Finished) { await LogInformation( $"Updating signal {signalForPosition.Identifier} status from {signalForPosition.Status} to PositionOpen"); @@ -446,12 +445,12 @@ public class TradingBot : Bot, ITradingBot 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); @@ -461,7 +460,7 @@ public class TradingBot : Bot, ITradingBot { await LogWarning($"Failed to cancel orders: {ex.Message}"); } - + await SetPositionStatus(signal.Identifier, PositionStatus.Canceled); SetSignalStatus(signal.Identifier, SignalStatus.Expired); return;