From b9d6243bbe1e49c0dd7a0f87b5846db872325c0f Mon Sep 17 00:00:00 2001 From: "Bobby (aider)" Date: Sat, 8 Feb 2025 08:07:03 -0800 Subject: [PATCH] fix: correct boolean operations and column naming in ThreeATREMAIndicator --- src/indicators/three_atr_ema.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/indicators/three_atr_ema.py b/src/indicators/three_atr_ema.py index ab94810..f0abdf1 100644 --- a/src/indicators/three_atr_ema.py +++ b/src/indicators/three_atr_ema.py @@ -31,28 +31,24 @@ class ThreeATREMAIndicator: # Calculate EMA ema = df['close'].ewm(span=self.ema_length, adjust=False).mean() - # Calculate ATR + # Calculate ATR and bands atr = self.calculate_atr(df['high'], df['low'], df['close']) upper_band = ema + (atr * 3) lower_band = ema - (atr * 3) - # Generate signals based on conditions: - # 1. Price is below EMA - # 2. Price starts moving up from lower ATR band towards upper ATR band - condition = ( - df['close'] < ema & - df['close'].shift(1) <= lower_band & - df['close'] > df['close'].shift(1) + # Fix signal condition with proper pandas syntax + bullish_condition = ( + (df['close'] < ema) & + (df['close'].shift(1) <= lower_band.shift(1)) & + (df['close'] > df['close'].shift(1)) ) - results = pd.DataFrame({ + return pd.DataFrame({ 'ema': ema, 'upper_band': upper_band, 'lower_band': lower_band, - 'signal': condition + 'bullish_signal': bullish_condition # Match the column name used in screener }) - - return results def get_signals(self, df: pd.DataFrame) -> dict: """ @@ -73,7 +69,7 @@ class ThreeATREMAIndicator: 'ema': current['ema'], 'upper_band': current['upper_band'], 'lower_band': current['lower_band'], - 'is_signal': current['signal'] + 'is_signal': current['bullish_signal'] } else: return {}