From 5975796197063ba11f16326ad308b0d6b1740fcb Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 13 Jun 2025 11:28:38 +0200 Subject: [PATCH] fix(qav3): avoid running pivots labeling optimization twice, take 3 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 18 ++++++++++++++---- .../user_data/strategies/QuickAdapterV3.py | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index a0b68e0..17f92e3 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -49,7 +49,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): https://github.com/sponsors/robcaulk """ - version = "3.7.85" + version = "3.7.86" @cached_property def _optuna_config(self) -> dict: @@ -99,8 +99,9 @@ class QuickAdapterRegressorV3(BaseRegressionModel): self._optuna_train_params: dict[str, dict] = {} self._optuna_label_params: dict[str, dict] = {} self.init_optuna_label_candle_pool() - self._optuna_label_candles: dict[str, int] = {} self._optuna_label_candle: dict[str, int] = {} + self._optuna_label_candles: dict[str, int] = {} + self._optuna_label_incremented_pairs: list[str] = [] for pair in self.pairs: self._optuna_hp_value[pair] = -1 self._optuna_train_value[pair] = -1 @@ -127,8 +128,8 @@ class QuickAdapterRegressorV3(BaseRegressionModel): ), } ) - self._optuna_label_candles[pair] = 0 self.set_optuna_label_candle(pair) + self._optuna_label_candles[pair] = 0 logger.info( f"Initialized {self.__class__.__name__} {self.freqai_info.get('regressor', 'xgboost')} regressor model version {self.version}" @@ -215,6 +216,11 @@ class QuickAdapterRegressorV3(BaseRegressionModel): optuna_label_candle = self._optuna_label_candle.get(p) optuna_label_candles = self._optuna_label_candles.get(p) if optuna_label_candle is not None and optuna_label_candles is not None: + if ( + self._optuna_label_incremented_pairs + and p not in self._optuna_label_incremented_pairs + ): + optuna_label_candles += 1 remaining_candles = optuna_label_candle - optuna_label_candles if remaining_candles in optuna_label_candle_pool: optuna_label_candle_pool.remove(remaining_candles) @@ -332,6 +338,8 @@ class QuickAdapterRegressorV3(BaseRegressionModel): if namespace != "label": raise ValueError(f"Invalid namespace: {namespace}") self._optuna_label_candles[pair] += 1 + if pair not in self._optuna_label_incremented_pairs: + self._optuna_label_incremented_pairs.append(pair) optuna_label_remaining_candles = self._optuna_label_candle.get( pair ) - self._optuna_label_candles.get(pair) @@ -344,8 +352,10 @@ class QuickAdapterRegressorV3(BaseRegressionModel): exc_info=True, ) finally: - self._optuna_label_candles[pair] = 0 self.set_optuna_label_candle(pair) + self._optuna_label_candles[pair] = 0 + if len(self._optuna_label_incremented_pairs) >= len(self.pairs): + self._optuna_label_incremented_pairs = [] else: logger.info( f"Optuna {pair} {namespace} callback throttled, still {optuna_label_remaining_candles} candles to go" diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 7b81b38..5056e24 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -61,7 +61,7 @@ class QuickAdapterV3(IStrategy): INTERFACE_VERSION = 3 def version(self) -> str: - return "3.3.89" + return "3.3.90" timeframe = "5m" -- 2.43.0