Fix realized pnl on backtest save + add tests (not all passing)

This commit is contained in:
2025-11-14 02:38:15 +07:00
parent 1f7d914625
commit 460a7bd559
34 changed files with 6012 additions and 500 deletions

View File

@@ -174,14 +174,14 @@ public class BacktestExecutorTests : BaseTests, IDisposable
// Validate key metrics - Updated after bug fix in executor
Assert.Equal(1000.0m, result.InitialBalance);
Assert.Equal(-44.92m, Math.Round(result.FinalPnl, 2));
Assert.Equal(45.30m, Math.Round(result.FinalPnl, 2));
Assert.Equal(31, result.WinRate);
Assert.Equal(-4.49m, Math.Round(result.GrowthPercentage, 2));
Assert.Equal(-1.77m, Math.Round(result.GrowthPercentage, 2));
Assert.Equal(-0.67m, Math.Round(result.HodlPercentage, 2));
Assert.Equal(86.65m, Math.Round(result.Fees, 2));
Assert.Equal(-44.92m, Math.Round(result.NetPnl, 2));
Assert.Equal(179.42m, Math.Round((decimal)result.MaxDrawdown, 2));
Assert.Equal(-0.011, Math.Round((double)(result.SharpeRatio ?? 0), 3));
Assert.Equal(59.97m, Math.Round(result.Fees, 2));
Assert.Equal(-17.74m, Math.Round(result.NetPnl, 2));
Assert.Equal(158.79m, Math.Round((decimal)result.MaxDrawdown, 2));
Assert.Equal(-0.004, Math.Round((double)(result.SharpeRatio ?? 0), 3));
Assert.True(Math.Abs(result.Score - 0.0) < 0.001,
$"Score {result.Score} should be within 0.001 of expected value 0.0");
@@ -266,14 +266,14 @@ public class BacktestExecutorTests : BaseTests, IDisposable
// Validate key metrics - Updated after bug fix in executor
Assert.Equal(100000.0m, result.InitialBalance);
Assert.Equal(-57729.37m, Math.Round(result.FinalPnl, 2));
Assert.Equal(-33978.09m, Math.Round(result.FinalPnl, 2));
Assert.Equal(21, result.WinRate);
Assert.Equal(-57.73m, Math.Round(result.GrowthPercentage, 2));
Assert.Equal(-52.16m, Math.Round(result.GrowthPercentage, 2));
Assert.Equal(-12.87m, Math.Round(result.HodlPercentage, 2));
Assert.Equal(25875.44m, Math.Round(result.Fees, 2));
Assert.Equal(-57729.37m, Math.Round(result.NetPnl, 2));
Assert.Equal(58631.97m, Math.Round((decimal)result.MaxDrawdown, 2));
Assert.Equal(-0.042, Math.Round((double)(result.SharpeRatio ?? 0), 3));
Assert.Equal(18207.71m, Math.Round(result.Fees, 2));
Assert.Equal(-52156.26m, Math.Round(result.NetPnl, 2));
Assert.Equal(54523.55m, Math.Round((decimal)result.MaxDrawdown, 2));
Assert.Equal(-0.037, Math.Round((double)(result.SharpeRatio ?? 0), 3));
Assert.True(Math.Abs(result.Score - 0.0) < 0.001,
$"Score {result.Score} should be within 0.001 of expected value 0.0");
@@ -453,10 +453,10 @@ public class BacktestExecutorTests : BaseTests, IDisposable
// Business Logic Baseline Assertions - Updated after bug fix in executor
// These values establish the expected baseline for the two-scenarios test
const decimal expectedFinalPnl = -34137.424000000000000000000000m;
const decimal expectedFinalPnl = -35450.45m;
const double expectedScore = 0.0;
const int expectedWinRatePercent = 20; // 20% win rate
const decimal expectedGrowthPercentage = -34.1374240000000000000000m;
const decimal expectedGrowthPercentage = -49.76m;
// Allow small tolerance for floating-point precision variations
const decimal pnlTolerance = 0.01m;