RSI 指标计算

in #trading6 years ago (edited)

这篇文章不对 RSI 的用法,行情判断作介绍,仅仅是 RSI 的计算问题。

网络上 RSI 的计算方法各种各样,参考的时候不免眼花缭乱,而且本来一些让人疑惑的地方直接略过了,我也是花费了不少时间理解。

1. 需求

假设有下面的价格序列:

[4.605,4.306,4.319,4.155,4.165,4.091,4.132]

计算 Period = 6 的 RSI 值。

2. RSI 计算公式

先来看一下 RSI 的计算公式

100 - 100 / ( 1 + RS )

其中 RS = n 天内涨幅的平均值 / n 天内跌幅的平均值

n 天内涨幅的平均值用 au 表示,跌幅平均值用 ad 表示,可数学推导成下面的公式:

100 * au / ( au + ad )

变换后的公式,可以很清楚的理解 RSI意义,就是涨幅占涨跌幅的比重,值越大,表示在一个周期中涨幅比跌幅越大。

3. 计算涨跌幅平均值

根据计算公式,先来计算 au 和 ad 。

将上面的价格序列变换成涨跌幅的序列,就是后面的价格减去前面的价格。

[-0.299,0.013,-0.164,0.01,-0.074,0.041]

因为计算的 Period 是6,因此至少包含7个价格数据,这样涨跌幅的序列才能计算均价。

将上面的涨跌幅序列拆分成涨幅序列 u_list:

[0,0.013,0,0.01,0,0.041]

和跌幅序列 d_list:

[0.299,0,0.164,0,0.074,0]

涨幅序列中,如果是负值,则用0代替,反之,跌幅序列中,正值用0代替。

有很多计算均值的方法:SMA,EMA,WMA,HMA等,也可以是自己实现的均线指标,最常用的是 SMA 和 EMA,下面是 SMA 的示例。

au = ( 0 + 0.013 + 0 + 0.01 + 0 + 0.041 ) / 6
ad = ( 0.299 + 0 + 0.164 + 0 + 0.074 + 0 ) / 6

这里可以根据需要套用不同的均线指标,如果套用的是 zero-lag 的指标, rsi 相应的也会减少滞后。

4. 计算 RSI 值

有了 au 和 ad 后,直接根据公式就可以求出 rsi 的值。

上面 au = 0.01067,ad = 0.0895

rsi = 100 * 0.01067 / ( 0.01067 + 0.0895)

rsi = 10.6518918

一个价格序列返回的也是 RSI 值的序列,上面的例子则是:

[null,null,null,null,null,null,10.6518918]

5. 解疑答惑

a. 价格序列中,从第几个开始计算 rsi ?

从 period + 1 开始计算。

b. 如果 au = 0 且 ad = 0 ,rsi 的值是多少?

au =0 且 ad = 0 说明在计算周期中没有涨跌,多空力量相当, rsi = 50。

c. au =0 ,rsi 的值是多少?

au =0 说明在计算周期中,一直跌,表示超卖,rsi =0,通过公式就可得出。

d. ad =0,rsi 的值是多少?

ad =0 说明在计算周期中,一直涨,表示超买,rsi = 100。