Refactor BacktestExecutor to use net PnL calculations consistently across methods. Updated variable names for clarity and ensured final results reflect net profit after fees. Minor adjustment in TradingBotBase to directly access net PnL from position profit and loss.

This commit is contained in:
2025-11-13 11:56:11 +07:00
parent d8f7a73605
commit 2cc6cc5dee
3 changed files with 7 additions and 6 deletions

View File

@@ -335,11 +335,11 @@ public class BacktestExecutor
var resultCalculationStart = Stopwatch.GetTimestamp();
// Calculate final results (using existing optimized methods)
var finalPnl = tradingBot.GetProfitAndLoss();
var netPnl = tradingBot.GetProfitAndLoss(); // This returns Net PnL (after fees)
var winRate = tradingBot.GetWinRate();
var stats = TradingHelpers.GetStatistics(tradingBot.WalletBalances);
var growthPercentage =
TradingHelpers.GetGrowthFromInitalBalance(tradingBot.WalletBalances.FirstOrDefault().Value, finalPnl);
TradingHelpers.GetGrowthFromInitalBalance(tradingBot.WalletBalances.FirstOrDefault().Value, netPnl);
var hodlPercentage = TradingHelpers.GetHodlPercentage(candles.First(), candles.Last());
var fees = tradingBot.GetTotalFees();
@@ -348,7 +348,7 @@ public class BacktestExecutor
growthPercentage: (double)growthPercentage,
hodlPercentage: (double)hodlPercentage,
winRate: winRate,
totalPnL: (double)finalPnl,
totalPnL: (double)netPnl,
fees: (double)fees,
tradeCount: tradingBot.Positions.Count,
maxDrawdownRecoveryTime: stats.MaxDrawdownRecoveryTime,
@@ -378,7 +378,7 @@ public class BacktestExecutor
var result = new Backtest(config, tradingBot.Positions, tradingBot.Signals,
withCandles ? candles : new HashSet<Candle>())
{
FinalPnl = finalPnl,
FinalPnl = netPnl, // Net PnL (after fees)
WinRate = winRate,
GrowthPercentage = growthPercentage,
HodlPercentage = hodlPercentage,
@@ -393,7 +393,7 @@ public class BacktestExecutor
StartDate = candles.FirstOrDefault()!.OpenTime,
EndDate = candles.LastOrDefault()!.OpenTime,
InitialBalance = initialBalance,
NetPnl = finalPnl - fees,
NetPnl = netPnl, // Already net of fees
};
if (save && user != null)

View File

@@ -2132,7 +2132,7 @@ public class TradingBotBase : ITradingBot
{
if (position.IsValidForMetrics() && position.ProfitAndLoss != null)
{
netPnl += position.GetPnLBeforeFees();
netPnl += position.ProfitAndLoss.Net;
}
}

View File

@@ -1,2 +1,3 @@
export { default as PositionsModal } from './PositionsModal'