Python 100行以内で書ける株価のテクニカル分析チャート(pandas-datareader & mplfinance)
Pythonで株価を取得してローソク足チャートを作ったところ、驚くほど簡単に書けました。「pandas-datareader」と「mplfinance」を使用しましたが、ソースコードの行数は60行でした。以下のようなグラフが簡単に作れます。
[1] 株価の取得
以前の記事で紹介した、pandas-datareaderを用いて株価を取得します。
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」が優秀すぎて数行で書けてしまいます。
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とシグナルのプロット作成 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のチャートを追加します。
# 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」に用意された引数を変えると、チャートの見栄えを変えることも簡単にできます。
# 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
出典
- アイキャッチはGerd AltmannによるPixabayからの画像