From 00d0d73996b9258d7c83b69dc64b5ccf7cbbfa9f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 20 Feb 2025 07:29:47 +0100 Subject: [PATCH] refactor(qav3): disable label period hyperopt until proper solution is found MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- quickadapter/user_data/config-template.json | 2 +- .../LightGBMRegressorQuickAdapterV35.py | 54 +++++++------------ .../XGBoostRegressorQuickAdapterV35.py | 54 +++++++------------ .../user_data/strategies/QuickAdapterV3.py | 17 +++--- 4 files changed, 46 insertions(+), 81 deletions(-) diff --git a/quickadapter/user_data/config-template.json b/quickadapter/user_data/config-template.json index 5c77e1f..64dca39 100644 --- a/quickadapter/user_data/config-template.json +++ b/quickadapter/user_data/config-template.json @@ -131,7 +131,7 @@ "DI_cutoff": 2, "&s-minima_threshold": -2, "&s-maxima_threshold": 2, - "label_period_candles": 100, + // "label_period_candles": 100, "hp_rmse": -1, "period_rmse": -1 }, diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index 2dfcfb9..460e743 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -127,12 +127,12 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): y_test = y_test.tail(test_window) test_weights = test_weights[-test_window:] - # FIXME: find a better way to propagate optuna computed params to strategy - if dk.pair not in self.freqai_info["feature_parameters"]: - self.freqai_info["feature_parameters"][dk.pair] = {} - self.freqai_info["feature_parameters"][dk.pair][ - "label_period_candles" - ] = self.__optuna_period_params[dk.pair].get("label_period_candles") + # # FIXME: find a better way to propagate optuna computed params to strategy + # if dk.pair not in self.freqai_info["feature_parameters"]: + # self.freqai_info["feature_parameters"][dk.pair] = {} + # self.freqai_info["feature_parameters"][dk.pair][ + # "label_period_candles" + # ] = self.__optuna_period_params[dk.pair].get("label_period_candles") model = LGBMRegressor( objective="regression", metric="rmse", **model_training_parameters @@ -178,12 +178,13 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): dk.data["extra_returns_per_train"][MINIMA_THRESHOLD_COLUMN] = -2 dk.data["extra_returns_per_train"][MAXIMA_THRESHOLD_COLUMN] = 2 else: - if self.__optuna_hyperopt: - label_period_candles = self.__optuna_period_params.get(pair, {}).get( - "label_period_candles", self.ft_params["label_period_candles"] - ) - else: - label_period_candles = self.ft_params["label_period_candles"] + # if self.__optuna_hyperopt: + # label_period_candles = self.__optuna_period_params.get(pair, {}).get( + # "label_period_candles", self.ft_params["label_period_candles"] + # ) + # else: + # label_period_candles = self.ft_params["label_period_candles"] + label_period_candles = self.ft_params["label_period_candles"] min_pred, max_pred = self.min_max_pred( pred_df_full, num_candles, @@ -222,11 +223,11 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): dk.data["extra_returns_per_train"]["DI_value_param3"] = f[2] dk.data["extra_returns_per_train"]["DI_cutoff"] = cutoff - dk.data["extra_returns_per_train"]["label_period_candles"] = ( - self.__optuna_period_params.get(pair, {}).get( - "label_period_candles", self.ft_params["label_period_candles"] - ) - ) + # dk.data["extra_returns_per_train"]["label_period_candles"] = ( + # self.__optuna_period_params.get(pair, {}).get( + # "label_period_candles", self.ft_params["label_period_candles"] + # ) + # ) dk.data["extra_returns_per_train"]["hp_rmse"] = self.__optuna_hp_rmse.get( pair, -1 ) @@ -399,7 +400,6 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): y_test, test_weights, self.data_split_parameters.get("test_size", TEST_SIZE), - self.freqai_info.get("fit_live_predictions_candles", 100), self.__optuna_config.get("candles_step", 100), model_training_parameters, ), @@ -529,7 +529,6 @@ def period_objective( y_test, test_weights, test_size, - fit_live_predictions_candles, candles_step, model_training_parameters, ) -> float: @@ -572,23 +571,6 @@ def period_objective( ) y_pred = model.predict(X_test) - min_label_period_candles = int(fit_live_predictions_candles / 6) - max_label_period_candles = int(fit_live_predictions_candles / 2) - label_period_candles = trial.suggest_int( - "label_period_candles", - min_label_period_candles, - max_label_period_candles, - ) - y_pred = pd.Series(y_pred) - min_length = min(len(y_test), len(y_pred)) - remaining_candles = min_length % label_period_candles - if remaining_candles: - y_test = y_test.iloc[remaining_candles:] - y_pred = y_pred.iloc[remaining_candles:] - indices = range(0, min_length, label_period_candles) - y_test = [y_test.iloc[i : i + label_period_candles] for i in indices] - y_pred = [y_pred.iloc[i : i + label_period_candles] for i in indices] - error = sklearn.metrics.root_mean_squared_error(y_test, y_pred) return error diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index 077c456..75e77d9 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -127,12 +127,12 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): y_test = y_test.tail(test_window) test_weights = test_weights[-test_window:] - # FIXME: find a better way to propagate optuna computed params to strategy - if dk.pair not in self.freqai_info["feature_parameters"]: - self.freqai_info["feature_parameters"][dk.pair] = {} - self.freqai_info["feature_parameters"][dk.pair][ - "label_period_candles" - ] = self.__optuna_period_params[dk.pair].get("label_period_candles") + # # FIXME: find a better way to propagate optuna computed params to strategy + # if dk.pair not in self.freqai_info["feature_parameters"]: + # self.freqai_info["feature_parameters"][dk.pair] = {} + # self.freqai_info["feature_parameters"][dk.pair][ + # "label_period_candles" + # ] = self.__optuna_period_params[dk.pair].get("label_period_candles") model = XGBRegressor( objective="reg:squarederror", @@ -179,12 +179,13 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): dk.data["extra_returns_per_train"][MINIMA_THRESHOLD_COLUMN] = -2 dk.data["extra_returns_per_train"][MAXIMA_THRESHOLD_COLUMN] = 2 else: - if self.__optuna_hyperopt: - label_period_candles = self.__optuna_period_params.get(pair, {}).get( - "label_period_candles", self.ft_params["label_period_candles"] - ) - else: - label_period_candles = self.ft_params["label_period_candles"] + # if self.__optuna_hyperopt: + # label_period_candles = self.__optuna_period_params.get(pair, {}).get( + # "label_period_candles", self.ft_params["label_period_candles"] + # ) + # else: + # label_period_candles = self.ft_params["label_period_candles"] + label_period_candles = self.ft_params["label_period_candles"] min_pred, max_pred = self.min_max_pred( pred_df_full, num_candles, @@ -223,11 +224,11 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): dk.data["extra_returns_per_train"]["DI_value_param3"] = f[2] dk.data["extra_returns_per_train"]["DI_cutoff"] = cutoff - dk.data["extra_returns_per_train"]["label_period_candles"] = ( - self.__optuna_period_params.get(pair, {}).get( - "label_period_candles", self.ft_params["label_period_candles"] - ) - ) + # dk.data["extra_returns_per_train"]["label_period_candles"] = ( + # self.__optuna_period_params.get(pair, {}).get( + # "label_period_candles", self.ft_params["label_period_candles"] + # ) + # ) dk.data["extra_returns_per_train"]["hp_rmse"] = self.__optuna_hp_rmse.get( pair, -1 ) @@ -400,7 +401,6 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): y_test, test_weights, self.data_split_parameters.get("test_size", TEST_SIZE), - self.freqai_info.get("fit_live_predictions_candles", 100), self.__optuna_config.get("candles_step", 100), model_training_parameters, ), @@ -530,7 +530,6 @@ def period_objective( y_test, test_weights, test_size, - fit_live_predictions_candles, candles_step, model_training_parameters, ) -> float: @@ -576,23 +575,6 @@ def period_objective( ) y_pred = model.predict(X_test) - min_label_period_candles = int(fit_live_predictions_candles / 6) - max_label_period_candles = int(fit_live_predictions_candles / 2) - label_period_candles = trial.suggest_int( - "label_period_candles", - min_label_period_candles, - max_label_period_candles, - ) - y_pred = pd.Series(y_pred) - min_length = min(len(y_test), len(y_pred)) - remaining_candles = min_length % label_period_candles - if remaining_candles: - y_test = y_test.iloc[remaining_candles:] - y_pred = y_pred.iloc[remaining_candles:] - indices = range(0, min_length, label_period_candles) - y_test = [y_test.iloc[i : i + label_period_candles] for i in indices] - y_pred = [y_pred.iloc[i : i + label_period_candles] for i in indices] - error = sklearn.metrics.root_mean_squared_error(y_test, y_pred) return error diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index f39ff5c..13cb7e6 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -240,14 +240,15 @@ class QuickAdapterV3(IStrategy): def set_freqai_targets(self, dataframe, metadata, **kwargs): pair = str(metadata.get("pair")) - label_period_candles = ( - self.freqai_info["feature_parameters"] - .get(pair, {}) - .get( - "label_period_candles", - self.freqai_info["feature_parameters"]["label_period_candles"], - ) - ) + # label_period_candles = ( + # self.freqai_info["feature_parameters"] + # .get(pair, {}) + # .get( + # "label_period_candles", + # self.freqai_info["feature_parameters"]["label_period_candles"], + # ) + # ) + label_period_candles = self.freqai_info["feature_parameters"]["label_period_candles"] dataframe[EXTREMA_COLUMN] = 0 min_peaks, _ = find_peaks( -dataframe["low"].values, -- 2.43.0