根据pandas数据计算RSI

2024-04-19 12:37:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我从外汇市场得到了一个df值,我试图将df中每一行的RSI,相对强度指数(10)放入数据框架中。

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是一个指标,它告诉你产品何时超卖或超买;RSI=100-100/(1+RS),其中RS是给定时间范围内上升期的平均收益/给定时间范围内下降期的平均损失。就我而言,时间框架是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

现在是麻烦的开始;我需要得到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'

谢谢你的帮助, 克洛诺斯

编辑

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

Tags: theindf时间findoutchangehead