From: Jérôme Benoit Date: Tue, 30 Sep 2025 10:55:09 +0000 (+0200) Subject: fix(qav3): avoid config access to uninitialized properties X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=91481f8fa24ac1ddafbff6f7760fc961e7c25142;p=freqai-strategies.git fix(qav3): avoid config access to uninitialized properties Signed-off-by: Jérôme Benoit --- 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: