From: Jérôme Benoit Date: Sat, 17 May 2025 19:26:59 +0000 (+0200) Subject: refactor(qav3): technical analysis utils code cleanups X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=478102980b18f2df9208b2e1f9e21892b669456d;p=freqai-strategies.git refactor(qav3): technical analysis utils code cleanups Signed-off-by: Jérôme Benoit --- diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index 1e3814c..362ca1b 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -893,7 +893,7 @@ def zigzag( natr_values = get_natr_values(natr_period) start = max(0, pos - lookback_period) - end = min(pos + 1, len(natr_values)) + end = min(pos + 1, n) if start >= end: return (min_factor + max_factor) / 2 @@ -940,7 +940,7 @@ def zigzag( natr_pos = natr_values[pos] start = max(0, pos - lookback_period) - end = min(pos + 1, len(natr_values)) + end = min(pos + 1, n) if start >= end: return min_value natr_min = np.min(natr_values[start:end]) @@ -1182,14 +1182,15 @@ def label_objective( natr_ratio=label_natr_ratio, ) - if len(pivots_values) < 2: + n = len(pivots_values) + if n < 2: return -float("inf"), -float("inf") scaled_natr_label_period_candles = ( ta.NATR(df, timeperiod=label_period_candles) * label_natr_ratio ) - return scaled_natr_label_period_candles.median(), len(pivots_values) + return scaled_natr_label_period_candles.median(), n def smoothed_max(series: pd.Series, temperature=1.0) -> float: diff --git a/quickadapter/user_data/strategies/QuickAdapterV3.py b/quickadapter/user_data/strategies/QuickAdapterV3.py index 1fca94b..7994b54 100644 --- a/quickadapter/user_data/strategies/QuickAdapterV3.py +++ b/quickadapter/user_data/strategies/QuickAdapterV3.py @@ -58,7 +58,7 @@ class QuickAdapterV3(IStrategy): INTERFACE_VERSION = 3 def version(self) -> str: - return "3.3.35" + return "3.3.36" timeframe = "5m" diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 0af17a5..1d75d16 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -183,6 +183,8 @@ def frama(df: pd.DataFrame, period: int = 16, zero_lag=False) -> pd.Series: if period % 2 != 0: raise ValueError("period must be even") + n = len(df) + highs = df["high"] lows = df["low"] closes = df["close"] @@ -193,7 +195,7 @@ def frama(df: pd.DataFrame, period: int = 16, zero_lag=False) -> pd.Series: closes = zero_lag_series(closes, period=period) fd = pd.Series(np.nan, index=closes.index) - for i in range(period, len(closes)): + for i in range(period, n): window_highs = highs.iloc[i - period : i] window_lows = lows.iloc[i - period : i] fd.iloc[i] = _fractal_dimension(window_highs.values, window_lows.values, period) @@ -202,7 +204,7 @@ def frama(df: pd.DataFrame, period: int = 16, zero_lag=False) -> pd.Series: frama = pd.Series(np.nan, index=closes.index) frama.iloc[period - 1] = closes.iloc[:period].mean() - for i in range(period, len(closes)): + for i in range(period, n): if pd.isna(frama.iloc[i - 1]) or pd.isna(alpha.iloc[i]): continue frama.iloc[i] = ( @@ -220,7 +222,8 @@ def smma(series: pd.Series, period: int, zero_lag=False, offset=0) -> pd.Series: """ if period <= 0: raise ValueError("period must be greater than 0") - if len(series) < period: + n = len(series) + if n < period: return pd.Series(index=series.index, dtype=float) if zero_lag: @@ -228,7 +231,7 @@ def smma(series: pd.Series, period: int, zero_lag=False, offset=0) -> pd.Series: smma = pd.Series(np.nan, index=series.index) smma.iloc[period - 1] = series.iloc[:period].mean() - for i in range(period, len(series)): + for i in range(period, n): smma.iloc[i] = (smma.iloc[i - 1] * (period - 1) + series.iloc[i]) / period if offset != 0: @@ -387,7 +390,7 @@ def zigzag( natr_values = get_natr_values(natr_period) start = max(0, pos - lookback_period) - end = min(pos + 1, len(natr_values)) + end = min(pos + 1, n) if start >= end: return (min_factor + max_factor) / 2 @@ -434,7 +437,7 @@ def zigzag( natr_pos = natr_values[pos] start = max(0, pos - lookback_period) - end = min(pos + 1, len(natr_values)) + end = min(pos + 1, n) if start >= end: return min_value natr_min = np.min(natr_values[start:end])