mplfinanceでMACDを描写する
概要
目的
前回の「mplfinanceで指数平滑移動平均線(EMA)を描写する」の続きで、次はMACDを描写していきます。
変数については過去の内容を反映しています。そのため、まだ過去の記事を読まれていない方は、「mplfinanceでチャートを描写する」から始めてください。
MACD
MACDとは
MACDについては、auカブコム様のサイトに詳細が載っています。MACDはMoving Average Convergence -Divergenceの略で移動平均収束-発散法と言われています。MACDでは12日と26日の指数平滑移動平均の差分で表されます。
$$\mathrm{MACD=EMA(12)-EMA(26)}$$
次に「シグナル」ですが、こちらはMACDの9日指数平滑移動平均になります。
$$\mathrm{シグナル=EMA(MACD)}$$
MACDではMACDとシグナルの差分の変化を見やすくするために、ヒストグラムもよく活用されます。ヒストグラムは下記式で表されます。
$$\mathrm{ヒストグラム=MACD-シグナル}$$
プログラム
以下のプログラムでMACDの描写が可能です。青線がMACD、黄緑色がシグナルを表しています。
スクリプトの内容について説明をしていきます。
MACDを算出する
mplfinanceで描写をするために、まずはMACDをPythonの数式で表していきます。
ema12 = df['Close'].ewm(span=12, adjust=False).mean()
ema26 = df['Close'].ewm(span=26, adjust=False).mean()
macd = ema12 - ema26
signal = macd.ewm(span=9, adjust=False).mean()
histogram = macd - signal
前回と同様にewm関数で指数平滑移動平均を計算しています。先程のMACDの定義をそのままPythonに置き換えています。
グラフの追加
addplotの使い方については前回説明をしているので、前回と異なる点について解説していきます。
まずはヒストグラムの表現について、type=’bar’が追加されています。今までは直線のグラフしか表示してこなかったため記載は不要でしたが、その他のグラフを記載したい場合はtypeの指定が必要となります。今回は棒グラフを記載したいのでbarを指定しています。
macd_line = [
mpf.make_addplot(macdpanel=2, color='blue', width=0.7),
mpf.make_addplot(signalpanel=2, color='lime', width=0.7, secondary_y = False),
mpf.make_addplot(histogram, type='bar',width=0.7,panel=2, color='#6E6E6E', secondary_y = False)
]
スタイルの指定
前回はSBI証券のスタイルに近づけるためにVolumeの幅を調整用のwidth_adjuster_version=’v0’という引数を使いました。そのまま適応してグラフを記載すると、Volume幅のみにスタイルが適応されているためヒストグラムのスタイルと幅が違っていて違和感があります。
そこで、グラフの調整方法の指示に従ってボリュームの幅をヒストグラムに合わせていきます。説明によると、setupというパラメータを格納する変数を用意して、描写をするときにscale_width_adjustment=dict(volume=XX)と記載することでグラフの幅が調整できると記載されています。試したところ0.6くらいにするとヒストグラムと幅が合います。
setup = dict(type='candle', volume=True, datetime_format='%Y/%m/%d', figsize=(9,5), style=cs, xrotation=False, ylabel='', ylabel_lower='')
グラフの描写
plot関数に先程作成したsetup変数とMACDのデータを渡します。
mpf.plot(df, **setup,scale_width_adjustment=dict(volume=0.6), addplot=macd_line)
まとめ
mplfinanceを使用してMACDを描写する方法について紹介しました。
いかがでしょうか。そろそろmplfinanceの描写にも慣れてきたのではないでしょうか?
次のステップ
DMIを描写したい方は「mplfinanceでDMIとADXを描写する」に進んでください。