[MT4][mql4][プログラミング] 未来を予測!次の足がゴールデンクロスするかどうかを予測するサンプルコード

mql4で次の足でゴールデンクロスまたはデッドクロスをするかどうかを予測して自動取引を行うプログラムを作成したい人も多いかと思います。
ここでは、次の足でMoving Averageまたは、MACDを使用して、ゴールデン/デッドクロスするかどうかを予測するサンプルコードを紹介します。

現在足で、ゴールデンクロスまたはデッドクロスしたかどうかを検知するサンプルプログラムを公開している記事もありますので合わせて確認してみてください。

また、mql4を実装する上での、フォーマットとなるサンプルコードや、概要に関してはまず、Expert Advisorのフォーマットファイルと概要をご覧ください。

Contents

MACDを使用した次の足でゴールデン/デッドクロスするかどうかを予測するサンプルコード

今回のサンプルコードでは、MACDを使用して次の足でゴールデンクロスまたは、デッドクロスをするかどうかを予測するサンプルコードを紹介します。

MACDの値を取得するには、iMACD()を使用しています。関数詳細仕様はリファレンスをご確認ください。

このゴールデンクロス/デッドクロスを予測するサンプルプログラムは、あくまで過去の2つの線の傾きから次の足でクロスしそうかどうかを予測するサンプルコードとなります。
※過去の線の流れと急に異なる線の遷移になる場合などは次の足でもクロスしないこともあります。

サンプルコード

bool IsCrossInTheNextPeriod(int timeframe)
{
	bool	ret					= false;
	double	currentDiffValue	= iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_MAIN,0) - iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
	double	currentTilt			= getMacdTilt(timeframe, 0);
	
	//傾きマイナスの時、次の足で交差する可能性があるのでマイナスの時のみ交差チェック
	if(currentTilt < 0)
	{
		currentDiffValue = MathAbs(currentDiffValue);
		
		//次の足で、逆転するかどうかのチェック
		if((currentDiffValue + currentTilt) < 0) { ret = true; }
	}
	
	return ret;
}

double getMacdTilt(int timeFrame, int shift)
{
	double base		= (iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_MAIN,shift) - iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_MAIN,shift + 1));
	double target	= (iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift) - iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift + 1));
	double ret		= 0;
	
	if(iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_MAIN,shift) > iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift)) {
		ret = base - target;
	}
	else {
		ret = target - base;
	}
	return ret;
}

サンプルコードの説明

関数 :

IsCrossInTheNextPeriod() : 次の足で、ゴールデン/デッドクロスするかどうかを予測する関数です。

getMacdTilt() : クロスするかどうかを予測する際に、2つの線の傾きを取得する関数です。IsCrossInTheNextPeriod()から呼び出されます。

処理の説明 :

4行目は、2つの線(今回はMACDのMainとSignalの2つの線)の現在の最新の値の差を取得しています。

5行目は、2つの線(今回はMACDのMainとSignalの2つの線)を比較して、線と線の傾きを算出しています。
この傾きを計算することにより、次の足で2つの線が交差するかどうかを予測します。
この傾きがプラスの値の場合は、2つの線は広がっていく関係にあることを示します。
この傾きがマイナスの値の場合は、2つの線は狭くなっていく関係にあることを示します。

13行目で、「2つの線の最新の差分と2つの線の傾きを足合わせる」ことで、2つの線がクロスするかどうかを予測します。

次の足が、ゴールデンクロスなのかデッドクロスなのかを判断するには、クロスを予測する2つの線の現在値を比較することで、次の足でクロスした場合はゴールデンなのかデッドなのかを判断することが出来ます。
IsCrossInTheNextPeriod()の戻り値がtrueだった場合に、ゴールデンなのかデッドなのかをチェックする処理を実装するようなイメージです。

MAを使用した次の足でゴールデン/デッドクロスするかどうかを予測するサンプルコード

上記で説明した、サンプルプログラムのiMACD()をMAの値を使うようにコードを変更すればMoving Averageを使用したゴールデンクロス/デッドクロスを予測出来ます。

Moving Averageの値を取得するには、iMA()を使用します。

MACDのMAINとSIGNALの2つの線を表すコードを、クロス予測したい移動平均線2つの線に置き換えたコードにすれば、Moving averageを使用した予測が可能となります。

[お知らせ]MT4使いのあなたへ

日本の金融商品取引業者にも登録されているゴールデンウェイ・ジャパン社が運営するFXTF のご紹介です。

国内FX業者の中でも最狭水準のスプレッドで有名なFXTFでは、口座開設と2つの指定通貨ペアでの取引を行うだけで1万円のキャッシュバックがあります。

1万円キャッシュバックキャンペーンキャッシュバック受け取り方法:

キャッシュバックの受け取り方法は以下の2つの条件をクリアすることで取引口座へ振り込まれます。

条件1:
FXTFでの新規口座開設
※ここまでだけでも、3000円のキャッシュバックが受け取れます。

条件2:
以下の2通貨ペアそれぞれで1取引、合計2取引を口座開設から10日以内に行うこと。
USDJPY(スプレッド : 0.1銭 原則固定)
GBPJPY(スプレッド : 0.6銭 原則固定)
※取引量は問われないようです。
※この条件を達成すると追加で7000円キャッシュバックされます。(条件1と合わせて合計1万円になります)

その他補足情報:

MT4:利用可
関東財務局長(金商)登録番号:第258号

FXTFはMT4が使えて、スプレッドもとても小さいFX国内業者の為、このキャッシュバックキャンペーン期間中にメイン/サブ口座として開設するのもいいかもしれませんね。
※MT4での指定の取引量の取引を行うと、さらに+5万円がキャッシュバックされるキャンペーンもやっていますがこちらは、指定の取引量がかなり大きいので紹介は割愛させていただきます。