]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): cleanup tunables default building
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 31 Oct 2025 16:29:02 +0000 (17:29 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 31 Oct 2025 16:29:02 +0000 (17:29 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/QuickAdapterV3.py
quickadapter/user_data/strategies/Utils.py

index 2c982daa9ed99c0945c7b0e984071792661d190f..7378613086d3d8b0293cd63c9c32f9aa52bdb833 100644 (file)
@@ -24,14 +24,12 @@ from Utils import (
     calculate_n_extrema,
     fit_regressor,
     format_number,
+    get_label_defaults,
     get_min_max_label_period_candles,
     get_optuna_callbacks,
     get_optuna_study_model_parameters,
-    midpoint,
     soft_extremum,
-    validate_range,
     zigzag,
-    get_label_defaults,
 )
 
 debug = False
@@ -64,7 +62,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
     https://github.com/sponsors/robcaulk
     """
 
-    version = "3.7.119"
+    version = "3.7.120"
 
     @cached_property
     def _optuna_config(self) -> dict[str, Any]:
@@ -195,7 +193,9 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
         self._optuna_label_candle: dict[str, int] = {}
         self._optuna_label_candles: dict[str, int] = {}
         self._optuna_label_incremented_pairs: list[str] = []
-        self._default_label_natr_ratio, self._default_label_period_candles = get_label_defaults(self.ft_params, logger)
+        self._default_label_natr_ratio, self._default_label_period_candles = (
+            get_label_defaults(self.ft_params, logger)
+        )
         for pair in self.pairs:
             self._optuna_hp_value[pair] = -1
             self._optuna_train_value[pair] = -1
@@ -233,7 +233,6 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
             f"Initialized {self.__class__.__name__} {self.freqai_info.get('regressor', 'xgboost')} regressor model version {self.version}"
         )
 
-
     def get_optuna_params(self, pair: str, namespace: str) -> dict[str, Any]:
         if namespace == "hp":
             params = self._optuna_hp_params.get(pair)
index 9a63d6817e04fef395cb2a6273662bb1624f4680..7696627c83265364b4bab0c9eb312451bc04dc5d 100644 (file)
@@ -28,8 +28,8 @@ from Utils import (
     format_number,
     get_callable_sha256,
     get_distance,
+    get_label_defaults,
     get_zl_ma_fn,
-    midpoint,
     non_zero_diff,
     price_retracement_percent,
     smooth_extrema,
@@ -38,8 +38,6 @@ from Utils import (
     vwapb,
     zigzag,
     zlema,
-    get_label_defaults,
-
 )
 
 debug = False
@@ -70,7 +68,6 @@ class QuickAdapterV3(IStrategy):
 
     INTERFACE_VERSION = 3
 
-
     def version(self) -> str:
         return "3.3.164"
 
@@ -235,21 +232,22 @@ class QuickAdapterV3(IStrategy):
             / "models"
             / self.freqai_info.get("identifier")
         )
-        self._default_label_natr_ratio, self._default_label_period_candles = get_label_defaults(self.freqai_info.get("feature_parameters", {}), logger)
+        feature_parameters = self.freqai_info.get("feature_parameters", {})
+        self._default_label_natr_ratio, self._default_label_period_candles = (
+            get_label_defaults(feature_parameters, logger)
+        )
         self._label_params: dict[str, dict[str, Any]] = {}
         for pair in self.pairs:
             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.get(
-                        "feature_parameters", {}
-                    ).get(
+                    "label_period_candles": feature_parameters.get(
                         "label_period_candles",
                         self._default_label_period_candles,
                     ),
                     "label_natr_ratio": float(
-                        self.freqai_info.get("feature_parameters", {}).get(
+                        feature_parameters.get(
                             "label_natr_ratio",
                             self._default_label_natr_ratio,
                         )
@@ -336,7 +334,6 @@ class QuickAdapterV3(IStrategy):
             format_number(self._reversal_max_natr_ratio_percent),
         )
 
-
     def feature_engineering_expand_all(
         self, dataframe: DataFrame, period: int, metadata: dict[str, Any], **kwargs
     ) -> DataFrame:
index 7b34ad8088159c825f3b263728921dd07f244be0..20ba8cab9e058ffbb3e6ae9ff86e9a4491bd2a50 100644 (file)
@@ -1179,17 +1179,15 @@ def validate_range(
     return sanitized_min, sanitized_max
 
 
-def get_label_defaults(params_dict: dict[str, Any], logger: Logger) -> tuple[float, int]:
-    """Compute default label_natr_ratio and label_period_candles.
-
-    Reads min/max ranges from params_dict (feature/ft params) and validates them with
-    validate_range, then returns midpoint defaults.
-    """
-    feature_parameters = params_dict or {}
-
-    # NATR ratio defaults
-    default_min_label_natr_ratio = 9.0
-    default_max_label_natr_ratio = 12.0
+def get_label_defaults(
+    feature_parameters: dict[str, Any],
+    logger: Logger,
+    *,
+    default_min_label_period_candles: int = 12,
+    default_max_label_period_candles: int = 24,
+    default_min_label_natr_ratio: float = 9.0,
+    default_max_label_natr_ratio: float = 12.0,
+) -> tuple[float, int]:
     min_label_natr_ratio = feature_parameters.get(
         "min_label_natr_ratio", default_min_label_natr_ratio
     )
@@ -1207,11 +1205,10 @@ def get_label_defaults(params_dict: dict[str, Any], logger: Logger) -> tuple[flo
         non_negative=True,
         finite_only=True,
     )
-    default_label_natr_ratio = float(midpoint(min_label_natr_ratio, max_label_natr_ratio))
+    default_label_natr_ratio = float(
+        midpoint(min_label_natr_ratio, max_label_natr_ratio)
+    )
 
-    # Period candles defaults
-    default_min_label_period_candles = 12
-    default_max_label_period_candles = 24
     min_label_period_candles = feature_parameters.get(
         "min_label_period_candles", default_min_label_period_candles
     )