From dbc0dba07dd25ac2bb3f2a5e04545b232ca0ee84 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 7 Mar 2025 11:50:32 +0100 Subject: [PATCH] refactor(qav3): cleanup extrema smoothing MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../user_data/strategies/QuickAdapterV3.py | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index b39ca61..cc4baaa 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -268,7 +268,8 @@ class QuickAdapterV3(IStrategy): dataframe.at[mp, EXTREMA_COLUMN] = 1 dataframe["minima"] = np.where(dataframe[EXTREMA_COLUMN] == -1, -1, 0) dataframe["maxima"] = np.where(dataframe[EXTREMA_COLUMN] == 1, 1, 0) - return self.smooth_extrema(dataframe, EXTREMA_COLUMN, 5) + dataframe[EXTREMA_COLUMN] = self.smooth_extrema(dataframe[EXTREMA_COLUMN], 5) + return dataframe def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: dataframe = self.freqai.start(dataframe, metadata, self) @@ -402,28 +403,24 @@ class QuickAdapterV3(IStrategy): def smooth_extrema( self, - dataframe: DataFrame, - extrema_column: str, + series: Series, window: int, center: bool = True, std: float = 0.5, - ) -> DataFrame: + ) -> Series: extrema_smoothing = self.freqai_info.get("extrema_smoothing", "gaussian") - dataframe[extrema_column] = { + return { "gaussian": ( - dataframe[extrema_column] - .rolling(window=window, win_type="gaussian", center=center) - .mean(std=std) + series.rolling(window=window, win_type="gaussian", center=center).mean( + std=std + ) ), "triang": ( - dataframe[extrema_column] - .rolling(window=window, win_type="triang", center=center) - .mean() + series.rolling(window=window, win_type="triang", center=center).mean() ), - "ewma": dataframe[extrema_column].ewm(span=window).mean(), - "zlewma": zlewma(dataframe[extrema_column], length=window), + "ewma": series.ewm(span=window).mean(), + "zlewma": zlewma(series, length=window), }[extrema_smoothing] - return dataframe def top_percent_change(dataframe: DataFrame, length: int) -> float: -- 2.43.0