0vergeared commited on
Commit
56c56ef
·
verified ·
1 Parent(s): a739560

Create indicators.py

Browse files
Files changed (1) hide show
  1. indicators.py +38 -0
indicators.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ def calculate_rsi(df, period=14):
4
+ delta = df['close'].diff()
5
+ gain = delta.where(delta > 0, 0)
6
+ loss = -delta.where(delta < 0, 0)
7
+
8
+ avg_gain = gain.rolling(window=period).mean()
9
+ avg_loss = loss.rolling(window=period).mean()
10
+
11
+ rs = avg_gain / avg_loss
12
+ rsi = 100 - (100 / (1 + rs))
13
+ return rsi
14
+
15
+ def calculate_ema(df, period=20):
16
+ return df['close'].ewm(span=period, adjust=False).mean()
17
+
18
+ def calculate_macd(df):
19
+ ema12 = df['close'].ewm(span=12, adjust=False).mean()
20
+ ema26 = df['close'].ewm(span=26, adjust=False).mean()
21
+ macd = ema12 - ema26
22
+ signal = macd.ewm(span=9, adjust=False).mean()
23
+ return macd, signal
24
+
25
+ def generate_signal(df):
26
+ rsi = calculate_rsi(df)
27
+ macd, signal = calculate_macd(df)
28
+
29
+ latest_rsi = rsi.iloc[-1]
30
+ latest_macd = macd.iloc[-1]
31
+ latest_signal = signal.iloc[-1]
32
+
33
+ if latest_rsi < 30 and latest_macd > latest_signal:
34
+ return "BUY"
35
+ elif latest_rsi > 70 and latest_macd < latest_signal:
36
+ return "SELL"
37
+ else:
38
+ return "HOLD"