MQL4(MT4)でMACDのクロスを判断するには?

MQL4で、MACDクロス、デッドクロスを判定するロジックの書き方を紹介したいと思います。

目次

MACDの値、シグナルの値を取得するには

MQL4でMACDの値を取得するのは、とても簡単です。iMACD関数を使います。

iMACDの引数

iMACDの戻り値は、doubleです。少数点を含むので、ご注意ください。

引数詳細
symbolstring通貨ペア(NULLで現在の通貨)
timeframeint時間軸(0で現在の時間軸)
fast_ema_periodintファーストEMA期間
slow_ema_periodintスローEMA期間
signal_periodintシグナル期間
applied_priceint適用価格
modeint取得ラインの種類
shiftint過去何本目の足か?

iMACDの使い方

実際の使い方は以下のとおりです。

//MACDの値
double macd_main   = iMACD(NULL,PERIOD_CURRENT,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

//シグナルの値
double macd_signal = iMACD(NULL,PERIOD_CURRENT,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

MACDのゴールデンクロスの判定方法

クロスを判定するには、1本前のMACDの値、シグナルの値を取得する必要があります。

1本前のMACDの値、シグナルの値が必要

iMACDの最後の引数に数字を入れれば、何本前のMACDの値を取得することができます。

//1本前のMACDの値
double macd_main_1   = iMACD(NULL,PERIOD_CURRENT,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

//1本前のシグナルの値
double macd_signal_1 = iMACD(NULL,PERIOD_CURRENT,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MACDクロスの判定ロジック

MACD のクロスの判定は、1本前のMACDの位置、シグナルの位置と、現在のMACD、シグナルの位置関係を比較するだけです。

クロスした1本前は、シグナルがMACDより上です。しかし、クロス後はシグナルがMACDより下です。これをコードに書きます。

MACDゴールデンクロス、デッドクロス判定ソースコード

前提として、iMACDで現在のMACDと1つ前のMACDを取得しておきます。

//MACDゴールデンクロス
if(macd_signal_1 > macd_main && macd_signal < macd_main){
    //クロス後の処理
}
//MACDデッドクロス
else if(macd_signal_1 < macd_main && macd_signal > macd_main){
    //デッドクロス後の処理
}

MACDクロス判定の問題点

ここで、大事なのは、MACDとシグナルの値の判定だけで組んでしまうと、以下のようなケースが対処出来ません。

MACDとシグナルが絡まってしまう時

キレイにクロスしない事の方が多いのです。

目視だと絶対やらないポイントですが、上記の場面だと何度も動いてしまいます。

クロス騙し

抜けきらずに、または抜けても反転して、戻ってしまう時です。いわゆる「騙し」です。MACDのクロス騙しは、頻繁に発生しているので、必ず対処する必要があります。

抜けきった後として、判定したいなら、1本前でクロスしたかを判定するのも手です。

パラメーター設定で騙しが回避できるか?

パラメータを初期値ではなく、様々な値で色々試せば、回避できるかもしれない。

私も当初はそれを考えましたが、あらゆるケースでバックテストしましたが、全てダメです。あまり得策ではないかと思います。

初期パラメータの設定(12,26,9)で大多数の人は見ているので、大衆心理を考えると、初期設定の動きを考慮することが得策かと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

仮想通貨botや、MT4のEA開発、インジケーターなどを作ってます。このブログでは検証結果を書いていきたいと思ってます。

コメント

コメントする

目次