这篇文章不对 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。