From 6745d187f995b9a99229f8f8651581f0919d7900 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 19 May 2025 11:44:48 +0200 Subject: [PATCH] fix(qav3): handle volality close to zero at pivot labeling MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 15 +++++++++------ .../user_data/strategies/QuickAdapterV3.py | 2 +- quickadapter/user_data/strategies/Utils.py | 13 ++++++++----- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 12f765c..7a2fcbc 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.42" + version = "3.7.43" @cached_property def _optuna_config(self) -> dict: @@ -1026,11 +1026,14 @@ def zigzag( if len(next_closes) >= 2: log_next_closes = np.log(next_closes) log_next_closes_std = np.std(log_next_closes) - weights = np.linspace(0.5, 1.5, len(log_next_closes)) - log_next_slope = np.polyfit( - range(len(log_next_closes)), log_next_closes, 1, w=weights - )[0] - next_slope_strength = log_next_slope / log_next_closes_std + if np.isclose(log_next_closes_std, 0): + next_slope_strength = 0 + else: + weights = np.linspace(0.5, 1.5, len(log_next_closes)) + log_next_slope = np.polyfit( + range(len(log_next_closes)), log_next_closes, 1, w=weights + )[0] + next_slope_strength = log_next_slope / log_next_closes_std min_slope_strength = calculate_min_slope_strength(candidate_pivot_pos) if direction == TrendDirection.DOWN: slope_ok = next_slope_strength < -min_slope_strength diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 0b203fe..597eef5 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.40" + return "3.3.41" timeframe = "5m" diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index eb47cc1..d6d7629 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -523,11 +523,14 @@ def zigzag( if len(next_closes) >= 2: log_next_closes = np.log(next_closes) log_next_closes_std = np.std(log_next_closes) - weights = np.linspace(0.5, 1.5, len(log_next_closes)) - log_next_slope = np.polyfit( - range(len(log_next_closes)), log_next_closes, 1, w=weights - )[0] - next_slope_strength = log_next_slope / log_next_closes_std + if np.isclose(log_next_closes_std, 0): + next_slope_strength = 0 + else: + weights = np.linspace(0.5, 1.5, len(log_next_closes)) + log_next_slope = np.polyfit( + range(len(log_next_closes)), log_next_closes, 1, w=weights + )[0] + next_slope_strength = log_next_slope / log_next_closes_std min_slope_strength = calculate_min_slope_strength(candidate_pivot_pos) if direction == TrendDirection.DOWN: slope_ok = next_slope_strength < -min_slope_strength -- 2.43.0