]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix(qav3): handle volality close to zero at pivot labeling
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 19 May 2025 09:44:48 +0000 (11:44 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 19 May 2025 09:44:48 +0000 (11:44 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/QuickAdapterV3.py
quickadapter/user_data/strategies/Utils.py

index 12f765c7472c489e145240ff1e6d288435644131..7a2fcbc324921857f76d29927df9db06b18afd66 100644 (file)
@@ -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
index 0b203fefe4f6857ccaad2c6a6582aeda8d47b891..597eef5ede0a81ca30b83bc25e97d3e6f4101d29 100644 (file)
@@ -58,7 +58,7 @@ class QuickAdapterV3(IStrategy):
     INTERFACE_VERSION = 3
 
     def version(self) -> str:
-        return "3.3.40"
+        return "3.3.41"
 
     timeframe = "5m"
 
index eb47cc1542a1941a969c9be0dae6c8ae05e7753b..d6d762932259d4e7d31567bbfab9ac64bafdd1df 100644 (file)
@@ -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