From 1f6a3a2254ecd94bf36331358c8c23ce18c023cc Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 21 Apr 2025 16:41:24 +0200 Subject: [PATCH] perf(qav3): fine tune prediction min/max thresholds MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 15 +++++++++------ .../user_data/strategies/QuickAdapterV3.py | 5 +++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 740ee9d..38135f9 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -44,7 +44,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): https://github.com/sponsors/robcaulk """ - version = "3.7.16" + version = "3.7.17" @cached_property def _optuna_config(self) -> dict: @@ -229,6 +229,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): X_test, 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"), model_training_parameters, @@ -384,9 +385,10 @@ class QuickAdapterRegressorV3(BaseRegressionModel): self.freqai_info.get("prediction_thresholds_temperature", 125.0) ) extrema = pred_df[EXTREMA_COLUMN].iloc[ - -( - (fit_live_predictions_candles // label_period_candles) - * label_period_candles + -max( + label_period_candles, + int((fit_live_predictions_candles / 2) / label_period_candles) + * label_period_candles, ) : ] min_pred = smoothed_min(extrema, temperature=temperature) @@ -732,11 +734,12 @@ def train_objective( X_test: pd.DataFrame, y_test: pd.DataFrame, test_weights: np.ndarray, + test_size: float, fit_live_predictions_candles: int, candles_step: int, model_training_parameters: dict, ) -> float: - min_train_window: int = fit_live_predictions_candles * 2 + min_train_window: int = fit_live_predictions_candles * int(1 / test_size) max_train_window: int = len(X) if max_train_window < min_train_window: min_train_window = max_train_window @@ -970,7 +973,7 @@ def label_objective( df = df.iloc[ -( - (fit_live_predictions_candles // label_period_candles) + int(fit_live_predictions_candles / label_period_candles) * label_period_candles ) : ] diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 67a9f38..edff17a 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -519,11 +519,12 @@ class QuickAdapterV3(IStrategy): current_natr = df["natr_label_period_candles"].iloc[-1] if isna(current_natr): return None + take_profit_natr_ratio = self.get_take_profit_natr_ratio(trade.pair) trade_take_profit_distance = ( - trade.open_rate * entry_natr * self.get_take_profit_natr_ratio(trade.pair) + trade.open_rate * entry_natr * take_profit_natr_ratio ) current_take_profit_distance = ( - current_rate * current_natr * self.get_take_profit_natr_ratio(trade.pair) + current_rate * current_natr * take_profit_natr_ratio ) return ( max( -- 2.43.0