Enhance SpotBot to improve position recovery logic and add token balance verification after closing positions. The changes include filtering for recent unfinished positions and logging detailed information during position closure, ensuring better tracking and error handling for token balances.
This commit is contained in:
@@ -57,6 +57,11 @@ public class CloseSpotPositionCommandHandler(
|
||||
}
|
||||
|
||||
amountToSwap = tokenBalance.Amount;
|
||||
|
||||
logger?.LogInformation(
|
||||
"Closing spot position: PositionId={PositionId}, Ticker={Ticker}, TokenBalance={TokenBalance}, Swapping to USDC",
|
||||
request.Position.Identifier, request.Position.Ticker, amountToSwap);
|
||||
|
||||
swapResult = await tradingService.SwapGmxTokensAsync(
|
||||
request.Position.User,
|
||||
account.Name,
|
||||
@@ -70,10 +75,17 @@ public class CloseSpotPositionCommandHandler(
|
||||
|
||||
if (!swapResult.Success)
|
||||
{
|
||||
logger?.LogError(
|
||||
"Failed to close spot position: PositionId={PositionId}, Ticker={Ticker}, Error={Error}",
|
||||
request.Position.Identifier, request.Position.Ticker, swapResult.Error ?? swapResult.Message);
|
||||
throw new InvalidOperationException(
|
||||
$"Failed to close spot position: {swapResult.Error ?? swapResult.Message}");
|
||||
}
|
||||
|
||||
logger?.LogInformation(
|
||||
"Spot position swap completed successfully: PositionId={PositionId}, Ticker={Ticker}, AmountSwapped={AmountSwapped}, Hash={Hash}",
|
||||
request.Position.Identifier, request.Position.Ticker, amountToSwap, swapResult.Hash);
|
||||
|
||||
// Build the closing trade directly for backtest (no exchange call needed)
|
||||
var closedTrade = exchangeService.BuildEmptyTrade(
|
||||
request.Position.Open.Ticker,
|
||||
|
||||
Reference in New Issue
Block a user