极客算法

技术分析 - RSI

2023-01-22
DA

本文仅作为学习目的,一切内容均不构成任何投资意见或建议, 投资有风险入市需谨慎

RSI

RSI(Relative Strength Index)是一个动量指标,用来衡量股票在一段时间内的价格变动。

RSI主要是衡量价格变化与速度的指标,默认情况下,RSI计算连续14个时间单位(天,4小时,1小时等),RSI等于一段时间内上涨平均值除以下跌平均值, 再将结果映射到[0, 100]的区间里。

计算

以天为单位,首先分别计算每日上涨下跌差值, 上涨时UD如下:

$U_k = close_k - close_{k-1}$

$D_k = 0$

相反, 下跌时UD如下:

$U_k = 0$

$D=close_{k-1} - close_k$

然后,分别计算单位时间内的上涨下跌的平均值SMA, RS唯一不同是计算平均值的方法不尽相同(SMMA, EWMA), 但最终结果类似。

$ RS = \frac{SMA(U, n)}{SMA(D, n)} $

最后将结果RS转换到[1, 100]区间:

$ RSI = 100\times{\frac{SMA(U, n)}{SMA(U, n) + SMA(D, n)}} = 100 - \frac{100}{1 + RS} $

意义

超买超卖

RSI在指定时间判断价格变动速度,用来查看市场超买超卖,对于默认14天RSI天来说。

  1. RSI <= 30时,指标认为出现超卖,市场可能见底了
  2. RSI >= 70时,指标认为出现超买,市场可能到顶了

难点是时间跨度不同,结果不同,所以7天RSI会更敏感,21天RSI敏感度会降低。有些人把[30, 70]判断调整到[20, 80].

背离

除了30/70规则,有些人也用RSI预测反转支撑位

  1. 上涨背离, 市场价格向下(常用高点比较),但是RSI底点高于前低,表明即使价格下跌,购买力增强
  2. 下跌背离, 市场价格向上(常用低点比较),但是RSI高点低于前高,表明即使价格上涨,购买力减弱

上涨背离

绘制

# RSI
days = 14
# calculate U and D
change = prices['close'].diff()
change.dropna(inplace=True)

ups = change.copy()
downs = change.copy()

ups[ups < 0] = 0
downs[downs > 0] = 0

# calculate RS
sma_up = ups.rolling(days).mean()
sma_down = downs.rolling(days).mean().abs()

# scale rs to range [1, 100]
rsi = 100 * sma_up / (sma_up + sma_down)
print(rsi)

从代码看出RSI,在区间时间内连涨14天,RSI = 1。相反,连跌14天RSI = 0。

RSI

代码

更多

  1. https://en.wikipedia.org/wiki/Relative_strength_index
  2. https://matplotlib.org/stable/gallery/style_sheets/style_sheets_reference.html

下一篇 技术分析 - MA

评论

内容:
其他: