From 0d2403e925c05bdf66fc847a0987bcb08a837544 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Wed, 1 Oct 2025 18:25:51 +0200 Subject: [PATCH] fix(qav3): handle nan properly in smma() computation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- ReforceXY/user_data/freqaimodels/ReforceXY.py | 18 +++++++++++------- .../freqaimodels/QuickAdapterRegressorV3.py | 2 +- .../user_data/strategies/QuickAdapterV3.py | 2 +- quickadapter/user_data/strategies/Utils.py | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/ReforceXY/user_data/freqaimodels/ReforceXY.py b/ReforceXY/user_data/freqaimodels/ReforceXY.py index 87e6663..3c207cb 100644 --- a/ReforceXY/user_data/freqaimodels/ReforceXY.py +++ b/ReforceXY/user_data/freqaimodels/ReforceXY.py @@ -239,17 +239,20 @@ class ReforceXY(BaseReinforcementLearningModel): self.n_eval_envs = 1 if self.multiprocessing and self.n_envs <= 1: logger.warning( - "User tried to use multiprocessing with n_envs=1. Deactivating multiprocessing" + "User tried to use multiprocessing with n_envs=%s. Deactivating multiprocessing", + self.n_envs, ) self.multiprocessing = False if self.eval_multiprocessing and self.n_eval_envs <= 1: logger.warning( - "User tried to use eval_multiprocessing with n_eval_envs=1. Deactivating eval_multiprocessing" + "User tried to use eval_multiprocessing with n_eval_envs=%s. Deactivating eval_multiprocessing", + self.n_eval_envs, ) self.eval_multiprocessing = False if self.multiprocessing and self.plot_new_best: logger.warning( - "User tried to use plot_new_best with multiprocessing. Deactivating plot_new_best" + "User tried to use plot_new_best with multiprocessing=%s. Deactivating plot_new_best", + self.multiprocessing, ) self.plot_new_best = False if not isinstance(self.frame_stacking, int) or self.frame_stacking < 0: @@ -264,13 +267,13 @@ class ReforceXY(BaseReinforcementLearningModel): self.frame_stacking, ) self.frame_stacking = 0 - if self.n_eval_steps <= 0: + if not isinstance(self.n_eval_steps, int) or self.n_eval_steps <= 0: logger.warning( "Invalid n_eval_steps=%s. Forcing n_eval_steps=10_000", self.n_eval_steps, ) self.n_eval_steps = 10_000 - if self.n_eval_episodes <= 0: + if not isinstance(self.n_eval_episodes, int) or self.n_eval_episodes <= 0: logger.warning( "Invalid n_eval_episodes=%s. Forcing n_eval_episodes=5", self.n_eval_episodes, @@ -285,8 +288,9 @@ class ReforceXY(BaseReinforcementLearningModel): self.rl_config["tensorboard_throttle"] = 1 if self.continual_learning and self.frame_stacking: logger.warning( - "User tried to use continual_learning with frame_stacking. \ - Deactivating continual_learning" + "User tried to use continual_learning with frame_stacking=%s. " + "Deactivating continual_learning", + self.frame_stacking, ) self.continual_learning = False diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index d4b971d..a465b87 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -125,7 +125,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): ) if ( not isinstance(self.freqai_info.get("identifier"), str) - or not self.freqai_info.get("identifier").strip() + or not self.freqai_info.get("identifier", "").strip() ): raise ValueError( "FreqAI model requires 'identifier' defined in the freqai section configuration" diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 12fff9d..6be1385 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -213,7 +213,7 @@ class QuickAdapterV3(IStrategy): ) if ( not isinstance(self.freqai_info.get("identifier"), str) - or not self.freqai_info.get("identifier").strip() + or not self.freqai_info.get("identifier", "").strip() ): raise ValueError( "FreqAI strategy requires 'identifier' defined in the freqai section configuration" diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 9b22ec3..c8801a3 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -387,7 +387,7 @@ def smma(series: pd.Series, period: int, zero_lag=False, offset=0) -> pd.Series: values = series.to_numpy() smma_values = np.full(n, np.nan) - smma_values[period - 1] = np.mean(values[:period]) + smma_values[period - 1] = np.nanmean(values[:period]) for i in range(period, n): smma_values[i] = (smma_values[i - 1] * (period - 1) + values[i]) / period -- 2.43.0