From: Jérôme Benoit Date: Fri, 21 Mar 2025 10:58:25 +0000 (+0100) Subject: refactor(qav3): cleanup extrema smoothing API X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=31685940820af30cc12adbfcfa760bf75f1f8d75;p=freqai-strategies.git refactor(qav3): cleanup extrema smoothing API Signed-off-by: Jérôme Benoit --- 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")