From d974fce65c1e4aa355f8f4b3038e9d441defd90a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 27 Jun 2025 19:58:46 +0200 Subject: [PATCH] refactor(qav3): add HPO search space expansion as a tunable MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 13 +++++++------ quickadapter/user_data/strategies/Utils.py | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index dc907f7..1276aca 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -67,6 +67,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): "n_trials": 36, "timeout": 7200, "candles_step": 10, + "expansion_factor": 0.4, "seed": 1, } return { @@ -1240,7 +1241,7 @@ def get_optuna_study_model_parameters( } ranges = copy.deepcopy(default_ranges) - expansion_factor = 0.4 # ±40% + expansion_factor = self._optuna_config.get("expansion_factor") if model_training_best_parameters: for param, (default_min, default_max) in default_ranges.items(): center_value = model_training_best_parameters.get(param) @@ -1415,7 +1416,7 @@ def zigzag( pivots_indices: list[int] = [] pivots_values: list[float] = [] pivots_directions: list[TrendDirection] = [] - pivots_scaled_natrs: list[float] = [] + pivots_thresholds: list[float] = [] last_pivot_pos: int = -1 candidate_pivot_pos: int = -1 @@ -1465,7 +1466,7 @@ def zigzag( pivots_indices.append(indices[pos]) pivots_values.append(value) pivots_directions.append(direction) - pivots_scaled_natrs.append(thresholds[pos]) + pivots_thresholds.append(thresholds[pos]) last_pivot_pos = pos reset_candidate_pivot() @@ -1613,7 +1614,7 @@ def zigzag( ) state = TrendDirection.UP - return pivots_indices, pivots_values, pivots_directions, pivots_scaled_natrs + return pivots_indices, pivots_values, pivots_directions, pivots_thresholds @lru_cache(maxsize=8) @@ -1679,13 +1680,13 @@ def label_objective( if df.empty: return -np.inf, -np.inf - _, pivots_values, _, pivots_scaled_natrs = zigzag( + _, pivots_values, _, pivots_thresholds = zigzag( df, natr_period=label_period_candles, natr_ratio=label_natr_ratio, ) - return np.median(pivots_scaled_natrs), len(pivots_values) + return np.median(pivots_thresholds), len(pivots_values) def smoothed_max(series: pd.Series, temperature=1.0) -> float: diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 11fcc31..3c42ffa 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -422,7 +422,7 @@ def zigzag( pivots_indices: list[int] = [] pivots_values: list[float] = [] pivots_directions: list[TrendDirection] = [] - pivots_scaled_natrs: list[float] = [] + pivots_thresholds: list[float] = [] last_pivot_pos: int = -1 candidate_pivot_pos: int = -1 @@ -472,7 +472,7 @@ def zigzag( pivots_indices.append(indices[pos]) pivots_values.append(value) pivots_directions.append(direction) - pivots_scaled_natrs.append(thresholds[pos]) + pivots_thresholds.append(thresholds[pos]) last_pivot_pos = pos reset_candidate_pivot() @@ -620,4 +620,4 @@ def zigzag( ) state = TrendDirection.UP - return pivots_indices, pivots_values, pivots_directions, pivots_scaled_natrs + return pivots_indices, pivots_values, pivots_directions, pivots_thresholds -- 2.43.0