【Python】mplfinance・pytiを使った株価チャートの作成。ローソク足、出来高、移動平均線、ボリンジャーバンド、MACD、RSI

みなさんこんにちは、ZeroTerasu(@ZeroTerasu)です。

今回は、金融関連の作図に用いられるPythonライブラリの「mplfinacen」を用いて株価チャートの作成を進めていきます。

尚、今回使用するデータフレームは、以前のpandas-datareaderの記事で作成したものを流用しますので、こちらの記事もご参照下さい。

今回使用するデータフレーム(stooqから取得した日経平均株価)
import pandas_datareader.data as pdr
from datetime import date, time, datetime

ticker = '^NKX'
data_source = 'stooq'
start = date(2022,1,1)
end = date.today()
df = pdr.DataReader(ticker, data_source, start, end).sort_index(ascending=True)
df[:5]
# 実行結果
                Open	    High	     Low	   Close	     Volume
      Date					
2022-01-04	29098.41	29323.79	28954.56	29301.79	660373200.0
2022-01-05	29288.80	29387.92	29204.45	29332.16	786258200.0
2022-01-06	29136.75	29158.95	28487.87	28487.87	715910200.0
2022-01-07	28711.53	28811.00	28293.70	28478.56	751712100.0
2022-01-11	28380.90	28471.73	28091.15	28222.48	737064600.0

以降、このコードで作成された「df」を元データとして使用致します。

また、今回はボリンジャーバンド、MACD、RSIのインジケーター作成には、「pyti」というライブラリを使用しています。

mplfinanceのインストール:pip install mplfinance

まずは、通常通りpip install でmplfinanceをインストールします。

pip install mplfinance

pytiのインストール:pip install pyti

同様に、通常通りpip install でpytiをインストールします。

pip install pyti

ローソク足チャートの作成:mpf.plot(df, type=’candle’)

・チャートの作成には、「mplfinance.plot(データフレーム, type=’candle’)」を使用します。

・plotメソッドの引数に「データフレーム」を渡し、属性「type」に「candle」を指定することでローソク足のチャートが作成できます。

・「データフレーム」は、datetime型のデータがインデックスとなり、始値・高値・安値・終値のデータを含んでいる必要があります。

・属性「type」には、「candle」の他に、type=’line’, type=’renko’, or type=’pnf’ があります。また、typeを省略した場合、デフォルトで「ohlc(Open-high-low-close chart)」のチャートが作図されます。

import mplfinance as mpf
mpf.plot(df, type='candle)
# 実行結果は下記画像

出来高の追加:mpf.plot(df, type=’candle’, volume=True)

・出来高を表示するためには、キーワード引数「volume」を「True」に設定するだけだ大丈夫です。

import mplfinance as mpf
mpf.plot(df, type='candle, volume=True)
# 実行結果は下記画像

移動平均線の追加:mpf.plot(df, type=’candle’, mav=(5, 25, 75))

・移動平均線を表示するためには、キーワード引数「mav(moving average)」にタプル型で(短期線の間隔, 中期線の間隔, 長期の間隔)を設定するだけだ大丈夫です。

・例では、5日移動平均、25日移動平均、75日移動平均を表示しています。

import mplfinance as mpf
mpf.plot(df, type='candle, volume=True, mav=(5, 25, 75)
# 実行結果は下記画像

ボリンジャーバンドの追加:mpf.plot(df, type=’candle’, addplot=apd)

・ボリンジャーバンドを表示するためには、キーワード引数「addplot」に「apd=mpf.make_addplot(df[[Pytiで作成した各σのリスト]])」を格納します。

・「apd = mpf.make_addplot()」とは、mplfinanceが、始値・高値・安値・終値・出来高しか認識できないため、その他のデータを認識させるために使用するメソッドです。

・例では、期間を20日間としています。

from pyti.bollinger_bands import upper_bollinger_band as bb_up
from pyti.bollinger_bands import middle_bollinger_band as bb_mid
from pyti.bollinger_bands import lower_bollinger_band as bb_low

data = df['Close'].values.tolist()
period = 20

df['bb_up3'] = bb_up(data, period, 3)
df['bb_up2'] = bb_up(data, period, 2)
df['bb_up1'] = bb_up(data, period, 1)
df['bb_mid'] = bb_mid(data, period)
df['bb_low1'] = bb_low(data, period, 1)
df['bb_low2'] = bb_low(data, period, 2)
df['bb_low3'] = bb_low(data, period, 3)

apd = mpf.make_addplot(df[['bb_up3','bb_up2','bb_up1','bb_mid','bb_low1','bb_low2','bb_low3']])
mpf.plot(df,type='candle',addplot=apd,volume=True)
# 実行結果は下記画像

MACDの追加:mpf.plot(df, type=’candle’, addplot=apd)

・MACDを表示するためには、キーワード引数「addplot」に「apd=mpf.make_addplot(df[[Pytiで作成した各σのリスト]])」を格納します。

・「apd = mpf.make_addplot()」とは、mplfinanceが、始値・高値・安値・終値・出来高しか認識できないため、その他のデータを認識させるために使用するメソッドです。

・例では、MACD短期=12日、MACD長期=26日、SMA=9日を期間として設定しています。

from pyti.bollinger_bands import upper_bollinger_band as bb_up
from pyti.bollinger_bands import middle_bollinger_band as bb_mid
from pyti.bollinger_bands import lower_bollinger_band as bb_low

data = df['Close'].values.tolist()
period = 20

df['bb_up3'] = bb_up(data, period, 3)
df['bb_up2'] = bb_up(data, period, 2)
df['bb_up1'] = bb_up(data, period, 1)
df['bb_mid'] = bb_mid(data, period)
df['bb_low1'] = bb_low(data, period, 1)
df['bb_low2'] = bb_low(data, period, 2)
df['bb_low3'] = bb_low(data, period, 3)

apd = mpf.make_addplot(df[['bb_up3','bb_up2','bb_up1','bb_mid','bb_low1','bb_low2','bb_low3']])
mpf.plot(df,type='candle',addplot=apd,volume=True)
# 実行結果は下記画像

RSIの追加:mpf.plot(df, type=’candle’, addplot=apd)

・RSIを表示するためには、キーワード引数「addplot」に「apd=mpf.make_addplot(df[‘RSI’])」を格納します。

・「apd = mpf.make_addplot()」とは、mplfinanceが、始値・高値・安値・終値・出来高しか認識できないため、その他のデータを認識させるために使用するメソッドです。

・例では、期間を14日間としています。

from pyti.relative_strength_index import relative_strength_index as rsi

data = df['Close'].values.tolist()
period = 14

df['rsi'] = rsi(data,period=period)
apd = mpf.make_addplot(df[['rsi']],color='b',panel=2)
mpf.plot(df, type='candle', addplot=apd, volume=True)
# 実行結果は下記画像

コメント

タイトルとURLをコピーしました