From 7c7a497b07f5257455c6942bd6ab05d86daa7269 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 11 Nov 2024 14:53:57 +0100 Subject: [PATCH] [Optimizer] allow multi exchange backtests and handle settings fallbacks --- octobot/constants.py | 1 + octobot/enums.py | 2 ++ .../strategy_optimizer/optimizer_settings.py | 20 ++++++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/octobot/constants.py b/octobot/constants.py index 7e0108ad3..90cc6cf04 100644 --- a/octobot/constants.py +++ b/octobot/constants.py @@ -225,6 +225,7 @@ OPTIMIZER_DEFAULT_MIN_MUTATION_PROBABILITY_PERCENT = decimal.Decimal(10) OPTIMIZER_DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER = 3 OPTIMIZER_DEFAULT_DB_UPDATE_PERIOD = 15 +OPTIMIZER_DEFAULT_TARGET_FITNESS_SCORE = None # Databases DEFAULT_MAX_TOTAL_RUN_DATABASES_SIZE = 1000000000 # 1GB diff --git a/octobot/enums.py b/octobot/enums.py index cbc70881d..c2f7549a2 100644 --- a/octobot/enums.py +++ b/octobot/enums.py @@ -43,6 +43,8 @@ class OptimizerConfig(enum.Enum): DATA_FILES = "data_files" OPTIMIZER_CONFIG = "optimizer_config" EXCHANGE_TYPE = "exchange_type" + EXCHANGE_IDS = "exchange_ids" + EXCHANGE_ID = "exchange_id" QUEUE_SIZE = "queue_size" EMPTY_THE_QUEUE = "empty_the_queue" START_TIMESTAMP = "start_timestamp" diff --git a/octobot/strategy_optimizer/optimizer_settings.py b/octobot/strategy_optimizer/optimizer_settings.py index 533d80aea..b61bd1f45 100644 --- a/octobot/strategy_optimizer/optimizer_settings.py +++ b/octobot/strategy_optimizer/optimizer_settings.py @@ -21,6 +21,7 @@ import octobot.strategy_optimizer.fitness_parameter as fitness_parameter import octobot.strategy_optimizer.optimizer_filter as optimizer_filter import octobot.strategy_optimizer.optimizer_constraint as optimizer_constraint +import octobot_backtesting.constants as backtesting_constants class OptimizerSettings: @@ -31,7 +32,24 @@ def __init__(self, settings_dict=None): self.optimizer_config = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_CONFIG.value, None) self.randomly_chose_runs = settings_dict.get(enums.OptimizerConfig.RANDOMLY_CHOSE_RUNS.value, constants.OPTIMIZER_DEFAULT_RANDOMLY_CHOSE_RUNS) - self.data_files = settings_dict.get(enums.OptimizerConfig.DATA_FILES.value) + self.data_files = settings_dict.get( + enums.OptimizerConfig.DATA_FILES.value, + [backtesting_constants.CONFIG_CURRENT_BOT_DATA], + ) + if not isinstance(self.data_files, list): + self.data_files = [self.data_files] + if backtesting_constants.CONFIG_CURRENT_BOT_DATA in self.data_files: + self.data_files = [backtesting_constants.CONFIG_CURRENT_BOT_DATA] + self.exchange_ids = settings_dict.get( + enums.OptimizerConfig.EXCHANGE_IDS.value, + ) + if not self.exchange_ids: + self.exchange_ids = [ + settings_dict.get(enums.OptimizerConfig.EXCHANGE_ID.value) + ] + self.exchange_type = settings_dict.get( + enums.OptimizerConfig.EXCHANGE_TYPE.value + ) self.start_timestamp = settings_dict.get(enums.OptimizerConfig.START_TIMESTAMP.value, None) self.end_timestamp = settings_dict.get(enums.OptimizerConfig.END_TIMESTAMP.value, None) self.required_idle_cores = int(settings_dict.get(enums.OptimizerConfig.IDLE_CORES.value,