この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。トレード分析において、RSIは、非常に人気のあるインジケーターの一つです。
トレンドの変化を視覚的に捉え、売買のタイミングを判断するために役立つので、初心者からベテランまで幅広く活用されています。
この記事では、Pythonを使ってRSIを計算し、視覚的に理解しやすいグラフで表示する方法を解説します。
データを分析してトレンドを見極めたい方や、自分でトレードの戦略を構築したい方にとって、基本的なテクニカル分析手法として押さえておきたい内容です。
RSIとは
RSI(Relative Strength Index、相対力指数)は、相場の過熱感(買われ過ぎ・売られ過ぎ)を表す、オシレーター系のインジケーターです。数多くのテクニカル指標を生み出したJ.W.ワイルダー氏が考案しました。
現在の相場が相対的に、上昇と下落のどちらが強いかを判断するために使われます。
RSIの使い方
RSIは、0から100の数値で表されます。この値によって以下のような判断が可能です。
- 70以上:買われすぎ(価格が上がりすぎて調整が入る可能性)
- 30以下:売られすぎ(価格が下がりすぎて反発の可能性)
RSIの計算方法
RSIは、一定期間(一般的には14期間の価格データ)の「上昇幅」と「下落幅」を基に計算されます。
\begin{eqnarray} RSI=100−\left( \dfrac{100}{1+RS} \right) \end{eqnarray}ここで、RSは一定期間の平均上昇幅を平均下落幅で割った値です。
PythonでRSIを計算するコード
RSIを計算しグラフで表示するには、以下のライブラリを使用します。
- pandas: 時系列データを処理するためのライブラリ。
- yfinance: 価格データを取得するためのライブラリ。
- mplfinance: グラフの描画に使用します。
以下のコードを使って、RSIの計算とグラフの表示をします。使用するデータは、2023年の日経平均株価です。
import pandas as pd
import yfinance as yf
import mplfinance as mpf
# 期間の設定
period = 14
# 株価データを取得(例:日経平均株価のデータを使用)
ticker = '^N225'
data = yf.download(ticker, start='2023-01-01', end='2023-12-31')
# 終値の差を取る
df_close = data["Close"]
df_diff = df_close.diff()
# 終値の差が0以下に0を代入する
df_up = df_diff.copy()
df_up[df_up < 0] = 0
# 終値の差が0以上に0を代入する
df_down = df_diff.copy()
df_down[df_down > 0] = 0
# 上昇と下落の移動平均を計算する
df_up_sum = df_up.rolling(window=period).mean()
df_down_sum = df_down.abs().rolling(window=period).mean()
# RSを計算する
df_rs = df_up_sum / df_down_sum
# RSIを計算する
df_rsi = 100 - (100 / (1 + df_rs))
# MACDとシグナルラインをプロットするためのデータ準備
rsi_plot = [mpf.make_addplot(df_rsi, panel=1, color='blue', ylabel='RSI')]
# グラフのプロット
mpf.plot(
data,
type='candle', # ローソク足チャート
addplot=rsi_plot,
style='yahoo',
title='Stock Price with RSI',
ylabel='Price',
panel_ratios=(3, 1), # 上部3:下部1の比率
volume=False # 出来高を非表示
)
上記のコードを実行すると、以下のようにローソク足とRSIのグラフが出力されます。
ポイントの解説
# 期間の設定
period = 14
period
でRSIの期間を設定します。通常は14期間ですが、変更したい場合はこの数値を変更してください。
# 終値の差を取る
df_close = data["Close"]
df_diff = df_close.diff()
# 終値の差が0以下に0を代入する
df_up = df_diff.copy()
df_up[df_up < 0] = 0
# 終値の差が0以上に0を代入する
df_down = df_diff.copy()
df_down[df_down > 0] = 0
# 上昇と下降の移動平均を計算する
df_up_sum = df_up.rolling(window=period).mean()
df_down_sum = df_down.abs().rolling(window=period).mean()
# RSを計算する
df_rs = df_up_sum / df_down_sum
# RSIを計算する
df_rsi = 100 - (100 / (1 + df_rs))
RSIの計算は、まずdf_diff = df_close.diff()
で前日の終値の差を取ります。
次にdf_up[df_up < 0] = 0
で前日より下落している場合は、0をになるようにしています。df_down[df_down > 0] = 0
も同じ要領で上昇している場合に0にします。
df_up_sum = df_up.rolling(window=period).mean()
とdf_down_sum = df_down.abs().rolling(window=period).mean()
で平均上昇幅と平均下落幅を計算して、RSを求めます。
最後に上記の公式でRSIを計算します。
おわりに
この記事では、Pythonを使ってRSIを計算し、グラフで視覚化する方法を解説しました。
RSIは相場の過熱感を表すことができる便利な指標です。視覚的に理解しやすいグラフを作成することで、より効果的にテクニカル分析ができるようになります。
RSIによる分析では、相場がサイン通りに動かないダマシも発生します。ダマシを軽減するには、RSI以外のインジケーターを組み合わせて使うことがポイントです。
Pythonを活用すれば、RSIに限らず様々な指標を簡単に計算できます。この記事をきっかけに、ぜひ他のテクニカル指標にも挑戦してみてください。