Pythonを使って効率的に投資する方法を知りたい方必見!RSIを活用する方法を解説します。さらにPythonでのRSIの計算方法もわかりやすく説明しています。
①RSIとは
RSI(Relative Strength Index)とは相対力指数と呼ばれ、
一定期間内の上昇幅と下落幅を比較することで、
買われすぎや売られすぎの状態を示すテクニカル指標の一つです。
1978年にJ.W.ワイルダー氏(John Welles Wilder.Jr)が開発しました。
RSIは0~100の範囲で表され、70以上が買われすぎで30以下が売られすぎとされています。
また、RSIの特徴としてトレンド転換のサインを示すことができることが挙げられます。
ただし、RSI単体で使用すると偽のシグナルを出すことがあるので、
他の指標と併用することが重要です。
②RSIの算出方法
RSIは以下の式で計算されます。
\begin{align} RSI = \frac{A}{A+B}\times100 \end{align}A:14日間の値上がり幅の平均
B:14日間の値下がり幅の平均
非常にシンプルな式ですね。
③PythonでRSIの実装方法
まずはコードの全体を紹介します。
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を計算
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の使い方
『MACDって聞いたことはあるが、どう使えばいいかわからない。』こんな悩みはありませんか? MACDとは何か?さらにPythonを使って基本的な使い方を初心者でもわかりやすく解説します。 毎日、日経平 ...
続きを見る
-
Pythonでストキャスティクスを使ったテクニカル分析
こんな悩みはありませんか? 『ストキャスティクスってよく聞くけどどんな指標かわからない。』または『Pythonでストキャスティクスってどうプログラムするの?』 そこで、ストキャスティクスについて詳しい ...
続きを見る
おすすめのテクニカル分析とPython関連の書籍も紹介しておきます。
今回は以上です。