MACDについて。計算式、チャート、エクセルVBAコード
MACDは2本の指数平滑移動平均線の差から求められ、トレンドや乖離などを判断する際に使用される指標です。
指数平滑移動平均線は、全期間のデータを考慮した移動平均線ですが、詳細は移動平均線の計算方法についての投稿をご覧下さい。
計算式や計算方法、チャート、エクセルVBAコードを掲載しています。
MACDの計算式
MACDは上述の通り2本の指数平滑移動平均(EMA)の差から求められますので、下記が計算式となります。(x,y,zはそれぞれ採用本数)
MACD = EMA(x) – EMA(y)
***EMAの計算***(Nは採用本数)
1本目(期間の最初の計算)=(当日も含め)N本の終値の平均
2本目以降=前日のEMA+Y×{当日終値-前日のEMA}
※Y=2÷(N+1)
例えば、3本指数平滑移動平均線の場合、1本目は3本の単純移動平均線。
2本目以降は、Y=2÷(3+1)=0.5 で、直前EMA+0.5×(当日終値-直前EMA)
**********************************
MACD(シグナル) = MACDのZ本単純移動平均
MACD(OSCI) = MACD ‐ MACD(シグナル)
MACDとMACD(シグナル)のクロスで売買サインとみなします。
MACD(OSCI)は、上昇転換(好転)で買いサイン、下降転換(暗転)で売りサインと見れますし、上昇中は上昇トレンドの継続、下降中は下降トレンドの継続と判断できます。
MACDのチャート
黄色線=MACD、赤線=MACD(シグナル)、青の棒グラフ=MACD(OSCI)
MACDはレートに限らず任意の指標の値の指数平滑移動平均線を2本計算すれば、どんな指標でも適用し計算することが可能です。
例えば、下記はストキャスティクス(%K)をMACD化したチャートです。
次は、一目均衡表の先行スパン1をMACD化したチャートです。
MACDのエクセルVBAコード
最後にMACDのVBAコードです。
‘※ エクセルの1列目(A列)に行番号、2列目(B列)に日時、
‘※ 3列目(C列)~6列目(F列)に始値・高値・安値・終値
‘********************************
‘ema1 :MACDのEMA(1)の採用本数
‘ema2 :MACDのEMA(2)の採用本数
‘sig :MACD(シグナル)の採用本数
‘num:現在の行
‘cell_ema1:EMA(1)の書込み列
‘cell_ema2:EMA(2)の書込み列
‘cell_macd:MACDの書込み列
‘cell_sig:MACD(シグナル)の書込み列
‘cell_osci:MACD(OSCI)の書込み列
‘********************************
ema1 = 5
ema2 = 10
sig = 3
cell_ema1 = 7
cell_ema2 = 8
cell_macd = 9
cell_sig = 10
cell_osci = 11
‘—–ema1
If num + 1 = ema1 Then
Cells(num, cell_ema1) = Application.WorksheetFunction.Average _
(Range(Cells(num – (ema1 – 1), 6), .Cells(num, 6)))
End If
If num + 1 > ema1 Then
Cells(num, cell_ema1) = Cells(num – 1, cell_ema1) + _
((Cells(num, 6) – Cells(num – 1, cell_ema1)) * 2 _
/ (ema1 + 1))
End If
‘—–ema2
If num + 1 = ema2 Then
Cells(num, cell_ema2) = Application.WorksheetFunction.Average _
(Range(Cells(num – (ema2 – 1), 6), .Cells(num, 6)))
End If
If num + 1 > ema2 Then
Cells(num, cell_ema2) = Cells(num – 1, cell_ema2) + _
((Cells(num, 6) – Cells(num – 1, cell_ema2)) * 2 _
/ (ema2 + 1))
End If
‘—–macd
If Cells(num – 1, cell_ema1) <> “” _
And .Cells(num – 1, cell_ema2) <> “” Then
Cells(num, cell_macd) = Cells(num, cell_ema1) – Cells(num, cell_ema2)
End If
‘—–signal
If num >= ema2 + sig + 1 Then
Cells(num_1, cell_sig) = Application.WorksheetFunction.Average _
(Range(Cells(num – (sig – 1), cell_macd), _
Cells(num, cell_macd)))
End If
‘—–osci
If .Cells(num, cell_macd) <> “” _
And .Cells(num, cell_sig) <> “” Then
Cells(num_1, cell_osci) = Cells(num, cell_macd) – Cells(num, cell_sig)
End If
(外部リンク)テクニカル指標(Wikipedia)
ピンバック: 色んな指標をMACD化してみる | IBI-Square