# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
"""
Hyperopt configuration for SimpleStrategy
"""
from freqtrade.optimize.hyperopt_interface import IHyperOpt
from freqtrade.constants import Config
from pandas import DataFrame
from typing import Dict, List, Any
# Import parameter types
from freqtrade.optimize.hyperopt_interface import (
CategoricalParameter,
DecimalParameter,
IntParameter,
)
class SimpleHyperopt(IHyperOpt):
"""
Hyperopt class for optimizing SimpleStrategy parameters
"""
def indicator_space(self) -> Dict[str, Any]:
"""
Define the search space for indicators
"""
return {
'buy_rsi': IntParameter(15, 40, default=25),
'sell_rsi': IntParameter(60, 85, default=75),
'stoploss': DecimalParameter(-0.02, -0.08, 0.01, default=-0.05),
}
def roi_space(self) -> Dict[str, Any]:
"""
Define the search space for ROI (Return on Investment)
"""
return {
'roi_t1': IntParameter(10, 60, 5, default=30),
'roi_t2': IntParameter(10, 60, 5, default=30),
'roi_t3': IntParameter(5, 30, 5, default=15),
'roi_p1': DecimalParameter(0.01, 0.05, 0.01, default=0.02),
'roi_p2': DecimalParameter(0.01, 0.04, 0.01, default=0.02),
'roi_p3': DecimalParameter(0.01, 0.03, 0.01, default=0.02),
}
def generate_roi_table(self, params: Dict[str, Any]) -> Dict[int, float]:
"""
Generate ROI table from hyperopt parameters
"""
roi_t1 = params['roi_t1']
roi_t2 = params['roi_t2']
roi_t3 = params['roi_t3']
roi_p1 = params['roi_p1']
roi_p2 = params['roi_p2']
roi_p3 = params['roi_p3']
# Build ROI table (time in minutes -> profit %)
roi_table = {
roi_t1 + roi_t2 + roi_t3: roi_p3,
roi_t2 + roi_t3: roi_p2,
roi_t3: roi_p1,
0: roi_p1 + roi_p2 + roi_p3
}
return roi_table
def generate_strategy(self, config: Config, params: Dict[str, Any]) -> Any:
"""
Generate strategy with optimized parameters
"""
from freqtrade.resolvers import StrategyResolver
# Load the strategy
strategy = StrategyResolver.load_strategy(config)
# Override parameters
strategy.buy_rsi = params['buy_rsi']
strategy.sell_rsi = params['sell_rsi']
strategy.stoploss = params['stoploss']
strategy.minimal_roi = self.generate_roi_table(params)
return strategy