目的
Pythonによる株価のテクニカル分析ということで、RSIについて紹介します。
Pythonのライブラリである「mplfinance」を使用することで、
簡単なコードで、RSIのグラフを作成することが可能です。
そもそもRSIって何?というところから、具体的な分析方法まで紹介しています。
さらに、Pythonで実際にコードを書くことで、数式への理解が深まります。
RSIとは?
RSIは、歴史的に見て価格が過大評価されているか、過小評価されているかを判断します。
平均上昇率と平均減少率を使って計算されるのもので、
スピードと変動率の大きさを知るためのテクニカル指標です。
平均上昇率・減少率
ある一定期間に上昇または減少した株価の比率のことです。
RSIでは一般的に14日間の比率が使用されています。
実行結果
ソースコード
下記のソースコードをコピーすることで、簡単にチャートを作成することができます。
準備&株価の取得
上記の実行結果を参考にしていただければ、問題ありませんが、
詳しいライブラリのインポートや株価の取得については、
下記の記事を参考にしていただければと思います。
RSIによるテクニカル分析
RSIのグラフを表示する関数
def RSI(df, period, upper, lower):
#パラメータ設定
df['DIFF'] = df['Close'].diff()
df['UP'] = df['DIFF'].copy()
df['DOWN'] = df['DIFF'].copy()
df['UP'] = df['UP'].where(df['UP'] > 0, np.nan)
df['DOWN'] = df['DOWN'].where(df['DOWN'] < 0, np.nan)
df['UPMA'] = df['UP'].ewm(span=period,adjust=False).mean()
df['DOWNMA'] = df['DOWN'].abs().ewm(span=period,adjust=False).mean()
df['RS'] = df['UPMA']/df['DOWNMA']
df['RSI'] = 100 - (100/(1.0 + df['RS']))
df['RSI'] = df['RSI'].iloc[period:]
# RSIの上側と下側に線を引く
line_upper = pd.Series([upper]*len(df['RSI']), index=df['RSI'].index)
line_lower = pd.Series([lower]*len(df['RSI']), index=df['RSI'].index)
rsiargs = dict(width=1, ylabel='RSI')
#RSIのグラフ設定
add_plot = [
mpf.make_addplot(df['RSI'], **rsiargs, color='blue', panel=1, secondary_y=False),
mpf.make_addplot(line_upper, **rsiargs, linestyle='dashed', color='r', panel=1, secondary_y=False),
mpf.make_addplot(line_lower, **rsiargs, linestyle='dashed', color='r', panel=1, secondary_y=False)
]
#キャンドルチャートの作成
mpf.plot(df, type='candle', addplot=add_plot)
パラメータ設定
period:期間
平均上昇率、減少率 を算出する期間
upper_line:RSIの上側線
RSIが過大評価となるライン
lower_line:RSIの下側線
RSIが過小評価となるライン
一般的な分析方法
具体的なパラメータ
一般的に設定期間は、14日間としてRSIは算出されます。
period:14日
upper_line:70
lower_line:30
グラフ説明
RSI(df_stock_data, 14, 70, 30)
RSIラインは、下記で計算されます。
過去の14日の平均上昇率➗過去の14日の平均減少率
下記の指標が一般的な使い方です。
RSIが70レベルを突破すると過大評価、30レベルを切ると過小評価
その他の分析方法1
具体的なパラメータ
period:14日
upper_line/lower_line:20
グラフ説明
長い期間で歴史的にどうだったかをチェックします。
- 過去5年間にRSIが20未満になった時『買い』と判断する。
RSI(df_stock_data_5year, 14, 20, 20)
その他の分析方法2
具体的なパラメータ
period:14日
upper_line/lower_line:50
グラフ説明
RSIは50程度が平均で、
50前後であれば過小評価も過大評価もされていないということになります。
そこに注目し、50を割っているところから50を超えていく時を見ます。
つまり、過小評価されているときから、トレンドが変わっていくサインを見て、
波に乗るということになります。
- RSIの50前後に注目し、株価のトレンドを把握する。
RSI(df_stock_data, 14, 50, 50)
参考にした本
クニカル分析の方法だけでなく、
投資について、わかりやすく書かれているので、大変参考になると思います。
電子書籍の方が半額で購入できるので、そちらをオススメします。