From: Jérôme Benoit Date: Sat, 22 Feb 2025 12:13:40 +0000 (+0100) Subject: refactor: raise error is no pairs are defined X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;ds=sidebyside;p=freqai-strategies.git refactor: raise error is no pairs are defined Signed-off-by: Jérôme Benoit --- diff --git a/ReforceXY/user_data/freqaimodels/ReforceXY.py b/ReforceXY/user_data/freqaimodels/ReforceXY.py index 3f0bd92..d250b95 100644 --- a/ReforceXY/user_data/freqaimodels/ReforceXY.py +++ b/ReforceXY/user_data/freqaimodels/ReforceXY.py @@ -100,6 +100,10 @@ class ReforceXY(BaseReinforcementLearningModel): def __init__(self, **kwargs): super().__init__(**kwargs) self.pairs = self.config.get("exchange", {}).get("pair_whitelist") + if not self.pairs: + raise ValueError( + "FreqAI model requires StaticPairList method defined in pairlists configuration and pair_whitelist defined in exchange section configuration" + ) self.is_maskable: bool = ( self.model_type == "MaskablePPO" ) # Enable action masking @@ -697,8 +701,10 @@ class ReforceXY(BaseReinforcementLearningModel): elif trade_duration > max_trade_duration: factor *= 0.5 if pnl > self.profit_aim * self.rr: - factor *= self.rl_config.get("model_reward_parameters", {}).get( - "win_reward_factor", 2 + factor *= float( + self.rl_config.get("model_reward_parameters", {}).get( + "win_reward_factor", 2.0 + ) ) return factor @@ -719,7 +725,7 @@ class ReforceXY(BaseReinforcementLearningModel): """ # first, penalize if the action is not valid if not self._force_action and not self._is_valid(action): - return -2 + return -2.0 pnl = self.get_unrealized_profit() # mrr = self.get_most_recent_return() @@ -763,16 +769,20 @@ class ReforceXY(BaseReinforcementLearningModel): action == Actions.Long_enter.value and self._position == Positions.Neutral ): - return 25 + return 25.0 if ( action == Actions.Short_enter.value and self._position == Positions.Neutral ): - return 25 + return 25.0 # discourage agent from not entering trades if action == Actions.Neutral.value and self._position == Positions.Neutral: - return -1 + return float( + self.rl_config.get("model_reward_parameters", {}).get( + "inaction", -1.0 + ) + ) # discourage sitting in position if ( diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index f213dec..7ca72fb 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -46,6 +46,10 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): def __init__(self, **kwargs): super().__init__(**kwargs) self.pairs = self.config.get("exchange", {}).get("pair_whitelist") + if not self.pairs: + raise ValueError( + "FreqAI model requires StaticPairList method defined in pairlists configuration and pair_whitelist defined in exchange section configuration" + ) self.__optuna_config = self.freqai_info.get("optuna_hyperopt", {}) self.__optuna_hyperopt: bool = ( self.freqai_info.get("enabled", False) diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index 8e4a3a2..ebcb25b 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -46,6 +46,10 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): def __init__(self, **kwargs): super().__init__(**kwargs) self.pairs = self.config.get("exchange", {}).get("pair_whitelist") + if not self.pairs: + raise ValueError( + "FreqAI model requires StaticPairList method defined in pairlists configuration and pair_whitelist defined in exchange section configuration" + ) self.__optuna_config = self.freqai_info.get("optuna_hyperopt", {}) self.__optuna_hyperopt: bool = ( self.freqai_info.get("enabled", False)