From: Jérôme Benoit Date: Sun, 16 Feb 2025 08:39:13 +0000 (+0100) Subject: fix(qav3): ensure optuna storage path is sanitized X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=2aa3e51f64df4ffd541143839d4f87fa17de541f;p=freqai-strategies.git fix(qav3): ensure optuna storage path is sanitized Signed-off-by: Jérôme Benoit --- diff --git a/ReforceXY/user_data/config-template.json b/ReforceXY/user_data/config-template.json index 1ea31f6..8e498f1 100644 --- a/ReforceXY/user_data/config-template.json +++ b/ReforceXY/user_data/config-template.json @@ -170,7 +170,7 @@ "max_trade_duration_candles": 96, // Timeout exit value used with force_actions "force_actions": false, // Utilize minimal_roi, stoploss, and max_trade_duration_candles as TP/SL/Timeout in the environment "n_envs": 1, // Number of DummyVecEnv environments - "frame_staking": 0, // Number of VecFrameStack stacks (set to 1 to use) + "frame_staking": 0, // Number of VecFrameStack stacks (set > 1 to use) "lr_schedule": false, // Enable learning rate linear schedule "cr_schedule": false, // Enable clip range linear schedule "max_no_improvement_evals": 0, // Maximum consecutive evaluations without a new best model diff --git a/ReforceXY/user_data/freqaimodels/ReforceXY.py b/ReforceXY/user_data/freqaimodels/ReforceXY.py index 4eb3362..4c1cc2f 100644 --- a/ReforceXY/user_data/freqaimodels/ReforceXY.py +++ b/ReforceXY/user_data/freqaimodels/ReforceXY.py @@ -73,7 +73,7 @@ class ReforceXY(BaseReinforcementLearningModel): "max_trade_duration_candles": 96, // Timeout exit value used with force_actions "force_actions": false, // Utilize minimal_roi, stoploss, and max_trade_duration_candles as TP/SL/Timeout in the environment "n_envs": 1, // Number of DummyVecEnv environments - "frame_staking": 0, // Number of VecFrameStack stacks (set to 1 to use) + "frame_staking": 0, // Number of VecFrameStack stacks (set > 1 to use) "lr_schedule": false, // Enable learning rate linear schedule "cr_schedule": false, // Enable clip range linear schedule "max_no_improvement_evals": 0, // Maximum consecutive evaluations without a new best model @@ -489,6 +489,7 @@ class ReforceXY(BaseReinforcementLearningModel): except KeyboardInterrupt: pass + # FIXME: ensure that best trial params are handled on a per pair basis logger.info("------------ Hyperopt results ------------") logger.info( "Best trial: %s. Score: %s", study.best_trial.number, study.best_trial.value diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index 11bdb94..602c870 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -230,11 +230,14 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): storage_dir = str(dk.full_path) storage_backend = self.__optuna_config.get("storage", "file") if storage_backend == "sqlite": - storage = f"sqlite:///{storage_dir}/optuna-{sanitize_path(dk.pair.split('/')[0])}.sqlite" + sqlite_path = sanitize_path( + f"{storage_dir}/optuna-{dk.pair.split('/')[0]}.sqlite" + ) + storage = f"sqlite:///{sqlite_path}" elif storage_backend == "file": storage = optuna.storages.JournalStorage( optuna.storages.journal.JournalFileBackend( - f"{storage_dir}/optuna-{sanitize_path(dk.pair.split('/')[0])}.log" + sanitize_path(f"{storage_dir}/optuna-{dk.pair.split('/')[0]}.log") ) ) return storage diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index fe44dd9..a43d915 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -231,11 +231,14 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): storage_dir = str(dk.full_path) storage_backend = self.__optuna_config.get("storage", "file") if storage_backend == "sqlite": - storage = f"sqlite:///{storage_dir}/optuna-{sanitize_path(dk.pair.split('/')[0])}.sqlite" + sqlite_path = sanitize_path( + f"{storage_dir}/optuna-{dk.pair.split('/')[0]}.sqlite" + ) + storage = f"sqlite:///{sqlite_path}" elif storage_backend == "file": storage = optuna.storages.JournalStorage( optuna.storages.journal.JournalFileBackend( - f"{storage_dir}/optuna-{sanitize_path(dk.pair.split('/')[0])}.log" + sanitize_path(f"{storage_dir}/optuna-{dk.pair.split('/')[0]}.log") ) ) return storage