From b41a0aed9f6b9711f98103c96f43b4684f16a25b Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sun, 26 Jul 2026 23:49:09 +0200 Subject: [PATCH] refactor(quickadapter)!: rename mislabeled log-return feature columns (#153) Rename FreqAI feature columns for name/computation coherence. Mislabeled log returns: - %-tcp-period -> %-top_log_return-period - %-bcp-period -> %-bottom_log_return-period - %-close_pct_change -> %-close_log_return (QuickAdapterV3 and ReforceXY RLAgentStrategy) Namespace harmonization with the %-dist_to_ convention: - %-distzlema50 -> %-dist_to_zlema_50 - %-distzlema12 -> %-dist_to_zlema_12 - %-distzlema26 -> %-dist_to_zlema_26 BREAKING CHANGE: FreqAI feature column names changed; existing trained models must be retrained since the feature identifiers differ. --- ReforceXY/user_data/strategies/RLAgentStrategy.py | 3 +-- .../user_data/strategies/QuickAdapterV3.py | 15 ++++++--------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/ReforceXY/user_data/strategies/RLAgentStrategy.py b/ReforceXY/user_data/strategies/RLAgentStrategy.py index aa2efa9..e3eb1c7 100644 --- a/ReforceXY/user_data/strategies/RLAgentStrategy.py +++ b/ReforceXY/user_data/strategies/RLAgentStrategy.py @@ -73,8 +73,7 @@ class RLAgentStrategy(IStrategy): def feature_engineering_expand_basic( self, dataframe: DataFrame, metadata: dict[str, Any], **kwargs ) -> DataFrame: - # TODO [BREAKING]: Rename %-close_pct_change -> %-close_log_return - dataframe["%-close_pct_change"] = np.log(dataframe.get("close")).diff() + dataframe["%-close_log_return"] = np.log(dataframe.get("close")).diff() dataframe["%-raw_volume"] = dataframe.get("volume") return dataframe diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 2b5629f..d68f2cb 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -698,12 +698,10 @@ class QuickAdapterV3(IStrategy): volumes, length=period, ) - # TODO [BREAKING]: Rename %-tcp-period -> %-top_log_return-period - dataframe["%-tcp-period"] = top_log_return( + dataframe["%-top_log_return-period"] = top_log_return( dataframe, period=period, logger=logger ) - # TODO [BREAKING]: Rename %-bcp-period -> %-bottom_log_return-period - dataframe["%-bcp-period"] = bottom_log_return( + dataframe["%-bottom_log_return-period"] = bottom_log_return( dataframe, period=period, logger=logger ) dataframe["%-prp-period"] = price_retracement_percent( @@ -732,7 +730,6 @@ class QuickAdapterV3(IStrategy): closes = dataframe.get("close") volumes = dataframe.get("volume") - # TODO [BREAKING]: Rename %-close_pct_change -> %-close_log_return close_values = closes.to_numpy(dtype=float) invalid_close_count = int( np.count_nonzero(~np.isfinite(close_values) | (close_values <= 0.0)) @@ -743,7 +740,7 @@ class QuickAdapterV3(IStrategy): invalid_close_count, ) with np.errstate(divide="ignore", invalid="ignore"): - dataframe["%-close_pct_change"] = Series( + dataframe["%-close_log_return"] = Series( np.where( np.isfinite(close_values) & (close_values > 0.0), np.log(close_values), @@ -815,9 +812,9 @@ class QuickAdapterV3(IStrategy): dataframe["zlema_50"] = zlema(closes, period=50) dataframe["zlema_12"] = zlema(closes, period=12) dataframe["zlema_26"] = zlema(closes, period=26) - dataframe["%-distzlema50"] = get_distance(closes, dataframe["zlema_50"]) - dataframe["%-distzlema12"] = get_distance(closes, dataframe["zlema_12"]) - dataframe["%-distzlema26"] = get_distance(closes, dataframe["zlema_26"]) + dataframe["%-dist_to_zlema_50"] = get_distance(closes, dataframe["zlema_50"]) + dataframe["%-dist_to_zlema_12"] = get_distance(closes, dataframe["zlema_12"]) + dataframe["%-dist_to_zlema_26"] = get_distance(closes, dataframe["zlema_26"]) macd = ta.MACD(dataframe) dataframe["%-macd"] = macd["macd"] dataframe["%-macdsignal"] = macd["macdsignal"] -- 2.53.0