]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): cleanup pivot labeling code
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 16 May 2025 10:53:54 +0000 (12:53 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 16 May 2025 10:53:54 +0000 (12:53 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/Utils.py

index 0601ede814642a39cfcc5e7eddcefa44e08967bd..aff8b9a35407e8ab7daae0c15e179c795862fd9e 100644 (file)
@@ -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:
index 90ddafba26f1119df751581fb510e34a49ca55cb..7cc7ea36e0b9150c1d97bd39d44c36ce123e0d58 100644 (file)
@@ -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: