]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): fine tune HPO
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 15 Feb 2025 13:29:18 +0000 (14:29 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 15 Feb 2025 13:29:18 +0000 (14:29 +0100)
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 c1d4c4f5d45546d9e403bd61141431a3e2fccea1..2c89c5cbfdf0b53928c059e57c0927e98df9c3ec 100644 (file)
       // "device": "gpu",
       // "use_rmm:": true,
       "n_jobs": 6, // set to number of CPU threads / 4
+      "n_estimators": 1000,
       "verbosity": 1
     }
   },
index be60babb15014bcd8bebf4503be0ac1301ff044b..1ca845323a65449a8344ede02c604b2a648f66d3 100644 (file)
@@ -119,7 +119,9 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel):
                     "label_period_candles"
                 ] = self.__optuna_period_params[dk.pair].get("label_period_candles")
 
-        model = LGBMRegressor(objective="rmse", **model_training_parameters)
+        model = LGBMRegressor(
+            objective="regression", metric="rmse", **model_training_parameters
+        )
 
         eval_set, eval_weights = self.eval_set_and_weights(X_test, y_test, test_weights)
 
@@ -460,7 +462,9 @@ def period_objective(
     test_weights = test_weights[-test_window:]
 
     # Fit the model
-    model = LGBMRegressor(objective="rmse", **model_training_parameters)
+    model = LGBMRegressor(
+        objective="regression", metric="rmse", **model_training_parameters
+    )
     model.fit(
         X=X,
         y=y,
@@ -491,10 +495,10 @@ def hp_objective(
     trial, X, y, train_weights, X_test, y_test, test_weights, model_training_parameters
 ) -> float:
     study_parameters = {
-        # "n_estimators": trial.suggest_int("n_estimators", 100, 800),
         "num_leaves": trial.suggest_int("num_leaves", 2, 256),
         "learning_rate": trial.suggest_float("learning_rate", 1e-3, 0.3, log=True),
         "min_child_samples": trial.suggest_int("min_child_samples", 5, 100),
+        "min_child_weight": trial.suggest_int("min_child_weight", 1, 200),
         "subsample": trial.suggest_float("subsample", 0.6, 1.0),
         "colsample_bytree": trial.suggest_float("colsample_bytree", 0.6, 1.0),
         "reg_alpha": trial.suggest_float("reg_alpha", 1e-8, 10.0, log=True),
@@ -503,7 +507,9 @@ def hp_objective(
     model_training_parameters = {**model_training_parameters, **study_parameters}
 
     # Fit the model
-    model = LGBMRegressor(objective="rmse", **model_training_parameters)
+    model = LGBMRegressor(
+        objective="regression", metric="rmse", **model_training_parameters
+    )
     model.fit(
         X=X,
         y=y,
index de7e48033edf665ad5a659bb6bcb0da44cd03eb8..27e4e4848f3a826da6c5fd99c20fa8bd1c0c3f8d 100644 (file)
@@ -499,10 +499,9 @@ def hp_objective(
     trial, X, y, train_weights, X_test, y_test, test_weights, model_training_parameters
 ) -> float:
     study_parameters = {
-        # "n_estimators": trial.suggest_int("n_estimators", 100, 800),
         "learning_rate": trial.suggest_float("learning_rate", 1e-3, 0.3, log=True),
-        "max_depth": trial.suggest_int("max_depth", 3, 12),
-        "gamma": trial.suggest_float("gamma", 0, 2),
+        "max_depth": trial.suggest_int("max_depth", 3, 18),
+        "min_child_weight": trial.suggest_int("min_child_weight", 1, 200),
         "subsample": trial.suggest_float("subsample", 0.6, 1.0),
         "colsample_bytree": trial.suggest_float("colsample_bytree", 0.6, 1.0),
         "reg_alpha": trial.suggest_float("reg_alpha", 1e-8, 10.0, log=True),
index a5b4e8cb27cd10122ea1c7debf6babcbeb6772c0..9cfa1d91686ba05d7b88aebeb859b651c39e2f48 100644 (file)
@@ -89,6 +89,9 @@ class QuickAdapterV3(IStrategy):
 
     @property
     def protections(self):
+        fit_live_predictions_candles = self.freqai_info.get(
+            "fit_live_predictions_candles", 100
+        )
         return [
             {"method": "CooldownPeriod", "stop_duration_candles": 4},
             {
@@ -100,13 +103,9 @@ class QuickAdapterV3(IStrategy):
             },
             {
                 "method": "StoplossGuard",
-                "lookback_period_candles": self.freqai_info.get(
-                    "fit_live_predictions_candles", 100
-                ),
+                "lookback_period_candles": fit_live_predictions_candles,
                 "trade_limit": 1,
-                "stop_duration_candles": self.freqai_info.get(
-                    "fit_live_predictions_candles", 100
-                ),
+                "stop_duration_candles": fit_live_predictions_candles,
                 "only_per_pair": True,
             },
         ]