30 lines
791 B
Python
30 lines
791 B
Python
from freqtrade.optimize.hyperopt import IHyperOptLoss
|
|
from math import sqrt
|
|
|
|
|
|
class CustomPerformanceLoss(IHyperOptLoss):
|
|
|
|
@staticmethod
|
|
def hyperopt_loss_function(results, trade_count, *args, **kwargs):
|
|
|
|
total_profit = results['profit_total_abs']
|
|
max_dd = results['max_drawdown']
|
|
profit_factor = results['profit_factor']
|
|
sqn = results['sqn']
|
|
|
|
# Sécurité minimale
|
|
if trade_count < 30:
|
|
return 1000
|
|
|
|
# Éviter division par zéro
|
|
if max_dd == 0:
|
|
max_dd = 0.0001
|
|
|
|
# Score principal
|
|
performance_score = (
|
|
(profit_factor * sqn * total_profit)
|
|
/ (max_dd ** 1.5)
|
|
)
|
|
|
|
# On retourne l'inverse car hyperopt minimise
|
|
return -performance_score |