From: Jérôme Benoit Date: Mon, 16 Jun 2025 09:58:25 +0000 (+0200) Subject: refactor(qav3): readd triang extrema smoothing methods X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=cf1c2caec34f67d98aba4e9e27772539f0cf3136;p=freqai-strategies.git refactor(qav3): readd triang extrema smoothing methods Signed-off-by: Jérôme Benoit --- diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 4a0a812..0cdadd5 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -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(), diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index d470445..4e04ab6 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -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: