どこにでもいる30代SEの学習ブログ

主にプログラミング関連の学習内容。読んだ本の感想や株式投資についても書いてます。

Python 100行以内で書ける株価のテクニカル分析チャート(pandas-datareader & mplfinance)

Pythonで株価を取得してローソク足チャートを作ったところ、驚くほど簡単に書けました。「pandas-datareader」と「mplfinance」を使用しましたが、ソースコードの行数は60行でした。以下のようなグラフが簡単に作れます。

f:id:predora005:20210404194556p:plain

[1] 株価の取得

以前の記事で紹介した、pandas-datareaderを用いて株価を取得します。

predora005.hatenablog.com

import datetime
import pandas_datareader.data as web

# ソフトバンクの2021年1月以降の株価
code = '9984.JP'
start_date = datetime.datetime(2021, 1, 1)
end_date = None

# pandas-datareaderでStooqから株価取得
df = web.DataReader(code, 'stooq', start=start_date, end=end_date)

先頭をprintしてみると、次のようなデータが取得できています。

print(df.head())
#             Open  High  Low   Close  Volume
# Date                                         
# 2021-04-01  9480  9615  9372  9391  13843700
# 2021-03-31  9084  9362  8995  9330  12246400
# 2021-03-30  9146  9320  9081  9172  12463600
# 2021-03-29  9388  9389  8980  9080  16428700
# 2021-03-26  9202  9369  9131  9238  11754500

[2] ローソク足チャートの表示

「mplfinance」を使ってローソク足チャートを作成します。「mplfinance」が優秀すぎて数行で書けてしまいます。

f:id:predora005:20210404193827p:plain

import mplfinance as mpf

# 日付で昇順ソース
df = df.sort_index()
    
# ローソク足チャートを表示
mpf.plot(df, type='candle', mav=(5, 25), volume=True, savefig='9984_JP.png')

ポイントは次の通りです。詳細な使用方法は「mplfinance」のGitHubに詳しく載っています。

  • type='candle'ローソク足チャートを指定しています。typeを変えるとチャートの形状を変更できます。
  • mav=(5, 25)移動平均線の期間を指定しています。今回は5, 25日間の移動平均線を描画します。
  • volume=True出来高を描画します。
  • savefigで保存先のファイル名を指定しています。

GitHub - matplotlib/mplfinance: Financial Markets Data Visualization using Matplotlib

[3] MACDをチャートに追加

テクニカル分析指標の一つであるMACDをチャートに追加します。

[3-1] MACDの算出

MACDの算出方法には何パターンかあるようですが、次の通りにしました。

# MACD
exp12 = df['Close'].ewm(span=12, adjust=False).mean()
exp26 = df['Close'].ewm(span=26, adjust=False).mean()
df['MACD'] = exp12 - exp26

# シグナル
df['Signal'] = df['MACD'].rolling(window=9).mean()
    
# ヒストグラム(MACD - シグナル)
df['Hist'] = df['MACD'] - df['Signal']

[3-2] MACDをチャート表示

ローソク足チャートにMACDを追加します。

f:id:predora005:20210404194045p:plain

# MACDとシグナルのプロット作成
add_plot = [mpf.make_addplot(df['MACD'], color='m', panel=1, secondary_y=False),
    mpf.make_addplot(df['Signal'], color='c', panel=1, secondary_y=False),
    mpf.make_addplot(df['Hist'], type='bar', color='g', panel=1, secondary_y=True)]

# ローソク足チャートを表示
mpf.plot(df, type='candle',
    mav=(5, 25), volume=True, addplot=add_plot, volume_panel=2, savefig='9984_JP.png')

mpf.make_addplotで追加したいチャートを作り、mpf.plotの引数addplotにセットします。

[4] RSIをチャートに追加

テクニカル分析指標の一つであるRSIをチャートに追加します。

[4-1] RSIの算出

RSIは移動平均を取る期間を色々と変えれますが、今回は14日間としています。

# 終値の差分
df_diff = df['Close'].diff()

# 値上がり幅と値下がり幅
df_up, df_down = df_diff.copy(), df_diff.copy()
df_up[df_up < 0] = 0
df_down[df_down > 0] = 0
df_down = df_down * -1

# 14日間の単純移動平均
sim14_up = df_up.rolling(window=14).mean()
sim14_down = df_down.rolling(window=14).mean()

# RSI
df['RSI'] = sim14_up / (sim14_up + sim14_down) * 100

[4-2] RSIをチャート表示

add_plotにRSIのチャートを追加します。

f:id:predora005:20210404194107p:plain

# MACDとRSIのプロット作成
add_plot = [mpf.make_addplot(df['MACD'], color='m', panel=1, secondary_y=False),
    mpf.make_addplot(df['Signal'], color='c', panel=1, secondary_y=False),
    mpf.make_addplot(df['Hist'], type='bar', color='g', panel=1, secondary_y=True),
    mpf.make_addplot(df['RSI'], panel=2)]

# ローソク足チャートを表示
mpf.plot(df_sort, type='candle',
    mav=(5, 25), volume=True, addplot=add_plot, volume_panel=3, savefig='9984_JP.png')

[5] チャートの見栄えを変える

「mplfinance」に用意された引数を変えると、チャートの見栄えを変えることも簡単にできます。

f:id:predora005:20210404194545p:plain

# MACDとRSIのプロット作成
add_plot = [mpf.make_addplot(df['MACD'], color='m', panel=1, secondary_y=False),
    mpf.make_addplot(df['Signal'], color='c', panel=1, secondary_y=False, ylabel='MACD'),
    mpf.make_addplot(df['Hist'], type='bar', color='g', panel=1, secondary_y=True, ylabel='Hist'),
    mpf.make_addplot(df['RSI'], panel=2, ylabel='RSI')]

# ローソク足チャートを表示
mpf.plot(df, type='candle',
    mav=(5, 25), volume=True, addplot=add_plot, volume_panel=3, 
    title='9984.JP', figratio=(5, 4), panel_ratios=(6, 3, 3, 2),
    style='nightclouds', savefig='9984_JP.png')

mpfinanceのGitHub」と以下の記事を参考にさせてもらいました。

Python mplfinanceでローソク足を作る | novonovo

終わりに

「pandas-datareader」と「mplfinance」を使って、チャートを簡単に描くことができました。MACDやRSIの追加も数十行で行うことができました。

参考資料

移動平均線が進化!MACD(マックディー)の見方と活用法 | 俺たち株の初心者!

RSIの見方・使い方 | テクニカル分析指標 | 指標の見方・使い方 | 投資のノウハウ | 株の達人

GitHub - matplotlib/mplfinance: Financial Markets Data Visualization using Matplotlib

Python mplfinanceでローソク足を作る | novonovo

備考

インストール手順

環境によってインストール手順は異なる場合があります。pip3コマンドが使用できる環境では以下の手順でインストール可能でした。

pip3 install numpy  --user
pip3 install pandas --user
pip3 install matplotlib --user
pip3 install pandas-datareader --user
pip3 install mplfinance --user

出典