Fix backtest consistency

This commit is contained in:
2025-11-11 12:15:12 +07:00
parent 2a0fbf9bc0
commit 1792cd2371
10 changed files with 248 additions and 34978 deletions

View File

@@ -105,7 +105,7 @@ public class BacktestExecutorTests : BaseTests, IDisposable
{
Console.WriteLine("TEST START: ExecuteBacktest_With_ETH_FifteenMinutes_Data_Should_Return_LightBacktest");
// Arrange
var candles = FileHelpers.ReadJson<List<Candle>>("Data/ETH-FifteenMinutes-candles.json");
var candles = FileHelpers.ReadJson<List<Candle>>("../../../Data/ETH-FifteenMinutes-candles.json");
Assert.NotNull(candles);
Assert.NotEmpty(candles);
@@ -194,7 +194,7 @@ public class BacktestExecutorTests : BaseTests, IDisposable
public async Task ExecuteBacktest_With_ETH_FifteenMinutes_Data_Second_File_Should_Return_LightBacktest()
{
// Arrange
var candles = FileHelpers.ReadJson<List<Candle>>("Data/ETH-FifteenMinutes-candles-18:8:36 +00:00-.json");
var candles = FileHelpers.ReadJson<List<Candle>>("../../../Data/ETH-FifteenMinutes-candles-20:44:15 +00:00-.json");
Assert.NotNull(candles);
Assert.NotEmpty(candles);
@@ -262,21 +262,21 @@ public class BacktestExecutorTests : BaseTests, IDisposable
Assert.NotNull(result);
Assert.IsType<LightBacktest>(result);
// Validate key metrics
Assert.Equal(1000.0m, result.InitialBalance);
Assert.Equal(-231.29721172568454046919618831m, result.FinalPnl);
Assert.Equal(23, result.WinRate);
Assert.Equal(-23.129721172568454046919618831m, result.GrowthPercentage);
Assert.Equal(-7.21737468617549040397297248m, result.HodlPercentage);
Assert.Equal(85.52006264987920502883059246m, result.Fees);
Assert.Equal(-316.81727437556374549802678077m, result.NetPnl);
Assert.Equal(344.40594388353508622906184741m, result.MaxDrawdown);
Assert.Equal((double?)-0.022551011986934103m, result.SharpeRatio);
Assert.Equal((double)0.0m, result.Score);
// Validate key metrics - Updated to match actual results from ETH-FifteenMinutes-candles-20:44:15 +00:00-.json
Assert.Equal(100000.0m, result.InitialBalance);
Assert.Equal(22032.782058855250417361483713m, result.FinalPnl);
Assert.Equal(37, result.WinRate);
Assert.Equal(22.03278205885525041736148371m, result.GrowthPercentage);
Assert.Equal(-12.86812721679866545042180006m, result.HodlPercentage);
Assert.Equal(10846.532763656018618890408138m, result.Fees);
Assert.Equal(11186.249295199231798471075575m, result.NetPnl);
Assert.Equal(15021.41953476671701958923630m, result.MaxDrawdown);
Assert.True(Math.Abs((double)(result.SharpeRatio ?? 0) - 0.013497) < 0.00001, $"SharpeRatio mismatch: expected ~0.013497, got {result.SharpeRatio}"); // Use tolerance for floating point precision
Assert.True(Math.Abs((double)58.00807367446997 - result.Score) < 0.001, $"Score mismatch: expected ~58.00807367446997, got {result.Score}"); // Use tolerance for floating point precision
// Validate dates
Assert.Equal(new DateTime(2025, 10, 11, 18, 15, 0), result.StartDate);
Assert.Equal(new DateTime(2025, 11, 10, 18, 0, 0), result.EndDate);
// Validate dates - Updated to match actual results from ETH-FifteenMinutes-candles-20:44:15 +00:00-.json
Assert.Equal(new DateTime(2025, 9, 11, 20, 45, 0), result.StartDate);
Assert.Equal(new DateTime(2025, 11, 2, 22, 30, 0), result.EndDate);
Assert.True(result.StartDate < result.EndDate);
}
@@ -284,7 +284,7 @@ public class BacktestExecutorTests : BaseTests, IDisposable
public async Task ExecuteBacktest_With_Large_Dataset_Should_Show_Performance_Telemetry()
{
// Arrange - Use the large dataset for performance testing
var candles = FileHelpers.ReadJson<List<Candle>>("Data/ETH-FifteenMinutes-candles-20:44:15 +00:00-.json");
var candles = FileHelpers.ReadJson<List<Candle>>("../../../Data/ETH-FifteenMinutes-candles-20:44:15 +00:00-.json");
Assert.NotNull(candles);
Assert.NotEmpty(candles);