From b2a4e1ca5d4d03bb74e82b585e226942a053dddf Mon Sep 17 00:00:00 2001 From: cryptooda Date: Wed, 8 Oct 2025 19:57:19 +0700 Subject: [PATCH] Fix agent volume --- src/Managing.Application/Bots/Grains/AgentGrain.cs | 3 ++- src/Managing.Domain/Shared/Helpers/TradingBox.cs | 10 ++++++---- .../src/pages/dashboardPage/agentSearch.tsx | 9 ++++++++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Managing.Application/Bots/Grains/AgentGrain.cs b/src/Managing.Application/Bots/Grains/AgentGrain.cs index 9cceb919..2b970674 100644 --- a/src/Managing.Application/Bots/Grains/AgentGrain.cs +++ b/src/Managing.Application/Bots/Grains/AgentGrain.cs @@ -9,6 +9,7 @@ using Managing.Common; using Managing.Core; using Managing.Core.Exceptions; using Managing.Domain.Bots; +using Managing.Domain.Shared.Helpers; using Managing.Domain.Statistics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -174,7 +175,7 @@ public class AgentGrain : Grain, IAgentGrain // Calculate aggregated statistics from position data var totalPnL = positions.Sum(p => p.ProfitAndLoss?.Realized ?? 0); - var totalVolume = positions.Sum(p => p.Open.Price * p.Open.Quantity * p.Open.Leverage); + var totalVolume = TradingBox.GetTotalVolumeTraded(positions); var collateral = positions.Sum(p => p.Open.Price * p.Open.Quantity); var totalFees = positions.Sum(p => p.CalculateTotalFees()); diff --git a/src/Managing.Domain/Shared/Helpers/TradingBox.cs b/src/Managing.Domain/Shared/Helpers/TradingBox.cs index 4ac65dc1..7c2624fe 100644 --- a/src/Managing.Domain/Shared/Helpers/TradingBox.cs +++ b/src/Managing.Domain/Shared/Helpers/TradingBox.cs @@ -461,22 +461,24 @@ public static class TradingBox foreach (var position in positions) { // Add entry volume - totalVolume += position.Open.Quantity * position.Open.Price; + totalVolume += position.Open.Quantity * position.Open.Price * position.Open.Leverage; // Add exit volumes from stop loss or take profits if they were executed if (position.StopLoss.Status == TradeStatus.Filled) { - totalVolume += position.StopLoss.Quantity * position.StopLoss.Price; + totalVolume += position.StopLoss.Quantity * position.StopLoss.Price * position.StopLoss.Leverage; } if (position.TakeProfit1.Status == TradeStatus.Filled) { - totalVolume += position.TakeProfit1.Quantity * position.TakeProfit1.Price; + totalVolume += position.TakeProfit1.Quantity * position.TakeProfit1.Price * + position.TakeProfit1.Leverage; } if (position.TakeProfit2 != null && position.TakeProfit2.Status == TradeStatus.Filled) { - totalVolume += position.TakeProfit2.Quantity * position.TakeProfit2.Price; + totalVolume += position.TakeProfit2.Quantity * position.TakeProfit2.Price * + position.TakeProfit2.Leverage; } } diff --git a/src/Managing.WebApp/src/pages/dashboardPage/agentSearch.tsx b/src/Managing.WebApp/src/pages/dashboardPage/agentSearch.tsx index 4f5eb08a..bc3bab76 100644 --- a/src/Managing.WebApp/src/pages/dashboardPage/agentSearch.tsx +++ b/src/Managing.WebApp/src/pages/dashboardPage/agentSearch.tsx @@ -99,10 +99,17 @@ function AgentSearch({ index }: { index: number }) { ? agentData.strategies.reduce((sum, strategy) => sum + (strategy.winRate || 0), 0) / agentData.strategies.length : 0 + // Calculate total collateral from all positions (quantity * price) + const totalCollateral = agentData.positions.reduce((sum, position) => { + const collateral = (position.Open?.quantity || 0) * (position.Open?.price || 0) + return sum + collateral + }, 0) + return { totalPnL, totalNetPnL, totalVolume, + totalCollateral, totalWins, totalLosses, avgWinRate, @@ -460,7 +467,7 @@ function AgentSearch({ index }: { index: number }) {
ROI
= 0 ? 'text-green-500' : 'text-red-500'}> - {((summary.totalNetPnL / (summary.totalVolume || 1)) * 100).toFixed(2)}% + {((summary.totalNetPnL / (summary.totalCollateral || 1)) * 100).toFixed(2)}%
Return on Investment