RSI作为一个非常经典且基础指标,弄懂其真正的计算方式是非常有必要的,于是本人针对计算差异的问题,展开了研究。
在网上寻找了很多RSI的计算方法,基本都是一样的:
N日RS=[A÷B]×100%
A——N日内收盘涨幅之和
B——N日内收盘跌幅之和(取正值)
N日RSI=100-100/(1+RS)

如果把公式变化一下,可以更好的理解
RSI=A/(A+B)*100
即N日涨幅A除以N日内的涨跌幅之和。

网上的公式基本就这两个版本,简单清晰明白,随便编编程自己计算一下,得到的结果都和同花顺算出来的不一样。

为了解决这个问题,找到了RSI指标的作者威尔斯.威尔德的著作《技术交易系统的新概念》,在其介绍RSI指标的章节,寻找到了答案:

“相对强弱指数 RSI 的计算公式如下:
RSI=100-100/(1+RS)
RS=14 个交易日中价格上涨的交易日之收市价平均增幅/14 个交易日中价格下跌的交易
日之收市价平均增幅。
首先需要前 14 个交易日的收市价。然后根据每天的交易数据就可进行计算。第一个 RSI
值的计算方法如下:
(1)将前 14 个交易日中收市价上涨日的收市价增幅求和,除 14,得到收市价平均增
幅。
(2)将前刊个交易日中收市价下跌日的收市价减幅求和,除 14,得到收市价平均减幅。
(3)将收市价平均增幅除以收市价平均减幅,得到相对强弱值 RS)。
(4)RS 加 1。
(5)用 100 除以 RS+1。
(6)从 100 中减去(5)中的结果,得到第一个 RSI 值。
此后计算 RSI 值时,只需要利用前一个收市价平均增幅和前一个收市价平均减幅进行累
计计算即可。通过这一计算过程,使得指标产生平滑效应,其过程如下:
(1)计算当日的收市价平均增幅:将前一个收市价平均增幅乘 13,加上当日的收市价增
幅(如果存在),然后除以 14,其结果就是当日收市价平均增幅。
(2)计算当日的收市价平均减幅:将前一个收市价平均减幅乘13,加上当日的收市价减
幅(如果存在),然后除以 14,其结果就是当日收市价平均减幅。
步骤(3)、(4)和(6)与计算第一个 RSI 的过程相同。”

上面一段是原文,pdf直接粘贴的应该有错别字。
其实核心内容就是,网上广泛流传的方法,都是断章取义,那只是计算第一天RSI的方法。而随后的RSI值,不再按照网上的公式累计每天的涨跌幅。而是通过前一天计算得到的平均涨幅A,和平均跌幅B,分别乘以N-1,得到前N-1天的涨跌幅,而不再依次累加计算。最后再考虑今天是涨还是跌,进行计算。

用公式表示:
N日RSI的第一天的值:
RSI=A/(A+B)*100
A——N日内收盘涨幅之和
B——N日内收盘跌幅之和

接下来一天:
A’=A/N*(N-1)+当日涨幅(如果涨)
B’=B/N*(N-1)+当日跌幅(如果跌)
RSI=A’/ (A’+B’)*100

有的朋友可能会认为,用平均值计算前N-1日的涨跌幅是不准确的。其实设计者就是利用取平均的方法,来过滤某日股价的不规则波动。这种均值思想在很多指标里面都存在的。

对上述方法进行验证,发现你计算RSI周期越长,也就是开始计算RSI的时间与获取RSI的时间间隔越长,RSI的值越接近于各大系统查询值,一般计算90天以上的周期,误差就在0.01内了。

研究附上自己试验的RSI函数代码,应该和talib的RSI功能一样的。