forked from CSjiade/Stock_DashBoard
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRSI.py
More file actions
37 lines (28 loc) · 1.29 KB
/
Copy pathRSI.py
File metadata and controls
37 lines (28 loc) · 1.29 KB
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
29
30
31
32
33
34
35
36
import numpy as np
def RSI_function(df,period):
period = int(period)
df['Up Move'] = np.nan
df['Down Move'] = np.nan
df['Average Up'] = np.nan
df['Average Down'] = np.nan
df['RS'] = np.nan
df['RSI'] = np.nan
for x in range(1, len(df)):
df['Up Move'][x] = 0
df['Down Move'][x] = 0
if df['Close'][x] > df['Close'][x-1]:
df['Up Move'][x] = df['Close'][x] - df['Close'][x-1]
if df['Close'][x] < df['Close'][x-1]:
df['Down Move'][x] = abs(df['Close'][x] - df['Close'][x-1])
df['Average Up'][period] = df['Up Move'][1:period].mean()
df['Average Down'][period] = df['Down Move'][1:period].mean()
df['RS'][period] = df['Average Up'][period] / df['Average Down'][period]
df['RSI'][period] = 100 - (100/(1+df['RS'][period]))
## Calculate rest of Average Up, Average Down, RS, RSI
for x in range(period+1, len(df)):
df['Average Up'][x] = (df['Average Up'][x-1]*(period-1)+df['Up Move'][x])/period
df['Average Down'][x] = (df['Average Down'][x-1]*(period-1)+df['Down Move'][x])/period
df['RS'][x] = df['Average Up'][x] / df['Average Down'][x]
df['RSI'][x] = 100 - (100/(1+df['RS'][x]))
df = df.drop(columns=['Up Move', 'Down Move','Average Up','Average Down','RS'])
return df