]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): cleanup extrema smoothing API
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 21 Mar 2025 10:58:25 +0000 (11:58 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 21 Mar 2025 10:58:25 +0000 (11:58 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/strategies/QuickAdapterV3.py

index 4115239a66d642a003df3e11cc02b5b7b1b8a274..59f460d73c80a2b40f4cbb52fc49cf96e97dab2b 100644 (file)
@@ -612,9 +612,11 @@ class QuickAdapterV3(IStrategy):
         self,
         series: Series,
         window: int,
-        std: float = 0.5,
+        std: Optional[float] = None,
     ) -> Series:
         extrema_smoothing = self.freqai_info.get("extrema_smoothing", "gaussian")
+        if std is None and extrema_smoothing in ["gaussian", "zero_phase_gaussian"]:
+            std = derive_gaussian_std_from_window(window)
         smoothing_methods: dict = {
             "gaussian": series.rolling(
                 window=get_gaussian_window(std, True),
@@ -735,6 +737,11 @@ def get_gaussian_window(std: float, center: bool) -> int:
     return max(3, window)
 
 
+def derive_gaussian_std_from_window(window: int) -> float:
+    # Assuming window = 6 * std + 1 => std = (window - 1) / 6
+    return (window - 1) / 6.0 if window > 1 else 0.5
+
+
 def get_odd_window(window: int) -> int:
     if window < 1:
         raise ValueError("Window size must be greater than 0")