File size: 1,028 Bytes
dc26017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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}
|