]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): disable label period hyperopt until proper solution is
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 20 Feb 2025 06:29:47 +0000 (07:29 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 20 Feb 2025 06:29:47 +0000 (07:29 +0100)
found

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/config-template.json
quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py
quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py
quickadapter/user_data/strategies/QuickAdapterV3.py

index 5c77e1fdfb8280b49850d76db403d175d6e6e0ba..64dca39e5074619c43571c8b1f38d53e94fdb63e 100644 (file)
       "DI_cutoff": 2,
       "&s-minima_threshold": -2,
       "&s-maxima_threshold": 2,
-      "label_period_candles": 100,
+      // "label_period_candles": 100,
       "hp_rmse": -1,
       "period_rmse": -1
     },
index 2dfcfb9e15fd8ec1a9e0717e26b9928bdb23302c..460e743a3915e43f70a2df8df7ee10c4bef5ee59 100644 (file)
@@ -127,12 +127,12 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
                 y_test = y_test.tail(test_window)
                 test_weights = test_weights[-test_window:]
 
-                # FIXME: find a better way to propagate optuna computed params to strategy
-                if dk.pair not in self.freqai_info["feature_parameters"]:
-                    self.freqai_info["feature_parameters"][dk.pair] = {}
-                self.freqai_info["feature_parameters"][dk.pair][
-                    "label_period_candles"
-                ] = self.__optuna_period_params[dk.pair].get("label_period_candles")
+                # FIXME: find a better way to propagate optuna computed params to strategy
+                if dk.pair not in self.freqai_info["feature_parameters"]:
+                    self.freqai_info["feature_parameters"][dk.pair] = {}
+                self.freqai_info["feature_parameters"][dk.pair][
+                    "label_period_candles"
+                ] = self.__optuna_period_params[dk.pair].get("label_period_candles")
 
         model = LGBMRegressor(
             objective="regression", metric="rmse", **model_training_parameters
@@ -178,12 +178,13 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
             dk.data["extra_returns_per_train"][MINIMA_THRESHOLD_COLUMN] = -2
             dk.data["extra_returns_per_train"][MAXIMA_THRESHOLD_COLUMN] = 2
         else:
-            if self.__optuna_hyperopt:
-                label_period_candles = self.__optuna_period_params.get(pair, {}).get(
-                    "label_period_candles", self.ft_params["label_period_candles"]
-                )
-            else:
-                label_period_candles = self.ft_params["label_period_candles"]
+            # if self.__optuna_hyperopt:
+            #     label_period_candles = self.__optuna_period_params.get(pair, {}).get(
+            #         "label_period_candles", self.ft_params["label_period_candles"]
+            #     )
+            # else:
+            #     label_period_candles = self.ft_params["label_period_candles"]
+            label_period_candles = self.ft_params["label_period_candles"]
             min_pred, max_pred = self.min_max_pred(
                 pred_df_full,
                 num_candles,
@@ -222,11 +223,11 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
         dk.data["extra_returns_per_train"]["DI_value_param3"] = f[2]
         dk.data["extra_returns_per_train"]["DI_cutoff"] = cutoff
 
-        dk.data["extra_returns_per_train"]["label_period_candles"] = (
-            self.__optuna_period_params.get(pair, {}).get(
-                "label_period_candles", self.ft_params["label_period_candles"]
-            )
-        )
+        dk.data["extra_returns_per_train"]["label_period_candles"] = (
+            self.__optuna_period_params.get(pair, {}).get(
+                "label_period_candles", self.ft_params["label_period_candles"]
+            )
+        )
         dk.data["extra_returns_per_train"]["hp_rmse"] = self.__optuna_hp_rmse.get(
             pair, -1
         )
@@ -399,7 +400,6 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
                     y_test,
                     test_weights,
                     self.data_split_parameters.get("test_size", TEST_SIZE),
-                    self.freqai_info.get("fit_live_predictions_candles", 100),
                     self.__optuna_config.get("candles_step", 100),
                     model_training_parameters,
                 ),
@@ -529,7 +529,6 @@ def period_objective(
     y_test,
     test_weights,
     test_size,
-    fit_live_predictions_candles,
     candles_step,
     model_training_parameters,
 ) -> float:
@@ -572,23 +571,6 @@ def period_objective(
     )
     y_pred = model.predict(X_test)
 
-    min_label_period_candles = int(fit_live_predictions_candles / 6)
-    max_label_period_candles = int(fit_live_predictions_candles / 2)
-    label_period_candles = trial.suggest_int(
-        "label_period_candles",
-        min_label_period_candles,
-        max_label_period_candles,
-    )
-    y_pred = pd.Series(y_pred)
-    min_length = min(len(y_test), len(y_pred))
-    remaining_candles = min_length % label_period_candles
-    if remaining_candles:
-        y_test = y_test.iloc[remaining_candles:]
-        y_pred = y_pred.iloc[remaining_candles:]
-    indices = range(0, min_length, label_period_candles)
-    y_test = [y_test.iloc[i : i + label_period_candles] for i in indices]
-    y_pred = [y_pred.iloc[i : i + label_period_candles] for i in indices]
-
     error = sklearn.metrics.root_mean_squared_error(y_test, y_pred)
 
     return error
index 077c456b5516f4c93556e6860e802aa19b042774..75e77d92c818c9e250a8b0b7c28410f65f46c3fd 100644 (file)
@@ -127,12 +127,12 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
                 y_test = y_test.tail(test_window)
                 test_weights = test_weights[-test_window:]
 
-                # FIXME: find a better way to propagate optuna computed params to strategy
-                if dk.pair not in self.freqai_info["feature_parameters"]:
-                    self.freqai_info["feature_parameters"][dk.pair] = {}
-                self.freqai_info["feature_parameters"][dk.pair][
-                    "label_period_candles"
-                ] = self.__optuna_period_params[dk.pair].get("label_period_candles")
+                # FIXME: find a better way to propagate optuna computed params to strategy
+                if dk.pair not in self.freqai_info["feature_parameters"]:
+                    self.freqai_info["feature_parameters"][dk.pair] = {}
+                self.freqai_info["feature_parameters"][dk.pair][
+                    "label_period_candles"
+                ] = self.__optuna_period_params[dk.pair].get("label_period_candles")
 
         model = XGBRegressor(
             objective="reg:squarederror",
@@ -179,12 +179,13 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
             dk.data["extra_returns_per_train"][MINIMA_THRESHOLD_COLUMN] = -2
             dk.data["extra_returns_per_train"][MAXIMA_THRESHOLD_COLUMN] = 2
         else:
-            if self.__optuna_hyperopt:
-                label_period_candles = self.__optuna_period_params.get(pair, {}).get(
-                    "label_period_candles", self.ft_params["label_period_candles"]
-                )
-            else:
-                label_period_candles = self.ft_params["label_period_candles"]
+            # if self.__optuna_hyperopt:
+            #     label_period_candles = self.__optuna_period_params.get(pair, {}).get(
+            #         "label_period_candles", self.ft_params["label_period_candles"]
+            #     )
+            # else:
+            #     label_period_candles = self.ft_params["label_period_candles"]
+            label_period_candles = self.ft_params["label_period_candles"]
             min_pred, max_pred = self.min_max_pred(
                 pred_df_full,
                 num_candles,
@@ -223,11 +224,11 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
         dk.data["extra_returns_per_train"]["DI_value_param3"] = f[2]
         dk.data["extra_returns_per_train"]["DI_cutoff"] = cutoff
 
-        dk.data["extra_returns_per_train"]["label_period_candles"] = (
-            self.__optuna_period_params.get(pair, {}).get(
-                "label_period_candles", self.ft_params["label_period_candles"]
-            )
-        )
+        dk.data["extra_returns_per_train"]["label_period_candles"] = (
+            self.__optuna_period_params.get(pair, {}).get(
+                "label_period_candles", self.ft_params["label_period_candles"]
+            )
+        )
         dk.data["extra_returns_per_train"]["hp_rmse"] = self.__optuna_hp_rmse.get(
             pair, -1
         )
@@ -400,7 +401,6 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel):
                     y_test,
                     test_weights,
                     self.data_split_parameters.get("test_size", TEST_SIZE),
-                    self.freqai_info.get("fit_live_predictions_candles", 100),
                     self.__optuna_config.get("candles_step", 100),
                     model_training_parameters,
                 ),
@@ -530,7 +530,6 @@ def period_objective(
     y_test,
     test_weights,
     test_size,
-    fit_live_predictions_candles,
     candles_step,
     model_training_parameters,
 ) -> float:
@@ -576,23 +575,6 @@ def period_objective(
     )
     y_pred = model.predict(X_test)
 
-    min_label_period_candles = int(fit_live_predictions_candles / 6)
-    max_label_period_candles = int(fit_live_predictions_candles / 2)
-    label_period_candles = trial.suggest_int(
-        "label_period_candles",
-        min_label_period_candles,
-        max_label_period_candles,
-    )
-    y_pred = pd.Series(y_pred)
-    min_length = min(len(y_test), len(y_pred))
-    remaining_candles = min_length % label_period_candles
-    if remaining_candles:
-        y_test = y_test.iloc[remaining_candles:]
-        y_pred = y_pred.iloc[remaining_candles:]
-    indices = range(0, min_length, label_period_candles)
-    y_test = [y_test.iloc[i : i + label_period_candles] for i in indices]
-    y_pred = [y_pred.iloc[i : i + label_period_candles] for i in indices]
-
     error = sklearn.metrics.root_mean_squared_error(y_test, y_pred)
 
     return error
index f39ff5ca6e1a9dfbfd2102417ca455a5a49d8239..13cb7e6d0db6c165ce98fb288fdc92726495a4fa 100644 (file)
@@ -240,14 +240,15 @@ class QuickAdapterV3(IStrategy):
 
     def set_freqai_targets(self, dataframe, metadata, **kwargs):
         pair = str(metadata.get("pair"))
-        label_period_candles = (
-            self.freqai_info["feature_parameters"]
-            .get(pair, {})
-            .get(
-                "label_period_candles",
-                self.freqai_info["feature_parameters"]["label_period_candles"],
-            )
-        )
+        # label_period_candles = (
+        #     self.freqai_info["feature_parameters"]
+        #     .get(pair, {})
+        #     .get(
+        #         "label_period_candles",
+        #         self.freqai_info["feature_parameters"]["label_period_candles"],
+        #     )
+        # )
+        label_period_candles = self.freqai_info["feature_parameters"]["label_period_candles"]
         dataframe[EXTREMA_COLUMN] = 0
         min_peaks, _ = find_peaks(
             -dataframe["low"].values,