Update the position count and initiator
This commit is contained in:
@@ -2,8 +2,10 @@
|
||||
using Managing.Application.Abstractions.Grains;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Application.Trading.Commands;
|
||||
using Managing.Core;
|
||||
using Managing.Domain.Shared.Helpers;
|
||||
using Managing.Domain.Trades;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
@@ -13,7 +15,7 @@ public class ClosePositionCommandHandler(
|
||||
IExchangeService exchangeService,
|
||||
IAccountService accountService,
|
||||
ITradingService tradingService,
|
||||
IGrainFactory? grainFactory = null,
|
||||
IServiceScopeFactory scopeFactory,
|
||||
ILogger<ClosePositionCommandHandler> logger = null)
|
||||
: ICommandHandler<ClosePositionCommand, Position>
|
||||
{
|
||||
@@ -70,29 +72,35 @@ public class ClosePositionCommandHandler(
|
||||
|
||||
if (!request.IsForBacktest)
|
||||
await tradingService.UpdatePositionAsync(request.Position);
|
||||
|
||||
|
||||
// Notify platform summary about the closed position
|
||||
try
|
||||
{
|
||||
var platformGrain = grainFactory?.GetGrain<IPlatformSummaryGrain>("platform-summary");
|
||||
if (platformGrain != null)
|
||||
await ServiceScopeHelpers.WithScopedService<IGrainFactory>(scopeFactory, async grainFactory =>
|
||||
{
|
||||
var positionClosedEvent = new PositionClosedEvent
|
||||
var platformGrain = grainFactory.GetGrain<IPlatformSummaryGrain>("platform-summary");
|
||||
if (platformGrain != null)
|
||||
{
|
||||
PositionId = request.Position.Identifier,
|
||||
Ticker = request.Position.Ticker,
|
||||
RealizedPnL = request.Position.ProfitAndLoss?.Realized ?? 0,
|
||||
Volume = closedPosition.Quantity * lastPrice * request.Position.Open.Leverage,
|
||||
InitialVolume = request.Position.Open.Quantity * request.Position.Open.Price * request.Position.Open.Leverage
|
||||
};
|
||||
|
||||
await platformGrain.OnPositionClosedAsync(positionClosedEvent);
|
||||
}
|
||||
var positionClosedEvent = new PositionClosedEvent
|
||||
{
|
||||
PositionId = request.Position.Identifier,
|
||||
Ticker = request.Position.Ticker,
|
||||
RealizedPnL = request.Position.ProfitAndLoss?.Realized ?? 0,
|
||||
Volume = closedPosition.Quantity * lastPrice * request.Position.Open.Leverage,
|
||||
InitialVolume = request.Position.Open.Quantity * request.Position.Open.Price *
|
||||
request.Position.Open.Leverage
|
||||
};
|
||||
|
||||
await platformGrain.OnPositionClosedAsync(positionClosedEvent);
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
logger?.LogError(ex, "Failed to notify platform summary about position closure for position {PositionId}", request.Position.Identifier);
|
||||
logger?.LogError(ex,
|
||||
"Failed to notify platform summary about position closure for position {PositionId}",
|
||||
request.Position.Identifier);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ namespace Managing.Application.Trading.Handlers
|
||||
position.SignalIdentifier = request.SignalIdentifier;
|
||||
}
|
||||
|
||||
position.InitiatorIdentifier = request.InitiatorIdentifier;
|
||||
|
||||
// Always use BotTradingBalance directly as the balance to risk
|
||||
decimal balanceToRisk = request.AmountToTrade;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user