Fix close position
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user