stable/freqtrade/optimize/hyperopt_loss/hyperopt_loss_sortino.py

36 lines
1.1 KiB
Python
Raw Normal View History

"""
SortinoHyperOptLoss
This module defines the alternative HyperOptLoss class which can be used for
Hyperoptimization.
"""
from datetime import datetime
import numpy as np
2020-09-28 17:39:41 +00:00
from pandas import DataFrame
from freqtrade.optimize.hyperopt import IHyperOptLoss
2023-01-07 00:19:06 +00:00
from freqtrade.constants import Config
from freqtrade.data.metrics import calculate_sortino
class SortinoHyperOptLoss(IHyperOptLoss):
"""
Defines the loss function for hyperopt.
This implementation uses the Sortino Ratio calculation.
"""
@staticmethod
def hyperopt_loss_function(results: DataFrame, trade_count: int,
min_date: datetime, max_date: datetime,
2023-01-07 00:19:06 +00:00
config: Config, *args, **kwargs) -> float:
"""
Objective function, returns smaller number for more optimal results.
Uses Sortino Ratio calculation.
"""
2023-01-07 00:19:06 +00:00
starting_balance = config['dry_run_wallet']
sortino_ratio = calculate_sortino(results, min_date, max_date, starting_balance)
# print(expected_returns_mean, down_stdev, sortino_ratio)
return -sortino_ratio