]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): fine tune labeling window optimization
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 5 Mar 2025 14:33:55 +0000 (15:33 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 5 Mar 2025 14:33:55 +0000 (15:33 +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 1fdd0906a6dab4cedd0014216cf3e85a37a7c461..c2727f74d04302198987481424560437583ee30e 100644 (file)
@@ -553,9 +553,7 @@ def period_objective(
     model_training_parameters,
 ) -> float:
     min_train_window: int = fit_live_predictions_candles * 2
-    max_train_window: int = (
-        len(X) if len(X) > min_train_window else (min_train_window + len(X))
-    )
+    max_train_window: int = max(len(X), min_train_window)
     train_window = trial.suggest_int(
         "train_period_candles", min_train_window, max_train_window, step=candles_step
     )
@@ -564,11 +562,7 @@ def period_objective(
     train_weights = train_weights[-train_window:]
 
     min_test_window: int = int(min_train_window * test_size)
-    max_test_window: int = (
-        len(X_test)
-        if len(X_test) > min_test_window
-        else (min_test_window + len(X_test))
-    )
+    max_test_window: int = max(len(X_test), min_test_window)
     test_window = trial.suggest_int(
         "test_period_candles", min_test_window, max_test_window, step=candles_step
     )
@@ -591,12 +585,15 @@ def period_objective(
     )
     y_pred = model.predict(X_test)
 
-    min_label_period_candles: int = fit_live_predictions_candles // 60
-    max_label_period_candles: int = fit_live_predictions_candles // 6
+    min_label_period_candles: int = max(fit_live_predictions_candles // 200, 10)
+    max_label_period_candles: int = max(
+        fit_live_predictions_candles // 6, min_label_period_candles
+    )
     label_period_candles = trial.suggest_int(
         "label_period_candles",
         min_label_period_candles,
         max_label_period_candles,
+        step=candles_step,
     )
     y_test_length = len(y_test)
     y_pred_length = len(y_pred)
index da05210d9cb519eca039d16f8926625dbbfbc97d..e70f0caea7c8d25fbcf3ab0638f73816b3b3f245 100644 (file)
@@ -554,9 +554,7 @@ def period_objective(
     model_training_parameters,
 ) -> float:
     min_train_window: int = fit_live_predictions_candles * 2
-    max_train_window: int = (
-        len(X) if len(X) > min_train_window else (min_train_window + len(X))
-    )
+    max_train_window: int = max(len(X), min_train_window)
     train_window = trial.suggest_int(
         "train_period_candles", min_train_window, max_train_window, step=candles_step
     )
@@ -565,11 +563,7 @@ def period_objective(
     train_weights = train_weights[-train_window:]
 
     min_test_window: int = int(min_train_window * test_size)
-    max_test_window: int = (
-        len(X_test)
-        if len(X_test) > min_test_window
-        else (min_test_window + len(X_test))
-    )
+    max_test_window: int = max(len(X_test), min_test_window)
     test_window = trial.suggest_int(
         "test_period_candles", min_test_window, max_test_window, step=candles_step
     )
@@ -595,12 +589,15 @@ def period_objective(
     )
     y_pred = model.predict(X_test)
 
-    min_label_period_candles: int = fit_live_predictions_candles // 60
-    max_label_period_candles: int = fit_live_predictions_candles // 6
+    min_label_period_candles: int = max(fit_live_predictions_candles // 200, 10)
+    max_label_period_candles: int = max(
+        fit_live_predictions_candles // 6, min_label_period_candles
+    )
     label_period_candles = trial.suggest_int(
         "label_period_candles",
         min_label_period_candles,
         max_label_period_candles,
+        step=candles_step,
     )
     y_test_length = len(y_test)
     y_pred_length = len(y_pred)