From 04df72a6bd1634b2865ac5eea044f32c8f6a2e7f Mon Sep 17 00:00:00 2001 From: cryptooda Date: Sat, 11 Oct 2025 12:27:54 +0700 Subject: [PATCH] Fix .First Position update + add more details when position rejected --- src/Managing.Application/Bots/TradingBotBase.cs | 12 +++++++----- .../Trading/Handlers/OpenPositionCommandHandler.cs | 5 +++++ .../ExchangeService.cs | 14 -------------- src/Managing.Infrastructure.Web3/EvmManager.cs | 1 + 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/Managing.Application/Bots/TradingBotBase.cs b/src/Managing.Application/Bots/TradingBotBase.cs index 7d607470..9ee51450 100644 --- a/src/Managing.Application/Bots/TradingBotBase.cs +++ b/src/Managing.Application/Bots/TradingBotBase.cs @@ -369,10 +369,8 @@ public class TradingBotBase : ITradingBot // No existing position found, proceed to open a new one var newlyCreatedPosition = await OpenPosition(signal); - if (newlyCreatedPosition != null) - { - Positions[newlyCreatedPosition.Identifier] = newlyCreatedPosition; - } + // Position is now added to Positions collection inside OpenPosition method + // No need to add it here again } } @@ -996,6 +994,9 @@ public class TradingBotBase : ITradingBot if (position != null) { + // Add position to internal collection before any status updates + Positions[position.Identifier] = position; + if (position.Open.Status != TradeStatus.Cancelled && position.Status != PositionStatus.Rejected) { SetSignalStatus(signal.Identifier, SignalStatus.PositionOpen); @@ -1011,6 +1012,7 @@ public class TradingBotBase : ITradingBot } else { + SentrySdk.CaptureMessage("Position rejected", SentryLevel.Error); await SetPositionStatus(signal.Identifier, PositionStatus.Rejected); position.Status = PositionStatus.Rejected; await UpdatePositionDatabase(position); @@ -1768,7 +1770,7 @@ public class TradingBotBase : ITradingBot { var position = Positions.Values.First(p => p.SignalIdentifier == signalIdentifier); - if (positionStatus.Equals(PositionStatus.Canceled)) + if (positionStatus.Equals(PositionStatus.Canceled | PositionStatus.Rejected)) { var stackTrace = new StackTrace(true); var callingMethod = stackTrace.GetFrame(1)?.GetMethod(); diff --git a/src/Managing.Application/Trading/Handlers/OpenPositionCommandHandler.cs b/src/Managing.Application/Trading/Handlers/OpenPositionCommandHandler.cs index 2431bd42..8885db52 100644 --- a/src/Managing.Application/Trading/Handlers/OpenPositionCommandHandler.cs +++ b/src/Managing.Application/Trading/Handlers/OpenPositionCommandHandler.cs @@ -125,6 +125,11 @@ namespace Managing.Application.Trading.Handlers ? position.Status : PositionStatus.Rejected; + if (position.Status == PositionStatus.Rejected) + { + SentrySdk.CaptureException(new Exception($"Position {position.Identifier} for {request.SignalIdentifier} rejected")); + } + if (!request.IsForPaperTrading) { await tradingService.InsertPositionAsync(position); diff --git a/src/Managing.Infrastructure.Exchanges/ExchangeService.cs b/src/Managing.Infrastructure.Exchanges/ExchangeService.cs index 237b364c..f68ac518 100644 --- a/src/Managing.Infrastructure.Exchanges/ExchangeService.cs +++ b/src/Managing.Infrastructure.Exchanges/ExchangeService.cs @@ -51,20 +51,6 @@ namespace Managing.Infrastructure.Exchanges reduceOnly ? TradeStatus.PendingOpen : TradeStatus.Filled); } - // Check gas fees for EVM exchanges before opening position - if (IsEvmExchange(account)) - { - var gasFeeUsd = await GetFee(account); - if (gasFeeUsd > 0.5m) - { - _logger.LogWarning( - $"Gas fee too high for position opening: {gasFeeUsd:F2} USD (threshold: 0.5 USD). Cancelling position opening."); - - // Return a cancelled trade - return BuildEmptyTrade(ticker, price, quantity, direction, leverage, tradeType, currentDate.Value, - TradeStatus.Cancelled); - } - } var processor = GetProcessor(account); return await processor.OpenTrade(account, ticker, direction, price, quantity, leverage, tradeType, diff --git a/src/Managing.Infrastructure.Web3/EvmManager.cs b/src/Managing.Infrastructure.Web3/EvmManager.cs index efc1d719..5bca3883 100644 --- a/src/Managing.Infrastructure.Web3/EvmManager.cs +++ b/src/Managing.Infrastructure.Web3/EvmManager.cs @@ -688,6 +688,7 @@ public class EvmManager : IEvmManager } catch (Exception ex) { + SentrySdk.CaptureException(ex); throw; }