Update scoring system
This commit is contained in:
@@ -813,7 +813,7 @@ public class TradingBotFitness : IFitness
|
||||
).Result;
|
||||
|
||||
// Calculate multi-objective fitness based on backtest results
|
||||
var fitness = CalculateMultiObjectiveFitness(backtest, config);
|
||||
var fitness = CalculateFitness(backtest, config);
|
||||
|
||||
return fitness;
|
||||
}
|
||||
@@ -824,38 +824,13 @@ public class TradingBotFitness : IFitness
|
||||
}
|
||||
}
|
||||
|
||||
private double CalculateMultiObjectiveFitness(Backtest backtest, TradingBotConfig config)
|
||||
private double CalculateFitness(Backtest backtest, TradingBotConfig config)
|
||||
{
|
||||
if (backtest == null || backtest.Statistics == null)
|
||||
return 0.1;
|
||||
|
||||
var stats = backtest.Statistics;
|
||||
|
||||
// Multi-objective fitness function (matching frontend)
|
||||
var pnlScore = Math.Max(0, (double)stats.TotalPnL / 1000); // Normalize PnL
|
||||
var winRateScore = backtest.WinRate / 100.0; // Normalize win rate
|
||||
var riskRewardScore =
|
||||
Math.Min(2, (double)stats.WinningTrades / Math.Max(1, Math.Abs((double)stats.LoosingTrades)));
|
||||
var consistencyScore = 1 - Math.Abs((double)stats.TotalPnL - (double)backtest.FinalPnl) /
|
||||
Math.Max(1, Math.Abs((double)stats.TotalPnL));
|
||||
|
||||
// Risk-reward ratio bonus
|
||||
var riskRewardRatio = (double)(config.MoneyManagement.TakeProfit / config.MoneyManagement.StopLoss);
|
||||
var riskRewardBonus = Math.Min(0.2, (riskRewardRatio - 1.1) * 0.1);
|
||||
|
||||
// Drawdown score (normalized to 0-1, where lower drawdown is better)
|
||||
var maxDrawdownPc = Math.Abs((double)stats.MaxDrawdownPc);
|
||||
var drawdownScore = Math.Max(0, 1 - (maxDrawdownPc / 50));
|
||||
|
||||
// Weighted combination
|
||||
var fitness =
|
||||
pnlScore * 0.3 +
|
||||
winRateScore * 0.2 +
|
||||
riskRewardScore * 0.2 +
|
||||
consistencyScore * 0.1 +
|
||||
riskRewardBonus * 0.1 +
|
||||
drawdownScore * 0.1;
|
||||
|
||||
return Math.Max(0, fitness);
|
||||
// Use the comprehensive backtest score directly as fitness
|
||||
// The BacktestScorer already includes all important metrics with proper weighting
|
||||
return backtest.Score;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user