股票指数——RSI指数

RSI指数的计算非常简单,就是使用一段时间内的平均上涨除以平均上涨加平均下跌(取正值)。也就意味着RSI指数的取值是[0,100]之间,其中0表示周期内没有上涨的,100表示周期内没有下跌的。RSI的直观意义是它表示了一段周期内的上涨力占总量的比例,值越高上涨力越强。超过70表示的是进入了超买阶段、低于30表示进入超卖阶段。

实际RSI的计算公式如下:

RSI=(100-\frac{100}{1+RS})

其中RS公式为:

RS=\frac{gain}{loss}

所以:

RSI=\frac{gain}{gain+loss}

也就是说,RSI指数实际上就是周期内的收盘价上升数值的均值比总变化值。

下面来实战一下:

股票指数——RSI指数_第1张图片

这个图中可以看到最下面的RSI指数为11.72。说明这只ETF已经进入了超卖的状态;K线图显示最低报价都有成交,说明下行的力量比较强大,并且从半日的成交量来看成交量巨大,MACD比较胶着,KDJ指数可以看到J线有所放缓,有抬头趋势,但是K线还在D线之下,说明还未达到上涨要求。因此预判这只ETF可能会再下跌1-2天,然后再上涨。

下面是用AI写的一个Python模拟程序:

# -*- coding: GBK -*-
import numpy as np
import matplotlib.pyplot as plt
def calculate_RSI_array(d, n):
    if len(d) <= n:
        raise ValueError("Data length should be greater than the period.")
    
    rsi_array = []
    for i in range(n, len(d)):
        data = d[i-n:i+1]                                       #* 获得周期切片
        gains = np.where(np.diff(data) >= 0, np.diff(data), 0)  #* 获取数值上升的
        losses = np.where(np.diff(data) < 0, -np.diff(data), 0) #* 获取数值下降的
        avg_gain = np.mean(gains)                               #* 获取数值上升的均值
        avg_loss = np.mean(losses)                              #* 获取数值下降的均值
        rs = avg_gain / avg_loss                                #* 计算RS
        rsi = 100 - (100 / (1 + rs))                            #* 计算RSI
        rsi_array.append(round(rsi, 2))                         #* 将数值加到数组中
    
    return rsi_array

data = np.random.rand(100)
period = 5
rsi_array = calculate_RSI_array(data, period)
x = np.arange(period, len(data))
plt.plot(x, rsi_array)
plt.xlabel('Time')
plt.ylabel('RSI')
plt.title('RSI Index')
plt.show()

运行结果可以得到一个RSI的折线图,使用matplotlib进行绘制:

股票指数——RSI指数_第2张图片

 

你可能感兴趣的:(算法)