From d344fc742fc95725eac1b5f9d87647c89a8c4306 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 19 May 2025 02:30:02 +0200 Subject: [PATCH] fix(qav3): properly adapt slope strength min/max to log space 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/QuickAdapterV3.py | 2 +- quickadapter/user_data/strategies/Utils.py | 11 +++++------ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index dd79c6b..ba3d4a5 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.41" + version = "3.7.42" @cached_property def _optuna_config(self) -> dict: @@ -932,8 +932,8 @@ def zigzag( def calculate_min_slope_strength( pos: int, lookback_period: int = 20, - min_value: float = 0.03, - max_value: float = 0.07, + min_value: float = 0.5, + max_value: float = 1.5, ) -> float: start = max(0, pos - lookback_period) end = min(pos + 1, n) @@ -980,7 +980,6 @@ def zigzag( next_confirmation_pos: int, direction: TrendDirection, extrema_threshold: float = 0.85, - min_slope_volatility: float = 0.0095, move_away_ratio: float = 0.25, ) -> bool: next_start = next_confirmation_pos + 1 @@ -1024,9 +1023,9 @@ def zigzag( return False slope_ok = False - log_next_closes = np.log(next_closes) - log_next_closes_std = np.std(log_next_closes) - if len(next_closes) >= 2 and log_next_closes_std > min_slope_volatility: + 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 diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 2387ea7..d86d17e 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.38" + return "3.3.39" timeframe = "5m" diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 3e0d417..440edcd 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -429,8 +429,8 @@ def zigzag( def calculate_min_slope_strength( pos: int, lookback_period: int = 20, - min_value: float = 0.03, - max_value: float = 0.07, + min_value: float = 0.5, + max_value: float = 1.5, ) -> float: start = max(0, pos - lookback_period) end = min(pos + 1, n) @@ -477,7 +477,6 @@ def zigzag( next_confirmation_pos: int, direction: TrendDirection, extrema_threshold: float = 0.85, - min_slope_volatility: float = 0.0095, move_away_ratio: float = 0.25, ) -> bool: next_start = next_confirmation_pos + 1 @@ -521,9 +520,9 @@ def zigzag( return False slope_ok = False - log_next_closes = np.log(next_closes) - log_next_closes_std = np.std(log_next_closes) - if len(next_closes) >= 2 and log_next_closes_std > min_slope_volatility: + 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 -- 2.43.0