MACD(Moving Average Convergence/Divergence Trading Method)

 

概要
図1 MACDの描画例

1979年にジェラルド・アペル氏によって考案されたオシレータ系のテクニカル指標です。移動平均の考え方を発展させたもので、2本の移動平均線を用いて相場の周期と売買のタイミングを捉えるものです。ダマシが少ないという評判からポピュラーに使われる指標の一つです。

MACDは図1のようにMACDと呼ばれる線とSignalと呼ばれる線を使用します。MACDは2本の計算期間の異なる移動平均線の差をとったもので、SMAではなくEMAを使用して計算します。EMAはSMAと比べて新しいデータにより重きが置かれて反映されるので、現在の相場への応答性が良くなっています。SignalはMACDの移動平均をとったものですが、こちらはSMAを使用します。また、指標情報を提供する証券会社によってはMACDからSignalを差し引いた数値やヒストグラムが同時に表示されている場合があります。

計算方法(日足の場合)

短期線と長期線、2本のEMA(n)を用意します。標準的な場合、短期線は12日間のEMA(12)を、長期線は26日間のEMA(26)を使用します。

まず、一般にMACDと呼ばれる値を定義します。MACDは2本のEMAの差をとったものです。これで当日のMACDの値が出来ました。各日で同様の計算を行いMACDのラインを引きます。

$$ \rm{} MACD=EMA(12)-EMA(26) $$

次にSignalと呼ばれる、MACDの移動平均を用意します。こちらには標準で9日を足し合わせたSMA(9)を使用して計算します。

$$ \rm{} Signal=\sum_{i=1}^{9}{MACD}/9 $$
Pythonによる実装

必要なライブラリを読み込みます

!pip install mpl_finance #Collaboratoryに入っていないライブラリを読み込みます
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import mpl_finance
import sys
import numpy as np
from datetime import datetime
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import requests
import io

csvデータの読み込み

#ファイルの読み込み
URL = "https://neulab.co.jp/wp-content/uploads/pseudo_data.csv" #csvファイルのURL

datafile = requests.get(URL)#ファイルの読み込み

#データフレームの作成
df_temp = pd.read_csv(io.BytesIO(datafile.content), header=0, index_col=0, parse_dates=True, encoding="UTF-8")

df = df_temp.loc[:,['Open','High','Low','Close']]
df.head()

MACDを計算します

df_ema1 = df['Close'].ewm(span=12).mean()
df_ema2 = df['Close'].ewm(span=26).mean()
df_MACD = df_ema1 - df_ema2

df_Signal = df_MACD.rolling(9).mean()

チャートを描画し、

canvas_color = '#fffafa'
line_color = '#c8ced1'
font_color = '#171510'
colorup = '#bf0000'
colordown = '#006fbf'

n_data = -100
data = df[n_data:]
ohlc = np.vstack((range(len(data)), data.T)).T

fig, (ax1, ax2) = plt.subplots(2, 1, gridspec_kw={'height_ratios': [10, 6]}, sharex=True, figsize=(12,9))
fig.patch.set_facecolor(canvas_color)
ax1.patch.set_facecolor(canvas_color)
mpl_finance.candlestick_ohlc(ax1, ohlc, width=0.5, alpha=1, colorup=colorup, colordown=colordown)
ax2.patch.set_facecolor(canvas_color)
ax2.plot(range(len(data)), df_MACD.values[n_data:], color='red', ls='-', label='MACD')
ax2.plot(range(len(data)), df_Signal.values[n_data:], color='blue', ls='-', label='Signal')
ax1.grid()
ax2.grid()

#ロゴ読み込み
logoURL = "https://neulab.co.jp/wp-content/uploads/logo.png" #ロゴファイルのURL
img_c = plt.imread(logoURL)
imagebox = OffsetImage(img_c, zoom=0.020) #画像をimageboxにいれる。
imagebox.image.axes = ax1
im_sabo = AnnotationBbox(imagebox, (0, 9850), xybox=(0, 9900), xycoords="data", boxcoords="data", pad=0.3, frameon=False)

l1,l2 = ax2.get_legend_handles_labels()
ax2.legend(l1,l2, fontsize=14, edgecolor='none', facecolor=canvas_color)

ax1.add_artist(im_sabo)
ax1.set_ylabel("Price of Something", fontsize=22)
ax1.set_ylim(9000., 10000.)
ax1.yaxis.tick_right()
ax1.yaxis.set_label_coords(0, 0.5)
ax1.tick_params(labelsize=24, labelcolor=font_color, color=line_color)

ax1.spines['left'].set_linewidth(0)
ax1.spines['right'].set_linewidth(0)
ax1.spines['top'].set_linewidth(0)
ax1.spines['bottom'].set_linewidth(0)

ax2.yaxis.tick_right()
ax2.set_ylim([-300,300])
ax2.tick_params(labelsize=22, labelcolor=font_color, color=line_color)
#ax2.set_yticks(np.linspace(0,100,6))

ax2.spines['left'].set_color(line_color)
ax2.spines['right'].set_color(line_color)
ax2.spines['top'].set_color(line_color)
ax2.spines['bottom'].set_color(line_color)

xtick0 = 2
plt.xticks(range(xtick0,len(data),12), [x.strftime('%m/%d') for x in df_ema1.index][xtick0::12])

plt.subplots_adjust(left=0.05, right=0.89, bottom=0.1, top=0.99)
plt.grid(which='major',color=line_color,linestyle='-')
plt.grid(which='minor',color=line_color,linestyle='-')

ax2.grid(linestyle='--', lw=1)
ax1.set_axisbelow(True)

fig.savefig('MACD.png', facecolor=fig.get_facecolor(), edgecolor='none')

以上のコードをGoogle社の提供しているColaboratory上で公開しており、実際に動作させることができます。

リンクはこちら

予想

売買のタイミングは図2のようにMACDとSignalが交差した時で、

以上が基本的な予想の方法です。これはMACDのトレンドをMACDの移動平均線であるSignalとの交差で判定しているということです。

また、交差がどこで起きているかが見るべきポイントです。買いの場合にMACDとSignalの数値が両方とも0を上回っていると信頼度が増し、売りの場合は逆にMACDとSignalが0を下回っていると信頼度が増します。これはMACDの計算方法に由来しています。MACDは2本の移動平均線の引き算で計算しますが、移動平均線同士の位置関係を考えると、買いの場合は短期のEMA>長期のEMAとなるので引き算が0以上の値をとり、売りの場合は短期のEMA<長期のEMAとなるので引き算が0以下の値になるため信頼度が増すのです。

図2 MACDを使った売買予想
注意点

値動きが横ばいのレンジ相場では小さな値動きで交差が頻発するので、MACDを使うのに向いていません。また、一方的な上昇相場や下降相場では逆にMACDとSignalの両方が横(平行)に寝てしまい交差が起きないので、やはり使うのに向いていません。


※このHPページで紹介しているテクニカル指標を使った取引ルールや売買シグナルの見方は一般的な考え方に基づくものであり、利益の増加や損失の減少を保証するものではありません。ご自身の判断にてお取引いただきますようお願いいたします。


現在、ニューラボでは人工知能による取引アルゴリズムを開発中です。11月にリリース予定。乞うご期待!
自動取引にご興味を持たれましたら お問い合わせページよりお気軽にお問合せください。