]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix(qav3): safe initialization of HPO properties
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 9 Apr 2025 15:14:50 +0000 (17:14 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 9 Apr 2025 15:14:50 +0000 (17:14 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/QuickAdapterV3.py

index cfa5a5b927cd60aee5647a92eca4119a2033d783..e1c9d77dcf37fd803e801bda68649206c461a256 100644 (file)
@@ -44,7 +44,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
     https://github.com/sponsors/robcaulk
     """
 
-    version = "3.7.1"
+    version = "3.7.2"
 
     @cached_property
     def _optuna_config(self) -> dict:
@@ -96,17 +96,25 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
             self._optuna_train_rmse[pair] = -1
             self._optuna_label_values[pair] = [-1, -1]
             self._optuna_hp_params[pair] = (
-                self.optuna_load_best_params(pair, "hp") or {}
+                self.optuna_load_best_params(pair, "hp")
+                if self.optuna_load_best_params(pair, "hp")
+                else {}
             )
             self._optuna_train_params[pair] = (
-                self.optuna_load_best_params(pair, "train") or {}
+                self.optuna_load_best_params(pair, "train")
+                if self.optuna_load_best_params(pair, "train")
+                else {}
+            )
+            self._optuna_label_params[pair] = (
+                self.optuna_load_best_params(pair, "label")
+                if self.optuna_load_best_params(pair, "label")
+                else {
+                    "label_period_candles": self.ft_params.get(
+                        "label_period_candles", 50
+                    ),
+                    "label_natr_ratio": self.ft_params.get("label_natr_ratio", 0.075),
+                }
             )
-            self._optuna_label_params[pair] = self.optuna_load_best_params(
-                pair, "label"
-            ) or {
-                "label_period_candles": self.ft_params.get("label_period_candles", 50),
-                "label_natr_ratio": self.ft_params.get("label_natr_ratio", 0.075),
-            }
         logger.info(
             f"Initialized {self.__class__.__name__} {self.freqai_info.get('regressor', 'xgboost')} regressor model version {self.version}"
         )
index f333ecc5e9d690af354dfd1b956f4700fad93ab4..41e3e72abd18fc92dcd8e87e66b3adcaaedb5113 100644 (file)
@@ -58,7 +58,7 @@ class QuickAdapterV3(IStrategy):
     INTERFACE_VERSION = 3
 
     def version(self) -> str:
-        return "3.3.1"
+        return "3.3.2"
 
     timeframe = "5m"
 
@@ -175,14 +175,18 @@ class QuickAdapterV3(IStrategy):
         )
         self._label_params: dict[str, dict] = {}
         for pair in self.pairs:
-            self._label_params[pair] = self.optuna_load_best_params(pair, "label") or {
-                "label_period_candles": self.freqai_info["feature_parameters"].get(
-                    "label_period_candles", 50
-                ),
-                "label_natr_ratio": self.freqai_info["feature_parameters"].get(
-                    "label_natr_ratio", 0.075
-                ),
-            }
+            self._label_params[pair] = (
+                self.optuna_load_best_params(pair, "label")
+                if self.optuna_load_best_params(pair, "label")
+                else {
+                    "label_period_candles": self.freqai_info["feature_parameters"].get(
+                        "label_period_candles", 50
+                    ),
+                    "label_natr_ratio": self.freqai_info["feature_parameters"].get(
+                        "label_natr_ratio", 0.075
+                    ),
+                }
+            )
 
     def feature_engineering_expand_all(
         self, dataframe: DataFrame, period: int, metadata: dict, **kwargs
@@ -354,7 +358,9 @@ class QuickAdapterV3(IStrategy):
         return dataframe
 
     def get_label_period_candles(self, pair: str) -> int:
-        label_period_candles = self._label_params.get(pair).get("label_period_candles")
+        label_period_candles = self._label_params.get(pair, {}).get(
+            "label_period_candles"
+        )
         if label_period_candles:
             return label_period_candles
         return self.freqai_info["feature_parameters"].get("label_period_candles", 50)
@@ -364,7 +370,7 @@ class QuickAdapterV3(IStrategy):
             self._label_params[pair]["label_period_candles"] = label_period_candles
 
     def get_label_natr_ratio(self, pair: str) -> float:
-        label_natr_ratio = self._label_params.get(pair).get("label_natr_ratio")
+        label_natr_ratio = self._label_params.get(pair, {}).get("label_natr_ratio")
         if label_natr_ratio:
             return label_natr_ratio
         return self.freqai_info["feature_parameters"].get("label_natr_ratio", 0.075)