From 4a7d4ec78a59227a43215a9b9e559077cb14a09a Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 16 May 2025 12:53:54 +0200 Subject: [PATCH] refactor(qav3): cleanup pivot labeling code MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 22 +++++++------------ quickadapter/user_data/strategies/Utils.py | 22 +++++++------------ 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 0601ede..aff8b9a 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -897,7 +897,11 @@ def zigzag( last_pivot_pos = pos def is_reversal_confirmed( - candidate_pivot_pos: int, next_confirmation_pos: int, direction: TrendDirection + candidate_pivot_pos: int, + next_confirmation_pos: int, + direction: TrendDirection, + move_away_ratio: float = 0.25, + min_price_change_ratio: float = 0.125, ) -> bool: next_start = next_confirmation_pos + 1 next_end = min(next_confirmation_pos + confirmation_window + 1, n) @@ -941,36 +945,26 @@ def zigzag( elif direction == TrendDirection.UP: slope_ok = next_slope > 0 - significant_move_away_thresholds_ratio = 0.25 significant_move_away_ok = False if direction == TrendDirection.DOWN: if np.any( next_lows < highs[candidate_pivot_pos] - * ( - 1 - - thresholds[candidate_pivot_pos] - * significant_move_away_thresholds_ratio - ) + * (1 - thresholds[candidate_pivot_pos] * move_away_ratio) ): significant_move_away_ok = True elif direction == TrendDirection.UP: if np.any( next_highs > lows[candidate_pivot_pos] - * ( - 1 - + thresholds[candidate_pivot_pos] - * significant_move_away_thresholds_ratio - ) + * (1 + thresholds[candidate_pivot_pos] * move_away_ratio) ): significant_move_away_ok = True - min_price_change_thresholds_ratio = 0.125 min_price_change_ok = False required_price_change = ( thresholds[next_confirmation_pos] - * min_price_change_thresholds_ratio + * min_price_change_ratio * closes[next_confirmation_pos] ) if len(next_closes) > 0: diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 90ddafb..7cc7ea3 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -393,7 +393,11 @@ def zigzag( last_pivot_pos = pos def is_reversal_confirmed( - candidate_pivot_pos: int, next_confirmation_pos: int, direction: TrendDirection + candidate_pivot_pos: int, + next_confirmation_pos: int, + direction: TrendDirection, + move_away_ratio: float = 0.25, + min_price_change_ratio: float = 0.125, ) -> bool: next_start = next_confirmation_pos + 1 next_end = min(next_confirmation_pos + confirmation_window + 1, n) @@ -437,36 +441,26 @@ def zigzag( elif direction == TrendDirection.UP: slope_ok = next_slope > 0 - significant_move_away_thresholds_ratio = 0.25 significant_move_away_ok = False if direction == TrendDirection.DOWN: if np.any( next_lows < highs[candidate_pivot_pos] - * ( - 1 - - thresholds[candidate_pivot_pos] - * significant_move_away_thresholds_ratio - ) + * (1 - thresholds[candidate_pivot_pos] * move_away_ratio) ): significant_move_away_ok = True elif direction == TrendDirection.UP: if np.any( next_highs > lows[candidate_pivot_pos] - * ( - 1 - + thresholds[candidate_pivot_pos] - * significant_move_away_thresholds_ratio - ) + * (1 + thresholds[candidate_pivot_pos] * move_away_ratio) ): significant_move_away_ok = True - min_price_change_thresholds_ratio = 0.125 min_price_change_ok = False required_price_change = ( thresholds[next_confirmation_pos] - * min_price_change_thresholds_ratio + * min_price_change_ratio * closes[next_confirmation_pos] ) if len(next_closes) > 0: -- 2.43.0