From a8d58caea6e60b15a7a43d13cf5eab3fdd56cb76 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 19 May 2025 16:47:54 +0200 Subject: [PATCH] perf(qav3): make label period contribute to pivot labeling confirmation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 27 +++++++++---------- .../user_data/strategies/QuickAdapterV3.py | 2 +- quickadapter/user_data/strategies/Utils.py | 19 ++++++------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index eb3135e..10dd4b5 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -45,7 +45,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): https://github.com/sponsors/robcaulk """ - version = "3.7.44" + version = "3.7.45" @cached_property def _optuna_config(self) -> dict: @@ -886,19 +886,17 @@ def zigzag( def calculate_depth_factor( pos: int, - lookback_period: int = 20, min_factor: float = 0.5, max_factor: float = 1.5, ) -> float: - start = max(0, pos - lookback_period) + start = max(0, pos - natr_period) end = min(pos + 1, n) if start >= end: return (min_factor + max_factor) / 2 natr_values = get_natr_values(natr_period) natr_pos = natr_values[pos] - lookback_natr = natr_values[start:end] - median_natr = np.median(lookback_natr) + median_natr = np.median(natr_values[start:end]) if np.isclose(median_natr, 0): return max_factor natr_ratio = natr_pos / median_natr @@ -931,14 +929,13 @@ def zigzag( def calculate_min_slope_strength( pos: int, - lookback_period: int = 20, - min_value: float = 0.5, - max_value: float = 1.5, + min_strength: float = 0.5, + max_strength: float = 1.5, ) -> float: - start = max(0, pos - lookback_period) + start = max(0, pos - natr_period) end = min(pos + 1, n) if start >= end: - return min_value + return min_strength natr_values = get_natr_values(natr_period) natr_pos = natr_values[pos] @@ -947,10 +944,10 @@ def zigzag( natr_max = np.max(lookback_natr) natr_range = natr_max - natr_min if np.isclose(natr_range, 0): - return min_value + return min_strength normalized_natr_pos = (natr_pos - natr_min) / natr_range - return min_value + (max_value - min_value) * normalized_natr_pos + return min_strength + (max_strength - min_strength) * normalized_natr_pos def update_candidate_pivot(pos: int, value: float, direction: TrendDirection): nonlocal candidate_pivot_pos, candidate_pivot_value, candidate_pivot_direction @@ -1154,10 +1151,10 @@ def label_objective( candles_step: int, ) -> tuple[float, int]: min_label_period_candles: int = round_to_nearest_int( - max(fit_live_predictions_candles // 16, 20), candles_step + max(fit_live_predictions_candles // 18, 20), candles_step ) max_label_period_candles: int = round_to_nearest_int( - max(fit_live_predictions_candles // 4, min_label_period_candles), + max(fit_live_predictions_candles // 2, min_label_period_candles), candles_step, ) label_period_candles = trial.suggest_int( @@ -1166,7 +1163,7 @@ def label_objective( max_label_period_candles, step=candles_step, ) - label_natr_ratio = trial.suggest_float("label_natr_ratio", 0.08, 0.25) + label_natr_ratio = trial.suggest_float("label_natr_ratio", 0.06, 0.3) df = df.iloc[ -( diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index e7bfda6..9c58b3a 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -58,7 +58,7 @@ class QuickAdapterV3(IStrategy): INTERFACE_VERSION = 3 def version(self) -> str: - return "3.3.42" + return "3.3.43" timeframe = "5m" diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 84f12a1..7237e32 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -383,19 +383,17 @@ def zigzag( def calculate_depth_factor( pos: int, - lookback_period: int = 20, min_factor: float = 0.5, max_factor: float = 1.5, ) -> float: - start = max(0, pos - lookback_period) + start = max(0, pos - natr_period) end = min(pos + 1, n) if start >= end: return (min_factor + max_factor) / 2 natr_values = get_natr_values(natr_period) natr_pos = natr_values[pos] - lookback_natr = natr_values[start:end] - median_natr = np.median(lookback_natr) + median_natr = np.median(natr_values[start:end]) if np.isclose(median_natr, 0): return max_factor natr_ratio = natr_pos / median_natr @@ -428,14 +426,13 @@ def zigzag( def calculate_min_slope_strength( pos: int, - lookback_period: int = 20, - min_value: float = 0.5, - max_value: float = 1.5, + min_strength: float = 0.5, + max_strength: float = 1.5, ) -> float: - start = max(0, pos - lookback_period) + start = max(0, pos - natr_period) end = min(pos + 1, n) if start >= end: - return min_value + return min_strength natr_values = get_natr_values(natr_period) natr_pos = natr_values[pos] @@ -444,10 +441,10 @@ def zigzag( natr_max = np.max(lookback_natr) natr_range = natr_max - natr_min if np.isclose(natr_range, 0): - return min_value + return min_strength normalized_natr_pos = (natr_pos - natr_min) / natr_range - return min_value + (max_value - min_value) * normalized_natr_pos + return min_strength + (max_strength - min_strength) * normalized_natr_pos def update_candidate_pivot(pos: int, value: float, direction: TrendDirection): nonlocal candidate_pivot_pos, candidate_pivot_value, candidate_pivot_direction -- 2.43.0