Skip to content

Commit 7c7a497

Browse files
committed
[Optimizer] allow multi exchange backtests and handle settings fallbacks
1 parent 3e4581a commit 7c7a497

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

octobot/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@
225225
OPTIMIZER_DEFAULT_MIN_MUTATION_PROBABILITY_PERCENT = decimal.Decimal(10)
226226
OPTIMIZER_DEFAULT_MAX_MUTATION_NUMBER_MULTIPLIER = 3
227227
OPTIMIZER_DEFAULT_DB_UPDATE_PERIOD = 15
228+
OPTIMIZER_DEFAULT_TARGET_FITNESS_SCORE = None
228229

229230
# Databases
230231
DEFAULT_MAX_TOTAL_RUN_DATABASES_SIZE = 1000000000 # 1GB

octobot/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class OptimizerConfig(enum.Enum):
4343
DATA_FILES = "data_files"
4444
OPTIMIZER_CONFIG = "optimizer_config"
4545
EXCHANGE_TYPE = "exchange_type"
46+
EXCHANGE_IDS = "exchange_ids"
47+
EXCHANGE_ID = "exchange_id"
4648
QUEUE_SIZE = "queue_size"
4749
EMPTY_THE_QUEUE = "empty_the_queue"
4850
START_TIMESTAMP = "start_timestamp"

octobot/strategy_optimizer/optimizer_settings.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import octobot.strategy_optimizer.fitness_parameter as fitness_parameter
2222
import octobot.strategy_optimizer.optimizer_filter as optimizer_filter
2323
import octobot.strategy_optimizer.optimizer_constraint as optimizer_constraint
24+
import octobot_backtesting.constants as backtesting_constants
2425

2526

2627
class OptimizerSettings:
@@ -31,7 +32,24 @@ def __init__(self, settings_dict=None):
3132
self.optimizer_config = settings_dict.get(enums.OptimizerConfig.OPTIMIZER_CONFIG.value, None)
3233
self.randomly_chose_runs = settings_dict.get(enums.OptimizerConfig.RANDOMLY_CHOSE_RUNS.value,
3334
constants.OPTIMIZER_DEFAULT_RANDOMLY_CHOSE_RUNS)
34-
self.data_files = settings_dict.get(enums.OptimizerConfig.DATA_FILES.value)
35+
self.data_files = settings_dict.get(
36+
enums.OptimizerConfig.DATA_FILES.value,
37+
[backtesting_constants.CONFIG_CURRENT_BOT_DATA],
38+
)
39+
if not isinstance(self.data_files, list):
40+
self.data_files = [self.data_files]
41+
if backtesting_constants.CONFIG_CURRENT_BOT_DATA in self.data_files:
42+
self.data_files = [backtesting_constants.CONFIG_CURRENT_BOT_DATA]
43+
self.exchange_ids = settings_dict.get(
44+
enums.OptimizerConfig.EXCHANGE_IDS.value,
45+
)
46+
if not self.exchange_ids:
47+
self.exchange_ids = [
48+
settings_dict.get(enums.OptimizerConfig.EXCHANGE_ID.value)
49+
]
50+
self.exchange_type = settings_dict.get(
51+
enums.OptimizerConfig.EXCHANGE_TYPE.value
52+
)
3553
self.start_timestamp = settings_dict.get(enums.OptimizerConfig.START_TIMESTAMP.value, None)
3654
self.end_timestamp = settings_dict.get(enums.OptimizerConfig.END_TIMESTAMP.value, None)
3755
self.required_idle_cores = int(settings_dict.get(enums.OptimizerConfig.IDLE_CORES.value,

0 commit comments

Comments
 (0)