RSI(相対力指数)

テクニカル指標FX,RSI

Relative Strength Index, RSI

RSIはRelative Strength Indexの略であり、日本語では相対力指数と呼ばれます。

価格の上昇・下落に対する相対的な強さを測るための代表的なオシレータです。

相対的強さ(RS)は一定期間において上昇幅の平均と下落幅の平均から算出できます。

$$ \text{Relative Strength} = \frac{n日間の上昇幅平均}{n日間の下落幅平均} $$

RSIでは、-100から100の間となるように以下のように変形します。

$$ \text{RSI} = 100 – \frac{100}{1 + \text{RS}} $$

価格が30%以下や70%以上のゾーンに突入することをゾーン・エントリー、そこから出て行くことをゾーン・エグジットと呼びます。

RSIで買われすぎ(overbought)/売られすぎ(oversold)を判断するのは、zone exitを基準とします。

王道的な利用方法として有名なのは、

  • oversold(30%以下)
  • overbought(70%以上)

から抜け出すタイミング(ゾーン・エグジット)を狙う逆張り戦略です。トレンドがあるときは使えないです。

Pythonでの実装

上記の式をPythonで実装していきます。

def relative_strength_index(data, period, alpha=None, smoothing_method="sam"):
    delta = data.diff().dropna()
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)

    if smoothing_method == "sma":
        avg_gain = gain.rolling(window=period).mean()
        avg_loss = loss.rolling(window=period).mean()
    else:
        if alpha is None:
            alpha = 2 / (period + 1)
        avg_gain = gain.ewm(alpha=alpha).mean()
        avg_loss = loss.ewm(alpha=alpha).mean()

    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    return rsi

Stochastic RSI

ストキャスティクスとRSIを組み合わせたストキャスティックRSI(StochRSI)というものがあります。

ストキャスティクス

ストキャスティクスの基本は

「一定期間の最安値から最高値の値幅に対して、現在値がその安値から何パーセントに位置しているか」

となります。すなわち、これを計算式で書くと以下の通りです。

$$ %K=\frac{当日クローズ値-過去n日間の最安値}{過去n日間の最高値-過去n日間の最安値} ×100 $$

上記の計算によって、期間中の変動幅(高値・安値)に対する「クローズ値」の位置を見極めることができます。

計算式

クローズ値をRSIに置き換えたものがStochRSIです。

$$ StochRSI=\frac{RSIの現在値-過去n日間のRSIの最安値}{過去n日間のRSIの最高値-過去n日間のRSIの最安値} ×100 $$

シグナル

基本的にはRSIやオシレータ指標と同様の考え方でトレードを行います。StochRSIでは以下の閾値が一般に利用されます。

StochRSIが0.8以上なら買われすぎ, 0.2以下なら売られすぎ