MACDをPythonを使って計算してみる。MACDの計算方法や使い方のまとめ。
こんばんは、新米データサイエンティスト(@algon_fx)です。今週末は色々と別件がありまして、なかなか機械学習FXの方の勉強が進みませんでした。ってことで、また今日から気を引き締めて勉強を進めていく所存です!
週初めの一発目の勉強は特徴量としてのPython テクニカル指標シリーズとして、前回は指数平滑移動平均(EMA)をPtythonを使って計算しましたが、今回はEMAの兄弟分とも言える「MACD」をやってみたいと思います。
では、MACDの概要や使い方、またPythonを使ってMACDの計算をしてみましょう。
【人気記事】
MACDとは?
まず読み方ですが「マックディー」または「エム・エー・シー・ディー」と読みます。日本語ではおそらく前者のマックディーの方が一般的かと。英語だとMoving Average Convergence Divergence。
MACDですが、ボリンジャーバンドと同様に初心者から上級者まで様々なレベルのトレーダーに使われており、人気の高い定番のテクニカル指標の一つです。
最大の特徴として、MACDはEMA(指数平滑移動平均)の長期と短期の値を用いており、主にトレンドの方向性や転換期を見極める指標として使われます。
参考までにですが、MACDが開発されたのは1970年代のようです。金融の指標って、なんか年代物が多くて少し感動しますよね。
MACDの計算方法
MACDですが、「MACD」「短期EMA」「長期EMA」「シグナル」の主に4つの指標を算出する必要があります。
MACDで使われる指数平滑移動平均(EMA)ですが、一般的に短期は12、長期は26の期間で算出されます。(日足なら12日・26日、1分足なら12分、26分)
この短期と長期のEMAの「差」がMACDのとなります。下記がMACDの計算式となります。EMAの計算は少し複雑でしたが、MACDは簡単ですね。
MACD = 短期EMA(12) – 長期EMA(26)前述した通りMACDでは「シグナル」と呼ばれる指標も使われます。シグナルは、MACDの指数平滑移動平均(EMA)となります。このシグナルの期間ですが一般的には9を利用されるのが多いです。
シグナル = MACDの指数平滑移動平均(9)流れとして、まずは短期・長期のEMAを計算して、MACDを算出して、さらにシグナルを算出する流れですね。EMAさえ算出してしまえば、MACDはとても簡単に用意できてしまう訳です。
MACDの使い方
MACDですが、主にシグナルとあわせて使う方法とMACDの値を見て判断する2種類の方法があります。両方ともさっくり考えてみましょう。
まずは、MACDとシグナルを見て使う方法です。これはトレンドを判別するシグナルで、下記が具体的な使い方です。
・シグナルをMACDが下から上へ抜けた時=上昇トレンドが始まるよーー!=買いシグナル
・シグナルをMACDが上から下へ抜けた時=下降トレンドが始まるよーー!=売りシグナル
上のチャートですが、上部のローソク足チャートがドル円の1分足で、下部のチャートの青色がMACD(EMA12 – EMA26)、赤色がシグナル(MACDのEMA9)となっています。
最初の赤矢印のポイントに注目すると、MACD(青線)がシグナル(赤線)を上から下へ抜けていますね。このポイントが売りのシグナルです。
青矢印のポイントは逆にMACDがシグナルを上抜けしています。つまり買いシグナルで、実際にその後のレートも上昇トレンドとなっていますね。
2つ目の使い方としては、MACDの値を見てシグナルを判断します。
・MACDがプラスの値からマイナスの値へ変換した=下降トレンド(売りサイン)
・MACDがマイナスの値からプラスの値へ変換した=上昇トレンド(買いサイン)
上のチャートですが、同様にドル円の1分足にMACD(青色)のみを表示させて、0ラインを緑色に引きました。
赤矢印を見てみると、MACD(青色)がプラスからマイナスへ、つまり0ライン(緑)を下抜けています。このポイントが下降トレンドへ突入した=売りのサインとなります。実際にレートも下降しているのがわかります。
参考までにですが、計算方法を見てもわかりますが、MACDは短期EMA – 長期EMAとなっています。つまり、MACDの値が正から負になるのは「デッドクロス」な訳ですね。
MACDをPythonで計算してみる
MACDの計算方法、使い方もわかりましたので、次は実際にPythonで計算をしてみましょう。
使うデータですが、ビットコインの2017年〜現在の日足のレートを使いましょう。(参照:仮想通貨の過去レートのスクレイピング)
まずは必要なライブラリのインポートを行います。
1 2 3 4 5 6 7 |
#ライブラリのインポート import pandas as pd import time import matplotlib.pyplot as plt import datetime |
次にビットコインの過去レートをスクレピングして、データフレームへ格納してあげましょう。2017年1月1日から今日までのビットコインのレートをスクレピングします。
1 2 3 4 5 6 7 |
# コインマーケットキャップからデータをスクレイピング bitcoin = pd.read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20170101&end="+time.strftime("%Y%m%d"))[0] bitcoin = bitcoin.assign(Date=pd.to_datetime(bitcoin['Date'])) bitcoin['Volume'] = bitcoin['Volume'].astype('int64') bitcoin.head() |
データが用意できたので、いよいよMACDの計算処理です。EMAでの計算でもやりましたが、同様にPandasの ewm にスパンを指定してEMA12とEMA26をまず算出してあげます。
MACDた単純にEMA12 – EMA26で算出して、最後にシグナルとしてMACDの値の指数平滑移動平均(9)を計算してあげましょう。
1 2 3 4 5 6 7 8 9 10 11 |
# MACDの計算を行う macd = pd.DataFrame() macd['date'] = bitcoin['Date'] macd['close'] = bitcoin['Close'] macd['ema_12'] = bitcoin['Close'].ewm(span=12).mean() macd['ema_26'] = bitcoin['Close'].ewm(span=26).mean() macd['macd'] = macd['ema_12'] - macd['ema_26'] macd['signal'] = macd['macd'].ewm(span=9).mean() macd.head() |
大丈夫そうですね。念のため、Matplotlibを使ってビットコインの終値とMACDをサブプロットで表示して見ましょう。
1 2 3 4 5 6 7 8 9 10 |
#ビットコインの価格をプロッティング fig, (ax1, ax2) = plt.subplots(2,1, gridspec_kw = {'height_ratios':[3, 1]}) ax1.plot(macd['date'].astype(datetime.datetime), macd['close']) ax2.plot(macd['date'].astype(datetime.datetime), macd['macd']) ax2.plot(macd['date'].astype(datetime.datetime), macd['signal']) fig.tight_layout() plt.show() |
大丈夫そうですね。ただ、こうやってみると仮想通貨のレートだとMACDのシグナル云々でトレードは出来なさそうですが(笑)
まとめと次の課題
今日は特徴量としてのテクニカル指標としてMACDの基本的な使い方や計算方法、さらにビットコインの過去レートを使って実際にPythonで計算をしてみました。
EMAの短期と長期の差がMACDな訳ですが、他の移動平均の値なども同様の数値を算出して特徴量として使えるのかの検証を今度やってみたいと思いました。
ブログ読んでいただきありがとうございます!Twitterでも色々と発信しているので、是非フォローお願いします!
ディスカッション
コメント一覧
まだ、コメントがありません