「投資苑2に書いてあるシステムをTradingViewで再現し、投資戦略を作り、バックテストを行う」
これを目標に少しずつトレードシステムを作っています。
前回までにオートエンベロープを実装しました。
今回は、MACDを作っていきます。
MACDについて
MACD(マックディー、エムエーシーディー)はトレンドの転換点を分析するためのツールです。
Moving Average Convergence and Divergenceの頭文字をとってMACDと呼ばれています。
日本語に訳すと移動平均収束拡散指標!・・・わかったようなわからないような。
MACDとシグナルの2本の線を使うのが特徴です。
2本の線はどちらもEMAから計算されます。
柱状グラフ(ヒストグラム)は、MACDヒストグラムです。
MACDとシグナルの差を示したものです。
MACDの計算式
MACD = EMA(12) - EMA(26)
シグナル = MACD線のEMA(9)
MACDヒストグラム = MACD線 - シグナル
()の中は期間を表しています。
期間の数値は、標準的なものを採用しています。
期間については、好みで変更できますが、
ほとんど影響はないため、忙しければそのまま使っても良いという風に投資苑2には書いてあります。
計算式を言葉で理解する
計算式からもわかるように、MACDは短期的な価格と長期的な価格の差を表しています。
短期のEMAが長期のEMAよりも上にある時は、MACDは0よりも上にあり、
短期のEMAが下にある時は、MACDはマイナスになります。
MACD線が0になると、短期のEMAと長期のEMAがクロスしていることがわかります。
MACDは移動平均が収束と拡散しているようすがわかる線なのです。
なので、移動平均収束拡散指標なんですね。
シグナルは、MACDの平均線です。
ここ最近(ここでは9期間)の短期EMAと長期EMAの差の平均を表しています。
上がっていけば短期の価格が上昇して、長期との差が広がっていることがわかります。
つまり、シグナルはMACD(EMAの価格差)のトレンドを知るための線です。
MACDヒストグラムはMACDとシグナルの差です。
「短期のEMAと長期のEMAの差」(MACD)と「短期のEMAと長期のEMAの差の平均」(シグナル)の差ということです。
現時点の差と、過去の差の平均が離れすぎていると、山の頂上。
現時点の差と過去の差の平均が同じなら0になります。
MACDの使い方
MACDはトレンドが転換しそうなところを見つけるツールです。
一番わかりやすいのは、MACDヒストグラムが0を交差したタイミングです。
上に交差した場合は、買いシグナル。
下に交差した場合は、売りシグナルです。
先回りして、山の頂上付近の上り始めたところ(または下り始めたところ)で仕掛けるのもありです。
トレンドの勢いを見るときにも使います。
MACDが0より上だと、上昇基調。
0より下だと下落基調。
他には、MACDの波の大きさを見ます。
例えば、同じ価格でもMACD線の高さが前回よりも低ければ、買い方の力が弱まっていると判断します。
MACDをPineで書く
MACDは今まで作ってきたインジケーターとは別画面に表示します。
今までの続きに書くと、同じ枠内に表示されてしまうので、新しくインジケーターを作成します。
一からMACDの計算式を実装しても良いのですが、MACDを使うための便利な関数が用意されているのでそれを使います。
//@version=3
study('MACD')
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
plot(macdLine, color=blue)
plot(signalLine, color=orange)
plot(histLine, color=red, style=histogram)
※リファレンスに書いてあったコードをそのままもらうことにしました。
新しく登場したもの
- macd()
- 配列
- plotのオプション
macd()
macd()はMACDを利用するために用意された関数です。
引数は4つ必要です。
第1引数には使用するデータ(価格)を入れます。今回は終値です。
第2引数には期間の短いほうのEMAの期間の値を入れます。
第3引数には期間が長いほうのEMAの期間の値を入れます。
第4引数にはシグナルの期間の値を入れます。
macd()の計算結果は、[MACD, シグナル, MACDヒストグラム]という風に配列で返ってきます。
受け取るときは、配列で受け取ります。
配列については、次で解説します。
配列
変数は一つの値を入れる箱でしたが、
配列は、複数の値を入れる箱という認識でほぼ問題ないです。
[a, b, c・・・]
a, b, c・・・という風に「,」で区切ると複数の値をしまっておけます。
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macd()の計算結果は[MACD, シグナル, MACDヒストグラム]という形で返ってくるので、
そのままわかりやすい変数名をつけて、後から使いやすいようにしています。
[a, b, c] = macd(close, 12, 26, 9)
という風に受け取っても問題ありませんが、
プログラムを見返した時に「a」を見ただけでは、MACDだとはわかりません。
変数名は後から読んでわかりやすい名前をつけましょう。
plot()のstyle
ほぼ毎回使うplot()ですが、新しいオプションが今回出てきました。
colorで色を付けたときと同じように使用します。
MACDヒストグラムは線グラフではなく、ヒストグラム(柱状グラフ)を使うのが一般的ですし、見やすいです。
plot(histLine, color=red, style=histogram)
という風に指定すると、ヒストグラムで表示できます。
styleで指定できるオプションは
全部でline、stepline、histogram、cross、area、columns、circles
となっています(詳しくは割愛します)。
デフォルトで指定されているのはlineです。
MACDの実装結果

//@version=3
study(title="Making of Trading System part 6", shorttitle="MACD")
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
plot(macdLine, color=blue)
plot(signalLine, color=orange)
plot(histLine, color=red, style=histogram)
チャートに追加すると、overlayを設定していないので、
下に今回作ったMACDのインジケーターが追加されたと思います。
これでオシレーターの定番でもあるMACDを実装できました。
MACDは便利な関数があったので、すばやく実装することができました。
楽をしようと考えるのはとても大事ですね。
ヒストグラムの部分では、グラフの種類を設定するオプションを学びました。
一応、普段使いもできるレベルのチャート画面を一から作成できました。
見づらかったら、自分で線の色などを変更したりできますし、
パラメーターを触ることで、微調整することもできます。
次回は、勢力指数です(手元の投資苑2ではP165~になります)。
コメント