import copy
+from functools import lru_cache
import gc
import json
import logging
return func
+@lru_cache(maxsize=32)
def hours_to_seconds(hours: float) -> float:
"""
Converts hours to seconds
return seconds
+@lru_cache(maxsize=32)
def steps_to_days(steps: int, timeframe: str) -> float:
"""
Calculate the number of days based on the given number of steps
else:
raise ValueError(f"Invalid namespace: {namespace}")
+ @lru_cache(maxsize=8)
def get_optuna_label_all_candles(self) -> list[int]:
n_pairs = len(self.pairs)
label_frequency_candles = max(
candles_step: int,
model_training_parameters: dict[str, Any],
) -> float:
+ @lru_cache(maxsize=128)
def calculate_min_extrema(
length: int, fit_live_predictions_candles: int, min_extrema: int = 2
) -> int:
import json
import logging
-from functools import reduce, cached_property
+from functools import lru_cache, reduce, cached_property
import datetime
import math
from pathlib import Path
f"Invalid trade_price_target: {trade_price_target}. Expected 'interpolation', 'weighted_interpolation' or 'moving_average'."
)
+ @lru_cache(maxsize=128)
+ def get_stoploss_log_factor(self, trade_duration_candles: int) -> float:
+ return 1 / math.log10(3.75 + 0.25 * trade_duration_candles)
+
def get_stoploss_distance(
self, df: DataFrame, trade: Trade, current_rate: float
) -> Optional[float]:
current_rate
* (trade_natr / 100.0)
* self.get_stoploss_natr_ratio(trade.pair)
- * (1 / math.log10(3.75 + 0.25 * trade_duration_candles))
+ * self.get_stoploss_log_factor(trade_duration_candles)
)
+ @lru_cache(maxsize=128)
+ def get_take_profit_log_factor(self, trade_duration_candles: int) -> float:
+ return math.log10(9.75 + 0.25 * trade_duration_candles)
+
def get_take_profit_distance(self, df: DataFrame, trade: Trade) -> Optional[float]:
trade_duration_candles = self.get_trade_duration_candles(df, trade)
if not QuickAdapterV3.is_trade_duration_valid(trade_duration_candles):
trade.open_rate
* (trade_natr / 100.0)
* self.get_take_profit_natr_ratio(trade.pair)
- * math.log10(9.75 + 0.25 * trade_duration_candles)
+ * self.get_take_profit_log_factor(trade_duration_candles)
)
def throttle_callback(
)
return False
+ @lru_cache(maxsize=8)
def max_open_trades_per_side(self) -> int:
max_open_trades = self.config.get("max_open_trades")
if max_open_trades < 0:
return diff
+@lru_cache(maxsize=8)
def get_gaussian_window(std: float, center: bool) -> int:
if std is None:
raise ValueError("Standard deviation cannot be None")
return max(3, window)
+@lru_cache(maxsize=8)
def get_odd_window(window: int) -> int:
if window < 1:
raise ValueError("Window size must be greater than 0")
return window if window % 2 == 1 else window + 1
+@lru_cache(maxsize=8)
def derive_gaussian_std_from_window(window: int) -> float:
# Assuming window = 6 * std + 1 => std = (window - 1) / 6
return (window - 1) / 6.0 if window > 1 else 0.5