]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): factor out optuna storage building code
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 11 Feb 2025 13:51:20 +0000 (14:51 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 11 Feb 2025 13:51:20 +0000 (14:51 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py
quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py

index f1eaffa939dc33b7ba10e6066e742f254c1fa8fe..8889ebba4902291b8d666ca82002b4738642a4a5 100644 (file)
@@ -70,18 +70,7 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
         start = time.time()
         if self.__optuna_hyperopt:
             study_name = str(dk.pair)
-            storage_dir = str(dk.full_path)
-            storage_type = self.__optuna_config.get("storage_type", "sqlite")
-            if storage_type == "sqlite":
-                storage = (
-                    f"sqlite:///{storage_dir}/optuna-{sanitize_path(study_name)}.sqlite"
-                )
-            elif storage_type == "file":
-                storage = optuna.storages.JournalStorage(
-                    optuna.storages.journal.JournalFileBackend(
-                        f"{storage_dir}/optuna-{sanitize_path(study_name)}.log"
-                    )
-                )
+            storage = self.get_optuna_storage(dk)
             pruner = optuna.pruners.HyperbandPruner()
             study = optuna.create_study(
                 study_name=study_name,
@@ -235,6 +224,21 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
 
         return eval_set, eval_weights
 
+    def get_optuna_storage(self, dk: FreqaiDataKitchen):
+        storage_dir = str(dk.full_path)
+        storage_type = self.__optuna_config.get("storage_type", "sqlite")
+        if storage_type == "sqlite":
+            storage = (
+                f"sqlite:///{storage_dir}/optuna-{sanitize_path(str(dk.pair))}.sqlite"
+            )
+        elif storage_type == "file":
+            storage = optuna.storages.JournalStorage(
+                optuna.storages.journal.JournalFileBackend(
+                    f"{storage_dir}/optuna-{sanitize_path(str(dk.pair))}.log"
+                )
+            )
+        return storage
+
 
 def min_max_pred(
     pred_df: pd.DataFrame, fit_live_predictions_candles: int, label_period_candles: int
@@ -256,9 +260,11 @@ def __min_max_pred(
         .apply(lambda col: col.sort_values(ascending=False, ignore_index=True))
     )
 
-    frequency = fit_live_predictions_candles / label_period_candles
-    min_pred = pred_df_sorted.iloc[-int(frequency) :].median()
-    max_pred = pred_df_sorted.iloc[: int(frequency)].median()
+    label_period_frequency: int = int(
+        fit_live_predictions_candles / label_period_candles
+    )
+    min_pred = pred_df_sorted.iloc[-label_period_frequency:].median()
+    max_pred = pred_df_sorted.iloc[:label_period_frequency].median()
     return min_pred["&s-extrema"], max_pred["&s-extrema"]
 
 
index e910125f9a137b7dd1fff7fa282765fb2412ab26..0ba230535f5b994bbcb01768e0e9d7d84c3d8c39 100644 (file)
@@ -74,18 +74,7 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
         start = time.time()
         if self.__optuna_hyperopt:
             study_name = str(dk.pair)
-            storage_dir = str(dk.full_path)
-            storage_type = self.__optuna_config.get("storage_type", "sqlite")
-            if storage_type == "sqlite":
-                storage = (
-                    f"sqlite:///{storage_dir}/optuna-{sanitize_path(study_name)}.sqlite"
-                )
-            elif storage_type == "file":
-                storage = optuna.storages.JournalStorage(
-                    optuna.storages.journal.JournalFileBackend(
-                        f"{storage_dir}/optuna-{sanitize_path(study_name)}.log"
-                    )
-                )
+            storage = self.get_optuna_storage(dk)
             pruner = optuna.pruners.HyperbandPruner()
             study = optuna.create_study(
                 study_name=study_name,
@@ -238,6 +227,21 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
 
         return eval_set, eval_weights
 
+    def get_optuna_storage(self, dk: FreqaiDataKitchen):
+        storage_dir = str(dk.full_path)
+        storage_type = self.__optuna_config.get("storage_type", "sqlite")
+        if storage_type == "sqlite":
+            storage = (
+                f"sqlite:///{storage_dir}/optuna-{sanitize_path(str(dk.pair))}.sqlite"
+            )
+        elif storage_type == "file":
+            storage = optuna.storages.JournalStorage(
+                optuna.storages.journal.JournalFileBackend(
+                    f"{storage_dir}/optuna-{sanitize_path(str(dk.pair))}.log"
+                )
+            )
+        return storage
+
 
 def min_max_pred(
     pred_df: pd.DataFrame, fit_live_predictions_candles: int, label_period_candles: int
@@ -259,9 +263,11 @@ def __min_max_pred(
         .apply(lambda col: col.sort_values(ascending=False, ignore_index=True))
     )
 
-    frequency = fit_live_predictions_candles / label_period_candles
-    min_pred = pred_df_sorted.iloc[-int(frequency) :].median()
-    max_pred = pred_df_sorted.iloc[: int(frequency)].median()
+    label_period_frequency: int = int(
+        fit_live_predictions_candles / label_period_candles
+    )
+    min_pred = pred_df_sorted.iloc[-label_period_frequency:].median()
+    max_pred = pred_df_sorted.iloc[:label_period_frequency].median()
     return min_pred["&s-extrema"], max_pred["&s-extrema"]