I have got a df with value from forex market and I'm trying to put into the data frame the RSI, relative strength index(10), for each row in the df.
df.head()
Out[3]:
Date Time Open High Low Close Volume OpenInt
0 2016-09-16 00:05:00 0.75183 0.75186 0.75160 0.75161 0 0
1 2016-09-16 00:10:00 0.75156 0.75156 0.75145 0.75149 0 0
2 2016-09-16 00:15:00 0.75156 0.75166 0.75152 0.75165 0 0
3 2016-09-16 00:20:00 0.75164 0.75165 0.75150 0.75156 0 0
4 2016-09-16 00:25:00 0.75156 0.75174 0.75153 0.75156 0 0
RSI is an indicator that tells you when the product is oversold or overbought; RSI = 100 - 100 / (1 + RS) where RS is the average gain of up periods in a given time frame / the average of loss of down period in a given time frame. In my case, time frame is 10.
df.change = df.Open - df.Close # find out if there is a gain or a loss
df.gain = df.change [df.change > 0] #column of gain
df.loss = df.change [df.change < 0]# column of loss
df.again = df.gain.rolling(center=False,window=10) #find the average gain in the last 10 periods
df.aloss = df.loss.rolling(center=False,window=10) #find the average loss in the last 10 periods
Now is where the troubles begin; I need to get the RS:
df.rs = df.again/df.aloss
TypeErrorTraceback (most recent call last)
<ipython-input-13-2886bcd78f42> in <module>()
----> 1 df.rs = df.again/df.aloss
TypeError: unsupported operand type(s) for /: 'Rolling' and 'Rolling'
EDIT
df.gain.head(6)
Out[31]:
0 0.00022
1 0.00007
3 0.00008
5 0.00002
7 0.00003
8 0.00002
df.loss.head(6)
Out[32]:
2 -0.00009
6 -0.00019
9 -0.00013
14 -0.00002
15 -0.00011
20 -0.00008
dtype: float64