未分類

Pythonによる株価テクニカル分析_RSI編

目的

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)

参考にした本

クニカル分析の方法だけでなく、
投資について、わかりやすく書かれているので、大変参考になると思います。
電子書籍の方が半額で購入できるので、そちらをオススメします。



おすすめのPython学習方法

ABOUT ME
チェルシー
【プロフィール】  年齢:30代前半  性別:オス 【主な職歴】  メーカー勤務  製品設計開発_メカ設計:7年  開発業務自動化:1年半 元々、メカ設計エンジニアとして、製品設計開発に携わっていました。新しいスキルを身につけたいと独学でPythonを勉強し始め、現在、本業でソフトエンジニアとして働いています。具体的には、Pythonを使った製品評価業務の自動化を推進しています。 また、製品市場データ分析業務など可視化なども実施しています。 【2023年度目標】 1. 副業収入:月5,000円 2. 塩漬けにしていたブログをChatGPTなどを活用して執筆の効率化し、1年半前に開設した本サイトを改善する 3. 定期的に株式投資おすすめ成長株の紹介記事を投稿 4. 自作中の米国成長株の分析ツールのコーディング紹介 5. 株式投資の本で学んだ情報をアウトプットする