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}