import logging
import time
import warnings
-from enum import Enum
+from enum import IntEnum
from functools import lru_cache
from pathlib import Path
from typing import Any, Callable, Dict, Optional, Tuple, Type
logger = logging.getLogger(__name__)
-class ForceActions(Enum):
+class ForceActions(IntEnum):
Take_profit = 1
Stop_loss = 2
Timeout = 3
* (trade_natr / 100.0)
* self.get_label_natr_ratio_percent(trade.pair, natr_ratio_percent)
* QuickAdapterV3.get_stoploss_log_factor(
- trade_duration_candles
- + int(round(QuickAdapterV3.get_trade_exit_stage(trade) ** (1.5)))
+ trade_duration_candles + int(round(trade.nr_of_successful_exits**1.5))
)
)
current_deviation = self._calculate_current_deviation(
df,
pair,
- min_natr_ratio_percent=0.00985,
- max_natr_ratio_percent=0.0995,
+ min_natr_ratio_percent=0.00995,
+ max_natr_ratio_percent=0.0999,
interpolation_direction="direct",
)
if isna(current_deviation):
@lru_cache(maxsize=8)
def get_min_max_label_period_candles(
+ fit_live_predictions_candles: int,
candles_step: int,
min_label_period_candles: int = 8,
max_label_period_candles: int = 48,
+ max_time_candles: int = 48,
+ max_horizon_fraction: float = 1.0 / 3.0,
+ min_label_period_candles_fallback: int = 8,
+ max_label_period_candles_fallback: int = 28,
) -> tuple[int, int, int]:
if min_label_period_candles > max_label_period_candles:
- min_label_period_candles, max_label_period_candles = (
- max_label_period_candles,
- min_label_period_candles,
+ raise ValueError(
+ "min_label_period_candles must be less than or equal to max_label_period_candles"
+ )
+
+ capped_time_candles = max(1, floor_to_step(max_time_candles, candles_step))
+ capped_horizon_candles = max(
+ 1,
+ floor_to_step(
+ max(1, int(fit_live_predictions_candles * max_horizon_fraction)),
+ candles_step,
+ ),
+ )
+ max_label_period_candles = min(
+ max_label_period_candles, capped_time_candles, capped_horizon_candles
+ )
+
+ if min_label_period_candles > max_label_period_candles:
+ fallback_high = min(
+ max_label_period_candles_fallback,
+ capped_time_candles,
+ capped_horizon_candles,
+ )
+ return (
+ min(min_label_period_candles_fallback, fallback_high),
+ fallback_high,
+ 1,
)
if candles_step <= (max_label_period_candles - min_label_period_candles):