]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): technical analysis utils code cleanups
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 17 May 2025 19:26:59 +0000 (21:26 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 17 May 2025 19:26:59 +0000 (21:26 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/QuickAdapterV3.py
quickadapter/user_data/strategies/Utils.py

index 1e3814c97ea7bf163f964d6b08266a1b06570aa1..362ca1b403a8899f02358aa95bf106aa50c6e3ab 100644 (file)
@@ -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:
index 1fca94b494914d36be3c7fe98e208d2ee579cd12..7994b5471e3e02e70451870914bce7b8b5dd6729 100644 (file)
@@ -58,7 +58,7 @@ class QuickAdapterV3(IStrategy):
     INTERFACE_VERSION = 3
 
     def version(self) -> str:
-        return "3.3.35"
+        return "3.3.36"
 
     timeframe = "5m"
 
index 0af17a504cb071d5193bb1ec2db49d1be622df2a..1d75d16e233ac26bf36baef40d6427fc4a87dcb4 100644 (file)
@@ -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])