]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix(qav3): better handling of low volality regime at pivots labeling
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 19 May 2025 10:14:32 +0000 (12:14 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 19 May 2025 10:14:32 +0000 (12:14 +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 7a2fcbc324921857f76d29927df9db06b18afd66..100f1643d7fbb29888ca0ab57a1ee9858d80dca4 100644 (file)
@@ -45,7 +45,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
     https://github.com/sponsors/robcaulk
     """
 
-    version = "3.7.43"
+    version = "3.7.44"
 
     @cached_property
     def _optuna_config(self) -> dict:
@@ -899,8 +899,8 @@ def zigzag(
         natr_pos = natr_values[pos]
         lookback_natr = natr_values[start:end]
         median_natr = np.median(lookback_natr)
-        if median_natr == 0:
-            median_natr = np.finfo(float).eps
+        if np.isclose(median_natr, 0):
+            return max_factor
         natr_ratio = natr_pos / median_natr
         smoothed_natr_ratio = np.sqrt(natr_ratio)
 
@@ -946,8 +946,8 @@ def zigzag(
         natr_min = np.min(lookback_natr)
         natr_max = np.max(lookback_natr)
         natr_range = natr_max - natr_min
-        if natr_range == 0:
-            natr_range = np.finfo(float).eps
+        if np.isclose(natr_range, 0):
+            return min_value
         normalized_natr_pos = (natr_pos - natr_min) / natr_range
 
         return min_value + (max_value - min_value) * normalized_natr_pos
index d6d762932259d4e7d31567bbfab9ac64bafdd1df..6315583c64551ebc74f3bfe0f281f6682facf137 100644 (file)
@@ -396,8 +396,8 @@ def zigzag(
         natr_pos = natr_values[pos]
         lookback_natr = natr_values[start:end]
         median_natr = np.median(lookback_natr)
-        if median_natr == 0:
-            median_natr = np.finfo(float).eps
+        if np.isclose(median_natr, 0):
+            return max_factor
         natr_ratio = natr_pos / median_natr
         smoothed_natr_ratio = np.sqrt(natr_ratio)
 
@@ -443,8 +443,8 @@ def zigzag(
         natr_min = np.min(lookback_natr)
         natr_max = np.max(lookback_natr)
         natr_range = natr_max - natr_min
-        if natr_range == 0:
-            natr_range = np.finfo(float).eps
+        if np.isclose(natr_range, 0):
+            return min_value
         normalized_natr_pos = (natr_pos - natr_min) / natr_range
 
         return min_value + (max_value - min_value) * normalized_natr_pos