Fix close position

This commit is contained in:
2025-12-11 12:23:01 +07:00
parent 8ff9437400
commit 292a48d108
3 changed files with 21 additions and 22 deletions

View File

@@ -23,6 +23,7 @@ public class CloseSpotPositionCommandHandler(
{
// For backtest, use execution price directly
var lastPrice = request.ExecutionPrice.GetValueOrDefault();
var amountToSwap = request.Position.Open.Quantity;
// Calculate closing direction (opposite of opening direction)
var direction = request.Position.OriginDirection == TradeDirection.Long
@@ -47,12 +48,21 @@ public class CloseSpotPositionCommandHandler(
{
// For live trading, call SwapGmxTokensAsync
var account = await accountService.GetAccountById(request.AccountId);
var tokenBalance = await exchangeService.GetBalance(account, request.Position.Ticker);
if (tokenBalance == null || tokenBalance.Amount <= 0)
{
throw new InvalidOperationException(
$"No available balance to close spot position for {request.Position.Ticker}");
}
amountToSwap = tokenBalance.Amount;
swapResult = await tradingService.SwapGmxTokensAsync(
request.Position.User,
account.Name,
request.Position.Ticker,
Ticker.USDC,
(double)request.Position.Open.Quantity,
(double)amountToSwap,
"market",
null,
0.5);
@@ -68,7 +78,7 @@ public class CloseSpotPositionCommandHandler(
var closedTrade = exchangeService.BuildEmptyTrade(
request.Position.Open.Ticker,
lastPrice,
request.Position.Open.Quantity,
amountToSwap,
direction,
1, // Spot trading has no leverage
TradeType.Market,