RSI 指标计算
trading·@bitming·
0.000 HBDRSI 指标计算
 这篇文章不对 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。