【Pythonでテクニカル分析】RSIを計算して視覚化する方法を解説

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

株式や為替、仮想通貨など、様々な金融市場でトレードを行う際に欠かせないのが、適切な分析ツールです。トレード分析において、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年の日経平均株価です。

Python
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のグラフが出力されます。

ポイントの解説

Python
# 期間の設定
period = 14

periodでRSIの期間を設定します。通常は14期間ですが、変更したい場合はこの数値を変更してください。

Python
# 終値の差を取る
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に限らず様々な指標を簡単に計算できます。この記事をきっかけに、ぜひ他のテクニカル指標にも挑戦してみてください。