From 27d22a6822c4fa497742206f1b015bf902df050b Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sat, 25 Oct 2025 19:29:39 +0200 Subject: [PATCH] refactor(qav3): validate tunables MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- README.md | 2 +- quickadapter/user_data/strategies/QuickAdapterV3.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6ab09c1..3752583 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ docker compose up -d --build | _Reversal confirmation_ | | | | | reversal_confirmation.lookback_period | 0 | int >= 0 | Prior confirming candles; 0 = none. | | reversal_confirmation.decay_ratio | 0.5 | float (0,1] | Geometric per-candle relaxation factor. | -| reversal_confirmation.min_natr_ratio_percent | 0.009 | float [0,1] | Lower bound fraction for volatility adjusted reversal threshold. | +| reversal_confirmation.min_natr_ratio_percent | 0.0099 | float [0,1] | Lower bound fraction for volatility adjusted reversal threshold. | | reversal_confirmation.max_natr_ratio_percent | 0.035 | float [0,1] | Upper bound fraction (>= lower bound) for volatility adjusted reversal threshold. | | _Regressor model_ | | | | | freqai.regressor | `xgboost` | enum {`xgboost`,`lightgbm`} | Machine learning regressor algorithm. | diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 1e79bc9..8437cd2 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -98,7 +98,7 @@ class QuickAdapterV3(IStrategy): default_reversal_confirmation: dict[str, int | float] = { "lookback_period": 0, "decay_ratio": 0.5, - "min_natr_ratio_percent": 0.009, + "min_natr_ratio_percent": 0.0099, "max_natr_ratio_percent": 0.035, } @@ -1233,8 +1233,16 @@ class QuickAdapterV3(IStrategy): return False if order not in {"entry", "exit"}: return False - trade_direction = side + if ( + min_natr_ratio_percent < 0.0 + or max_natr_ratio_percent < min_natr_ratio_percent + ): + logger.warning( + f"User denied {trade_direction} {order} for {pair}: invalid natr_ratio_percent range " + f"min={format_number(min_natr_ratio_percent)}, max={format_number(max_natr_ratio_percent)}" + ) + return False if not isinstance(lookback_period, int): logger.info( -- 2.43.0