Python 投資

PythonでRSIを使う!トレンド転換のサイン捉えよう!

2023年3月26日

PythonでRSI

Pythonを使って効率的に投資する方法を知りたい方必見!RSIを活用する方法を解説します。さらにPythonでのRSIの計算方法もわかりやすく説明しています。

①RSIとは

RSIとは?

RSI(Relative Strength Index)とは相対力指数と呼ばれ、
一定期間内の上昇幅と下落幅を比較することで、
買われすぎや売られすぎの状態を示すテクニカル指標の一つです。
1978年にJ.W.ワイルダー氏(John Welles Wilder.Jr)が開発しました。

RSIは0~100の範囲で表され、70以上が買われすぎで30以下が売られすぎとされています。

また、RSIの特徴としてトレンド転換のサインを示すことができることが挙げられます。

ただし、RSI単体で使用すると偽のシグナルを出すことがあるので、
他の指標と併用することが重要です。

②RSIの算出方法

RSIを計算

RSIは以下の式で計算されます。

\begin{align} RSI = \frac{A}{A+B}\times100 \end{align}

A:14日間の値上がり幅の平均
B:14日間の値下がり幅の平均

非常にシンプルな式ですね。

③PythonでRSIの実装方法

RSII計算プログラム

まずはコードの全体を紹介します。

import mplfinance as mpf
import pandas as pd
import pandas_datareader.data as pdr
import yfinance as yf

yf.pdr_override()

# 期間
start = "2022-10-01"
end = pd.Timestamp.today()

# 銘柄(トヨタ自動車)
ticker = "7203" + ".T"

# データ取得
df = pdr.get_data_yahoo(ticker, start, end)
df.sort_index(ascending=True, inplace=True)

# RSIを計算
period = 14
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(period).mean()
avg_loss = loss.rolling(period).mean()
rsi = 100 *(avg_gain/(avg_gain+avg_loss))
df['RSI'] = rsi

# チャートプロット
apd_rsi = [
    mpf.make_addplot(df['RSI'], panel=1, ylabel='RSI', color='b'),
    mpf.make_addplot([30] * len(df.index), panel=1,  color='gray'),
    mpf.make_addplot([70] * len(df.index), panel=1,  color='gray')
]

mpf.plot(df, type='candle', style='yahoo', tight_layout=True, title=str(7203),
         addplot=apd_rsi, figratio=(6, 3), volume=False)
RSIプロット

問題なく実行できれば、上のようなグラフが出力されると思います。

次はコード解説です。

# RSIを計算
period = 14
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(period).mean()
avg_loss = loss.rolling(period).mean()
rsi = 100 *(avg_gain/(avg_gain+avg_loss))
df['RSI'] = rsi

period = 14で計算期間を設定しています。

delta = df['Close'].diff()はデータフレームdfの終値Closeの前日との
差分を計算しています。
diff()はPandasの関数で、シリーズオブジェクトの隣り合った2つの要素の差分を計算することができます。
このコードでは、終値の前日との差分を計算し、変化量(delta)を求めています。

gain = delta.where(delta > 0, 0)は先程計算したdelta が0より大きい場合は
そのままの値、0以下の場合は0を取得しています。

loss = -delta.where(delta < 0, 0)gainとは逆に
0より大きい場合は0を取得し、0以下の場合はそのままの値を取得しますが
値がマイナスなので、プラスになるようマイナスを掛けています。

avg_gain = gain.rolling(period).mean()では先程取得したgainに対して
rollingメソッドを適用することで、期間内の上昇分の平均を計算しています。

その他のコードは過去に出来高・移動平均・ボリンジャーバンド・MACD・ストキャスティクスの記事を書いたので、そちらを参考にすればプログラムは理解できると思います。

あわせて読みたい
パイソン-出来高
Pythonで出来高チェック!買い時・売り時を見極めよう!

以前にPythonを使った株価のローソク足チャートを描く方法を紹介しました。 Pythonを使って株価の出来高を分析し、買い時・売り時を見極める方法について紹介します。 以前にPythonを使った株価 ...

続きを見る

あわせて読みたい
移動平均
テクニカル分析に役立つ!Pythonで移動平均計算と実装方法

時系列データの分析には移動平均が不可欠です。 また、移動平均には複数の種類があり、それぞれに特徴があるのでどれを使うかはデータの性質によって異なります。 Pythonを使えば簡単に移動平均を計算し、デ ...

続きを見る

あわせて読みたい
ボリンジャーバンド
【ボリンジャーバンド】Pythonでの実装方法とコードを紹介

ボリンジャーバンドという名前を聞いたことがありますか? ボリンジャーバンドはトレンドの強さやトレンドやボラティリティを分析するためのテクニカル指標で相場の変動幅に応じて上下に動くバンドで表され、相場の ...

続きを見る

あわせて読みたい
Pythonで学ぶMACDの使い方
Pythonで学ぶMACDの使い方

『MACDって聞いたことはあるが、どう使えばいいかわからない。』こんな悩みはありませんか? MACDとは何か?さらにPythonを使って基本的な使い方を初心者でもわかりやすく解説します。 毎日、日経平 ...

続きを見る

あわせて読みたい
Pythonでストキャスティクス
Pythonでストキャスティクスを使ったテクニカル分析

こんな悩みはありませんか? 『ストキャスティクスってよく聞くけどどんな指標かわからない。』または『Pythonでストキャスティクスってどうプログラムするの?』 そこで、ストキャスティクスについて詳しい ...

続きを見る

おすすめのテクニカル分析とPython関連の書籍も紹介しておきます。

今回は以上です。

  • この記事を書いた人

メカタナ

副業ブロガー【経歴】関西出身▶︎理系国立大学院▶︎東証プライム上場企業メーカー開発職▶︎妻と息子1人と暮らしています。▶︎メカタナブログを開設⇒仕事や日常で役立つPythonプログラムを紹介していきます!

-Python, 投資