from indicators import calculate_ema class CrossoverAgent: def run(self, df, short_window=50, long_window=200): df = calculate_ema(df, short_window) df = calculate_ema(df, long_window) df = df.dropna(subset=[f"ema_{short_window}", f"ema_{long_window}"]) latest = df.iloc[-1] prev = df.iloc[-2] crossed_up = ( prev[f"ema_{short_window}"] < prev[f"ema_{long_window}"] and latest[f"ema_{short_window}"] > latest[f"ema_{long_window}"] ) crossed_down = ( prev[f"ema_{short_window}"] > prev[f"ema_{long_window}"] and latest[f"ema_{short_window}"] < latest[f"ema_{long_window}"] ) if crossed_up: return {"crossover": "Bullish", "short": short_window, "long": long_window} elif crossed_down: return {"crossover": "Bearish", "short": short_window, "long": long_window} else: return {"crossover": "None", "short": short_window, "long": long_window}