From 8049c12c8ed8ca8db8e5dd983f8737543a8d767f Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 1 Aug 2025 14:24:38 +0200 Subject: [PATCH] perf(qav3): refine trade entry confirmations boundaries MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../freqaimodels/QuickAdapterRegressorV3.py | 6 ++++-- .../user_data/strategies/QuickAdapterV3.py | 17 ++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index a6784cd..1532423 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -615,8 +615,10 @@ class QuickAdapterRegressorV3(BaseRegressionModel): ) -> float: values = series.to_numpy() - if values.size < 2 or np.all(np.isclose(values, values[0])): - return values.mean() if values.size > 0 else np.nan + if values.size == 0: + return np.nan + if values.size == 1 or np.all(np.isclose(values, values[0])): + return values.mean() try: return threshold_func(values) except Exception: diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 922f5c9..3a68998 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -65,7 +65,7 @@ class QuickAdapterV3(IStrategy): INTERFACE_VERSION = 3 def version(self) -> str: - return "3.3.120" + return "3.3.121" timeframe = "5m" @@ -971,15 +971,18 @@ class QuickAdapterV3(IStrategy): return False lower_bound = 0 upper_bound = 0 - price_deviation = (last_candle_natr / 100.0) * self.get_entry_natr_ratio( - pair, 0.00075 + unfavorable_deviation = (last_candle_natr / 100.0) * self.get_entry_natr_ratio( + pair, 0.00125 + ) + favorable_deviation = (last_candle_natr / 100.0) * self.get_entry_natr_ratio( + pair, 0.00225 ) if side == "long": - lower_bound = last_candle_weighted_close * (1 - 2 * price_deviation) - upper_bound = last_candle_weighted_close * (1 + price_deviation) + lower_bound = last_candle_weighted_close * (1 - favorable_deviation) + upper_bound = last_candle_weighted_close * (1 + unfavorable_deviation) elif side == "short": - lower_bound = last_candle_weighted_close * (1 - price_deviation) - upper_bound = last_candle_weighted_close * (1 + 2 * price_deviation) + lower_bound = last_candle_weighted_close * (1 - unfavorable_deviation) + upper_bound = last_candle_weighted_close * (1 + favorable_deviation) if lower_bound < 0: logger.info( f"User denied {side} entry for {pair}: calculated lower bound {lower_bound} is below zero" -- 2.43.0