diff --git a/freqtrade/optimize/hyperopt/hyperopt.py b/freqtrade/optimize/hyperopt/hyperopt.py index 6aeb79057..70a85b30b 100644 --- a/freqtrade/optimize/hyperopt/hyperopt.py +++ b/freqtrade/optimize/hyperopt/hyperopt.py @@ -20,7 +20,6 @@ from freqtrade.constants import FTHYPT_FILEVERSION, LAST_BT_RESULT_FN, Config from freqtrade.enums import HyperoptState from freqtrade.exceptions import OperationalException from freqtrade.misc import file_dump_json, plural -from freqtrade.optimize.backtesting import Backtesting from freqtrade.optimize.hyperopt.hyperopt_logger import logging_mp_handle, logging_mp_setup from freqtrade.optimize.hyperopt.hyperopt_optimizer import HyperOptimizer from freqtrade.optimize.hyperopt.hyperopt_output import HyperoptOutput @@ -149,7 +148,7 @@ class Hyperopt: ) def run_optimizer_parallel( - self, parallel: Parallel, backtesting: Backtesting, asked: list[list] + self, parallel: Parallel, asked: list[list] ) -> list[dict[str, Any]]: """Start optimizer in a parallel way""" @@ -162,7 +161,7 @@ class Hyperopt: return self.hyperopter.generate_optimizer(*args, **kwargs) return parallel( - delayed(wrap_non_picklable_objects(optimizer_wrapper))(backtesting, v) for v in asked + delayed(wrap_non_picklable_objects(optimizer_wrapper))(v) for v in asked ) def _set_random_state(self, random_state: int | None) -> int: @@ -289,7 +288,7 @@ class Hyperopt: n_points=1, dimensions=self.hyperopter.o_dimensions ) f_val0 = self.hyperopter.generate_optimizer( - self.hyperopter.backtesting, asked[0].params + asked[0].params ) self.opt.tell(asked[0], [f_val0["loss"]]) self.evaluate_result(f_val0, 1, is_random[0]) @@ -309,7 +308,7 @@ class Hyperopt: f_val = self.run_optimizer_parallel( parallel, - self.hyperopter.backtesting, + # self.hyperopter.backtesting, [asked1.params for asked1 in asked], ) f_val_loss = [v["loss"] for v in f_val] diff --git a/freqtrade/optimize/hyperopt/hyperopt_optimizer.py b/freqtrade/optimize/hyperopt/hyperopt_optimizer.py index 653d3df22..bd003e3c9 100644 --- a/freqtrade/optimize/hyperopt/hyperopt_optimizer.py +++ b/freqtrade/optimize/hyperopt/hyperopt_optimizer.py @@ -267,9 +267,7 @@ class HyperOptimizer: # noinspection PyProtectedMember attr.value = params_dict[attr_name] - def generate_optimizer( - self, backtesting: Backtesting, raw_params: dict[str, Any] - ) -> dict[str, Any]: + def generate_optimizer(self, raw_params: dict[str, Any]) -> dict[str, Any]: """ Used Optimize function. Called once per epoch to optimize whatever is configured. @@ -281,26 +279,30 @@ class HyperOptimizer: # Apply parameters if HyperoptTools.has_space(self.config, "buy"): - self.assign_params(backtesting, params_dict, "buy") + self.assign_params(self.backtesting, params_dict, "buy") if HyperoptTools.has_space(self.config, "sell"): - self.assign_params(backtesting, params_dict, "sell") + self.assign_params(self.backtesting, params_dict, "sell") if HyperoptTools.has_space(self.config, "protection"): - self.assign_params(backtesting, params_dict, "protection") + self.assign_params(self.backtesting, params_dict, "protection") if HyperoptTools.has_space(self.config, "roi"): - backtesting.strategy.minimal_roi = self.custom_hyperopt.generate_roi_table(params_dict) + self.backtesting.strategy.minimal_roi = self.custom_hyperopt.generate_roi_table( + params_dict + ) if HyperoptTools.has_space(self.config, "stoploss"): - backtesting.strategy.stoploss = params_dict["stoploss"] + self.backtesting.strategy.stoploss = params_dict["stoploss"] if HyperoptTools.has_space(self.config, "trailing"): d = self.custom_hyperopt.generate_trailing_params(params_dict) - backtesting.strategy.trailing_stop = d["trailing_stop"] - backtesting.strategy.trailing_stop_positive = d["trailing_stop_positive"] - backtesting.strategy.trailing_stop_positive_offset = d["trailing_stop_positive_offset"] - backtesting.strategy.trailing_only_offset_is_reached = d[ + self.backtesting.strategy.trailing_stop = d["trailing_stop"] + self.backtesting.strategy.trailing_stop_positive = d["trailing_stop_positive"] + self.backtesting.strategy.trailing_stop_positive_offset = d[ + "trailing_stop_positive_offset" + ] + self.backtesting.strategy.trailing_only_offset_is_reached = d[ "trailing_only_offset_is_reached" ] @@ -319,7 +321,7 @@ class HyperOptimizer: self.config.update({"max_open_trades": updated_max_open_trades}) - backtesting.strategy.max_open_trades = updated_max_open_trades + self.backtesting.strategy.max_open_trades = updated_max_open_trades with self.data_pickle_file.open("rb") as f: processed = load(f, mmap_mode="r") @@ -327,7 +329,7 @@ class HyperOptimizer: # Data is not yet analyzed, rerun populate_indicators. processed = self.advise_and_trim(processed) - bt_results = backtesting.backtest( + bt_results = self.backtesting.backtest( processed=processed, start_date=self.min_date, end_date=self.max_date ) backtest_end_time = datetime.now(timezone.utc) diff --git a/tests/optimize/test_hyperopt.py b/tests/optimize/test_hyperopt.py index c1497f2b2..0e95d357b 100644 --- a/tests/optimize/test_hyperopt.py +++ b/tests/optimize/test_hyperopt.py @@ -606,7 +606,7 @@ def test_generate_optimizer(mocker, hyperopt_conf) -> None: hyperopt.hyperopter.max_date = dt_utc(2017, 12, 13) hyperopt.hyperopter.init_spaces() generate_optimizer_value = hyperopt.hyperopter.generate_optimizer( - hyperopt.hyperopter.backtesting, optimizer_param + optimizer_param ) assert generate_optimizer_value == response_expected