MQL4で、MACDクロス、デッドクロスを判定するロジックの書き方を紹介したいと思います。
MACDの値、シグナルの値を取得するには
MQL4でMACDの値を取得するのは、とても簡単です。iMACD関数を使います。
iMACDの引数
iMACDの戻り値は、doubleです。少数点を含むので、ご注意ください。
引数 | 型 | 詳細 |
---|---|---|
symbol | string | 通貨ペア(NULLで現在の通貨) |
timeframe | int | 時間軸(0で現在の時間軸) |
fast_ema_period | int | ファーストEMA期間 |
slow_ema_period | int | スローEMA期間 |
signal_period | int | シグナル期間 |
applied_price | int | 適用価格 |
mode | int | 取得ラインの種類 |
shift | int | 過去何本目の足か? |
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、シグナルの位置関係を比較するだけです。
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のクロス騙しは、頻繁に発生しているので、必ず対処する必要があります。
パラメーター設定で騙しが回避できるか?
パラメータを初期値ではなく、様々な値で色々試せば、回避できるかもしれない。
私も当初はそれを考えましたが、あらゆるケースでバックテストしましたが、全てダメです。あまり得策ではないかと思います。
初期パラメータの設定(12,26,9)で大多数の人は見ているので、大衆心理を考えると、初期設定の動きを考慮することが得策かと思います。
コメント