| exit_pricing.thresholds_calibration.decline_quantile | 0.90 | float (0,1) | PNL decline quantile threshold. |
| _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-step relaxation factor. |
+| 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.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. |
| _Extrema smoothing_ | | | |
default_reversal_confirmation: dict[str, int | float] = {
"lookback_period": 0,
"decay_ratio": 0.5,
+ "min_natr_ratio_percent": 0.009,
+ "max_natr_ratio_percent": 0.035,
}
position_adjustment_enable = True
rate: float,
lookback_period: int,
decay_ratio: float,
- min_natr_ratio_percent: float = 0.009,
- max_natr_ratio_percent: float = 0.035,
+ min_natr_ratio_percent: float,
+ max_natr_ratio_percent: float,
) -> bool:
"""Confirm a directional reversal using a volatility-adaptive current-candle
- threshold and (optionally) a backward confirmation chain with geometric decay.
+ threshold and optionally a backward confirmation chain with geometric decay.
Overview
--------
decay_ratio: float = self.config.get("reversal_confirmation", {}).get(
"decay_ratio", QuickAdapterV3.default_reversal_confirmation["decay_ratio"]
)
+ min_natr_ratio_percent: float = self.config.get(
+ "reversal_confirmation", {}
+ ).get(
+ "min_natr_ratio_percent",
+ QuickAdapterV3.default_reversal_confirmation["min_natr_ratio_percent"],
+ )
+ max_natr_ratio_percent: float = self.config.get(
+ "reversal_confirmation", {}
+ ).get(
+ "max_natr_ratio_percent",
+ QuickAdapterV3.default_reversal_confirmation["max_natr_ratio_percent"],
+ )
if (
trade.trade_direction == "short"
and last_candle.get("do_predict") == 1
and last_candle.get("DI_catch") == 1
and last_candle.get(EXTREMA_COLUMN) < last_candle.get("minima_threshold")
and self.reversal_confirmed(
- df, pair, "long", "exit", current_rate, lookback_period, decay_ratio
+ df,
+ pair,
+ "long",
+ "exit",
+ current_rate,
+ lookback_period,
+ decay_ratio,
+ min_natr_ratio_percent,
+ max_natr_ratio_percent,
)
):
return "minima_detected_short"
and last_candle.get("DI_catch") == 1
and last_candle.get(EXTREMA_COLUMN) > last_candle.get("maxima_threshold")
and self.reversal_confirmed(
- df, pair, "short", "exit", current_rate, lookback_period, decay_ratio
+ df,
+ pair,
+ "short",
+ "exit",
+ current_rate,
+ lookback_period,
+ decay_ratio,
+ min_natr_ratio_percent,
+ max_natr_ratio_percent,
)
):
return "maxima_detected_long"
"decay_ratio",
QuickAdapterV3.default_reversal_confirmation["decay_ratio"],
),
+ self.config.get("reversal_confirmation", {}).get(
+ "min_natr_ratio_percent",
+ QuickAdapterV3.default_reversal_confirmation["min_natr_ratio_percent"],
+ ),
+ self.config.get("reversal_confirmation", {}).get(
+ "max_natr_ratio_percent",
+ QuickAdapterV3.default_reversal_confirmation["max_natr_ratio_percent"],
+ ),
):
return True
return False