]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): readd triang extrema smoothing methods
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 16 Jun 2025 09:58:25 +0000 (11:58 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 16 Jun 2025 09:58:25 +0000 (11:58 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/strategies/QuickAdapterV3.py
quickadapter/user_data/strategies/Utils.py

index 4a0a81247129aa450cab7c61afea822ac76d25f3..0cdadd55e2b16daf6067df93c7f163d8f38b0f20 100644 (file)
@@ -909,6 +909,17 @@ class QuickAdapterV3(IStrategy):
                 win_type="kaiser",
                 center=True,
             ).mean(beta=extrema_smoothing_beta),
+            "triang": zero_phase(
+                series=series,
+                window=window,
+                win_type="triang",
+                std=std,
+                beta=extrema_smoothing_beta,
+            )
+            if extrema_smoothing_zero_phase
+            else series.rolling(
+                window=odd_window, win_type="triang", center=True
+            ).mean(),
             "smm": series.rolling(window=odd_window, center=True).median(),
             "sma": series.rolling(window=odd_window, center=True).mean(),
             "ewma": series.ewm(span=window).mean(),
index d470445198e1eb03959790d761d1f55427ea8166..4e04ab6bdb213a4f2ec9b0764da5fc5a19d98f50 100644 (file)
@@ -47,12 +47,17 @@ def derive_gaussian_std_from_window(window: int) -> float:
 
 @lru_cache(maxsize=8)
 def _calculate_coeffs(
-    window: int, win_type: Literal["gaussian", "kaiser"], std: float, beta: float
+    window: int,
+    win_type: Literal["gaussian", "kaiser", "triang"],
+    std: float,
+    beta: float,
 ) -> np.ndarray:
     if win_type == "gaussian":
         coeffs = sp.signal.windows.gaussian(M=window, std=std, sym=True)
     elif win_type == "kaiser":
         coeffs = sp.signal.windows.kaiser(M=window, beta=beta, sym=True)
+    elif win_type == "triang":
+        coeffs = sp.signal.windows.triang(M=window, sym=True)
     else:
         raise ValueError(f"Unknown window type: {win_type}")
     return coeffs / np.sum(coeffs)
@@ -61,7 +66,7 @@ def _calculate_coeffs(
 def zero_phase(
     series: pd.Series,
     window: int,
-    win_type: Literal["gaussian", "kaiser"],
+    win_type: Literal["gaussian", "kaiser", "triang"],
     std: float,
     beta: float,
 ) -> pd.Series: