From 31685940820af30cc12adbfcfa760bf75f1f8d75 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 21 Mar 2025 11:58:25 +0100 Subject: [PATCH] refactor(qav3): cleanup extrema smoothing API MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- quickadapter/user_data/strategies/QuickAdapterV3.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 4115239..59f460d 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -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") -- 2.43.0