diff --git a/src/Managing.Application/Trading/ClosePositionCommandHandler.cs b/src/Managing.Application/Trading/ClosePositionCommandHandler.cs index a030db3..e38b0f2 100644 --- a/src/Managing.Application/Trading/ClosePositionCommandHandler.cs +++ b/src/Managing.Application/Trading/ClosePositionCommandHandler.cs @@ -4,8 +4,6 @@ using Managing.Application.Trading.Commands; using Managing.Domain.Shared.Helpers; using Managing.Domain.Trades; using Microsoft.Extensions.Logging; -using System; -using System.Threading.Tasks; using static Managing.Common.Enums; namespace Managing.Application.Trading; @@ -36,19 +34,24 @@ public class ClosePositionCommandHandler( : exchangeService.GetPrice(account, request.Position.Ticker, DateTime.UtcNow); // Check if position still open - var p = (await exchangeService.GetBrokerPositions(account)) - .FirstOrDefault(x => x.Ticker == request.Position.Ticker); - - if (p == null) + if (!isForPaperTrading) { - request.Position.Status = PositionStatus.Finished; - request.Position.ProfitAndLoss = - TradingBox.GetProfitAndLoss(request.Position, request.Position.Open.Quantity, lastPrice, - request.Position.Open.Leverage); - tradingService.UpdatePosition(request.Position); - return request.Position; + var p = (await exchangeService.GetBrokerPositions(account)) + .FirstOrDefault(x => x.Ticker == request.Position.Ticker); + + // Position not available on the broker, so be sure to update the status + if (p == null) + { + request.Position.Status = PositionStatus.Finished; + request.Position.ProfitAndLoss = + TradingBox.GetProfitAndLoss(request.Position, request.Position.Open.Quantity, lastPrice, + request.Position.Open.Leverage); + tradingService.UpdatePosition(request.Position); + return request.Position; + } } + var closeRequestedOrders = isForPaperTrading || (await exchangeService.CancelOrder(account, request.Position.Ticker));