Python mplfinanceによるMACD,RSI,ボリンジャーバンドの表示方法の方法を解説します。mplfinanceには、MACD,RSI,ボリンジャーバンドの計算アルゴは用意されていないので、実装します。実装した計算アルゴの結果をmplfinanceでプロットすることで、MACD,RSI,ボリンジャーバンドの表示をします。
実装環境
Anacondaをインストールして、Jupyternotebookで実行します。環境構築の方法は以下の記事を参考ください。
データセットの準備
以下のコードでデータセットを準備可能です。詳細は以下の記事を参考ください。
今回は、「Zホールディングス」の株価直近1年分のデータを使用します。
import pandas_datareader.data as pdr
import datetime
import pandas as pd
#現在から、指定の日付までの株価を取得する場合
now = datetime.date.today()
end = now
start = end - datetime.timedelta(days=365)#365日分取得
code = 4689#銘柄のコードを入力ください。4689はZホールディングス
#株価取得を関数化
def get_kabuka(code,start,end):
pd_data = pdr.DataReader(str(code)+'.jp', 'stooq', start, end)
return pd_data
kabuka = get_kabuka(code,start,end)
kabuka = kabuka.iloc[::-1]
出力結果
上から古い順にデータセットが並んでいます。
open,High,Low,Close,Volumeが格納されていますね。
- Open:始値
- High:高値
- Low:安値
- Close:終値
- Volume:取引量
kabuka.head()
mplfinanceによるテクニカルチャートの表示方法
概要
mplfinanceによるテクニカルチャートの表示方法を解説します。mplfinanceは、テクニカルチャートを計算するアルゴリズムは用意されていないでので、別途所望のテクニカルチャート用の計算する必要があります。
- 計算結果を
mpf.make_addplot
にキャストし、adpに代入 panel='lower'
でしたのグラフに表示、消すことでローソク足チャートに重ねてプロットcolor='g'
でしたのグラフのカラー変更可能
adp = mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),
- adpをaddplotに代入
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
volume=False, mav=(5, 25,75,200), style='yahoo',xlim= (len(kabuka)-100, len(kabuka)),
mplfinanceによるMACDの表示方法
mplfinanceによるMACDの表示方法は以下のコードで可能です。
macd(df)
にてMACDを計算macd['ema_12'] = df['Close'].ewm(span=12).mean()
にEMA(12)を計算macd['ema_26'] = df['Close'].ewm(span=26).mean()
にEMA(26)を計算adp =[ mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),mpf.make_addplot(kabuka_macd['signal'], panel='lower', color='m')]
でシグナルとMACDをプロットmacd['macd'] = macd['ema_12'] - macd['ema_26']
でMACDを計算macd['signal'] = macd['macd'].rolling(9).mean()
でsignalを計算(SMA(単純移動平均)なのに注意)
def macd(df):
macd = pd.DataFrame()
macd['close'] = df['Close']
macd['ema_12'] = df['Close'].ewm(span=12).mean()
macd['ema_26'] = df['Close'].ewm(span=26).mean()
macd['macd'] = macd['ema_12'] - macd['ema_26']
macd['signal'] = macd['macd'].rolling(9).mean()
return macd
kabuka_macd = macd(kabuka)
adp =[ mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),
mpf.make_addplot(kabuka_macd['signal'], panel='lower', color='m')]
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
volume=False, mav=(5, 25,75,200), style='yahoo')
mplfinanceによるMACDの出力結果
mplfinanceによって、MACDが出力されました。日足チャートの下にMACDが表示されています。
mplfinanceによるRSIの表示方法
mplfinanceによるRSIの表示方法は以下のコードで可能です。
df_diff = df_close.diff()
で前日との差分を計算df_diff.copy()
でコピーdf_up[df_up < 0] = 0
で0以下の数字を0に置き換えdf_down[df_down > 0] = 0
で0以上の数字を0に置き換えdf_up.rolling(14).sum()
で14日分の平均の合計df_down_sum = df_down.abs().rolling(14).sum()
で絶対値の14日分の平均の合計df_RSI = df_up_sum/(df_up_sum + df_down_sum) * 100
でRSIの計算
def rsi(df):
df_close = df['Close']
df_diff = df_close.diff()
df_up = df_diff.copy()
df_down = df_diff.copy()
df_up[df_up < 0] = 0
df_down[df_down > 0] = 0
df_up_sum = df_up.rolling(14).sum()
df_down_sum = df_down.abs().rolling(14).sum()
df_RSI = df_up_sum/(df_up_sum + df_down_sum) * 100
return df_RSI
kabuka_rsi = rsi(kabuka)
adp = mpf.make_addplot(kabuka_rsi, panel='lower', color='y')
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
volume=False, mav=(5, 25,75,200), style='yahoo')
mplfinanceによるRSIの出力結果
mplfinanceによって、RSIが出力されました。日足チャートの下にRSIが表示されています。
mplfinanceによるボリンジャーバンドの表示方法
mplfinanceによるボリンジャーバンドの表示方法は以下のコードで可能です。
bband['mean'] = df['Close'].rolling(window=20).mean()
で20日移動平均bband['std'] = df['Close'].rolling(window=20).std()
で20日分の標準偏差bband['mean'] + (bband['std'] * 1)
で+1σbband['mean'] - (bband['std'] * 1)
で-1σbband['mean'] + (bband['std'] * 2)
で+2σbband['mean'] - (bband['std'] * 2)
で-2σbband['mean'] + (bband['std'] * 3)
で+3σbband['mean'] - (bband['std'] * 3)
で-3σ
def bb(df):
# ボリンジャーバンドの計算
bband = pd.DataFrame()
bband['Close'] = df['Close']
bband['mean'] = df['Close'].rolling(window=20).mean()
bband['std'] = df['Close'].rolling(window=20).std()
bband['upper_1'] = bband['mean'] + (bband['std'] * 1)
bband['lower_1'] = bband['mean'] - (bband['std'] * 1)
bband['upper_3'] = bband['mean'] + (bband['std'] * 3)
bband['lower_3'] = bband['mean'] - (bband['std'] * 3)
bband['upper_2'] = bband['mean'] + (bband['std'] * 2)
bband['lower_2'] = bband['mean'] - (bband['std'] * 2)
bband['upper_3'] = bband['mean'] + (bband['std'] * 3)
bband['lower_3'] = bband['mean'] - (bband['std'] * 3)
return bband
kabuka_bb = bb(kabuka)
adp =[ mpf.make_addplot( kabuka_bb['mean'], color='k'),
mpf.make_addplot( kabuka_bb['upper_1'], color='b'),
mpf.make_addplot(kabuka_bb['lower_1'] , color='b'),
mpf.make_addplot( kabuka_bb['upper_2'], color='g'),
mpf.make_addplot(kabuka_bb['lower_2'] , color='g'),
mpf.make_addplot( kabuka_bb['upper_3'], color='r'),
mpf.make_addplot(kabuka_bb['lower_3'] , color='r'),
]
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
volume=False, style='yahoo')
mplfinanceによるボリンジャーバンドの出力結果
mplfinanceによって、ボリンジャーバンドが出力されました。日足チャートの下にボリンジャーバンドが表示されています。
まとめ
Python mplfinanceによるMACD,RSI,ボリンジャーバンドの表示方法の方法を解説しました。mplfinanceには、MACD,RSI,ボリンジャーバンドの計算アルゴは用意されていないので、実装し、その計算方法を記述しました。実装した計算アルゴの結果をmplfinanceでプロットすることで、MACD,RSI,ボリンジャーバンドの表示可能です。
pythonの勉強におすすめの本は以下の記事を参照してみてください。
pythonのおすすめの勉強方法はUdemyです。こちらの記事も参考にしてみてください。
コメント