import pandas as pd def calculate_rsi(df, period=14): delta = df['close'].diff() gain = delta.where(delta > 0, 0) loss = -delta.where(delta < 0, 0) avg_gain = gain.rolling(window=period).mean() avg_loss = loss.rolling(window=period).mean() rs = avg_gain / avg_loss rsi = 100 - (100 / (1 + rs)) return rsi def calculate_macd(df): ema12 = df['close'].ewm(span=12, adjust=False).mean() ema26 = df['close'].ewm(span=26, adjust=False).mean() macd = ema12 - ema26 signal = macd.ewm(span=9, adjust=False).mean() return macd, signal def generate_signal(df): rsi = calculate_rsi(df) macd, signal = calculate_macd(df) if len(rsi) < 1 or len(macd) < 1 or len(signal) < 1: return "Not enough data" latest_rsi = rsi.iloc[-1] latest_macd = macd.iloc[-1] latest_signal = signal.iloc[-1] if latest_rsi < 30 and latest_macd > latest_signal: return "BUY" elif latest_rsi > 70 and latest_macd < latest_signal: return "SELL" else: return "HOLD"