]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): optimize labeling window over the whole test data
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 31 Mar 2025 19:23:06 +0000 (21:23 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 31 Mar 2025 19:23:06 +0000 (21:23 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV3.py
quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV3.py

index 9c8ffa8c8078dc1222d5e367d8d8beb024efa1e5..c1d1ba21c286e6bada0d8cd0051c2d881592860d 100644 (file)
@@ -43,7 +43,7 @@ class LightGBMRegressorQuickAdapterV3(BaseRegressionModel):
     https://github.com/sponsors/robcaulk
     """
 
-    version = "3.6.1"
+    version = "3.6.2"
 
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
@@ -606,8 +606,9 @@ def period_objective(
     y_pred = model.predict(X_test)
 
     min_label_period_candles: int = max(fit_live_predictions_candles // 20, 20)
-    max_label_period_candles: int = max(
-        fit_live_predictions_candles // 6, min_label_period_candles
+    max_label_period_candles: int = min(
+        max(fit_live_predictions_candles // 6, min_label_period_candles),
+        test_window // 2,
     )
     label_period_candles: int = trial.suggest_int(
         "label_period_candles",
@@ -615,21 +616,23 @@ def period_objective(
         max_label_period_candles,
         step=candles_step,
     )
-    label_window: int = label_period_candles * 2
+    label_window_length: int = label_period_candles * 2
     label_windows_length: int = (
-        fit_live_predictions_candles // label_window
-    ) * label_window
+        test_window // label_window_length
+    ) * label_window_length
+    if label_windows_length == 0 or label_window_length > test_window:
+        return float("inf")
     y_test_period = [
-        y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
     test_weights_period = [
-        test_weights[-label_windows_length:][i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        test_weights[-label_windows_length:][i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
     y_pred_period = [
-        y_pred[-label_windows_length:][i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        y_pred[-label_windows_length:][i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
 
     errors = [
index 4084296176fa338a1fec657ece75110796337392..3b5e5f6b42fd5389efc3e9bf2bf8d1373185ddf2 100644 (file)
@@ -43,7 +43,7 @@ class XGBoostRegressorQuickAdapterV3(BaseRegressionModel):
     https://github.com/sponsors/robcaulk
     """
 
-    version = "3.6.1"
+    version = "3.6.2"
 
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
@@ -614,8 +614,9 @@ def period_objective(
     y_pred = model.predict(X_test)
 
     min_label_period_candles: int = max(fit_live_predictions_candles // 20, 20)
-    max_label_period_candles: int = max(
-        fit_live_predictions_candles // 6, min_label_period_candles
+    max_label_period_candles: int = min(
+        max(fit_live_predictions_candles // 6, min_label_period_candles),
+        test_window // 2,
     )
     label_period_candles: int = trial.suggest_int(
         "label_period_candles",
@@ -623,21 +624,23 @@ def period_objective(
         max_label_period_candles,
         step=candles_step,
     )
-    label_window: int = label_period_candles * 2
+    label_window_length: int = label_period_candles * 2
     label_windows_length: int = (
-        fit_live_predictions_candles // label_window
-    ) * label_window
+        test_window // label_window_length
+    ) * label_window_length
+    if label_windows_length == 0 or label_window_length > test_window:
+        return float("inf")
     y_test_period = [
-        y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        y_test.iloc[-label_windows_length:].to_numpy()[i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
     test_weights_period = [
-        test_weights[-label_windows_length:][i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        test_weights[-label_windows_length:][i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
     y_pred_period = [
-        y_pred[-label_windows_length:][i : i + label_window]
-        for i in range(0, label_windows_length, label_window)
+        y_pred[-label_windows_length:][i : i + label_window_length]
+        for i in range(0, label_windows_length, label_window_length)
     ]
 
     errors = [