From 91481f8fa24ac1ddafbff6f7760fc961e7c25142 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Tue, 30 Sep 2025 12:55:09 +0200 Subject: [PATCH] fix(qav3): avoid config access to uninitialized properties MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 14 +++++++++++--- .../user_data/strategies/QuickAdapterV3.py | 6 +++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 2c8b2af..adf8c34 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -68,7 +68,9 @@ class QuickAdapterRegressorV3(BaseRegressionModel): optuna_default_config = { "enabled": False, "n_jobs": min( - self.freqai_info.get("optuna_hyperopt", {}).get("n_jobs", 1), + self.config.get("freqai", {}) + .get("optuna_hyperopt", {}) + .get("n_jobs", 1), max(int(self.max_system_threads / 4), 1), ), "storage": "file", @@ -84,7 +86,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): } return { **optuna_default_config, - **self.freqai_info.get("optuna_hyperopt", {}), + **self.config.get("freqai", {}).get("optuna_hyperopt", {}), } @property @@ -95,7 +97,13 @@ class QuickAdapterRegressorV3(BaseRegressionModel): ) n_pairs = len(self.pairs) label_frequency_candles = max( - 2, 2 * n_pairs, int(self.ft_params.get("label_frequency_candles", 12)) + 2, + 2 * n_pairs, + int( + self.config.get("feature_parameters", {}).get( + "label_frequency_candles", 12 + ) + ), ) cache_key = label_frequency_candles if cache_key not in self._optuna_label_candle_pool_full_cache: diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index aa26cd7..ccd0c39 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -108,7 +108,7 @@ class QuickAdapterV3(IStrategy): def minimal_roi(self) -> dict[str, Any]: timeframe_minutes = timeframe_to_minutes(self.config.get("timeframe", "5m")) fit_live_predictions_candles = int( - self.freqai_info.get("fit_live_predictions_candles", 100) + self.config.get("freqai", {}).get("fit_live_predictions_candles", 100) ) return {str(timeframe_minutes * fit_live_predictions_candles): -1} @@ -146,7 +146,7 @@ class QuickAdapterV3(IStrategy): @cached_property def protections(self) -> list[dict[str, Any]]: fit_live_predictions_candles = int( - self.freqai_info.get("fit_live_predictions_candles", 100) + self.config.get("freqai", {}).get("fit_live_predictions_candles", 100) ) estimated_trade_duration_candles = int( self.config.get("estimated_trade_duration_candles", 48) @@ -187,7 +187,7 @@ class QuickAdapterV3(IStrategy): @cached_property def startup_candle_count(self) -> int: # Match the predictions warmup period - return self.freqai_info.get("fit_live_predictions_candles", 100) + return self.config.get("freqai", {}).get("fit_live_predictions_candles", 100) @cached_property def max_open_trades_per_side(self) -> int: -- 2.43.0