[MT4][mql4][プログラミング] ゴールデンクロスを検知するサンプルコード

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

事後ではなく、事前にゴールデンクロスを予測したい場合のサンプルコードの記事もありますので合わせて確認してみてください。

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

Contents

MAを使用したゴールデン/デッドクロスを検知するサンプルコード

今回のサンプルコードでは、Moving Average(移動平均は30と60のクロスをチェックするコードとしています。)を使用したゴールデンクロスまたは、デッドクロスを検知するサンプルコードを紹介します。
※あなたの要望に合わせて移動平均値は変更してください。

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

サンプルコード

// Function description : 
//   can get golden(dead) cross or not.
// IN :
//   timeframe : Specifies the Period used to detect the golden cross.
//       shift : Specify the target time (shift amount) used to detect the golden cross.
// OUT : 
//   ret : The calculation result(0 : not cross, 1 : cross to long, -1 : cross to short) will be returned.
//
int getCrossType(int timeframe, int shift)
{
	int ret	= 0;
	
	
	// Whether or not made a golden cross
	// Whether after crossing at the specified time.
	if(iMA(NULL,timeframe,30,0,MODE_SMA,PRICE_CLOSE,shift) > iMA(NULL,timeframe,60,0,MODE_SMA,PRICE_CLOSE,shift))
	{
		// Whether it was not crossed one time before the specified time
		if(iMA(NULL,timeframe,30,0,MODE_SMA,PRICE_CLOSE,shift+1) <= iMA(NULL,timeframe,60,0,MODE_SMA,PRICE_CLOSE,shift+1))
		{
			ret = 1;
		}
	}
	// Whether or not made a dead cross
	// Whether after crossing at the specified time.
	else if(iMA(NULL,timeframe,30,0,MODE_SMA,PRICE_CLOSE,shift) < iMA(NULL,timeframe,60,0,MODE_SMA,PRICE_CLOSE,shift))
	{
		// Whether it was not crossed one time before the specified time
		if(iMA(NULL,timeframe,30,0,MODE_SMA,PRICE_CLOSE,shift+1) >= iMA(NULL,timeframe,60,0,MODE_SMA,PRICE_CLOSE,shift+1))
		{
			ret = -1;
		}
	}
	
	return ret;
}

サンプルコードの説明

引数:

第1引数のtimeframe : Moving Averageの値を取得する際に、基準とする時間足を指定します。指定する値はENUM_TIMEFRAMESであらわされるDefine値のいずれかを指定します。

第2引数のshift : Moving Averageの値を取得する際に、基準とする時間(現在Barからのシフト量)を指定します。
最新の値でのクロス検知をしたい場合は「0」を指定してください。

クロス検知処理 :

ゴールデンクロス検知は、16行目、デッドクロス検知は26行目で、「指定した時刻がクロス済みかどうか」を確認するコードとなっています。

また、19行目または、29行目で、「指定した時刻の一つ前がクロスしていないこと」を確認しています。

上記の2つの条件をどちらもクリアした場合に、クロス検知したことを示す戻り値を設定します。

戻り値 :

戻り値は、下記のような意味を持つ戻り値を返却します。
0:クロスしていません
1:ゴールデンクロスしました
2:デッドクロスしました

MACDを使用したゴールデン/デッドクロスを検知するサンプルコード

上記で説明した、「クロス検知処理」のところで使用しているiMA()をMACDの値を使うようにコードを変更すればMACDを使用したゴールデンクロス/デッドクロスを検知出来ます。

MACDの値を取得する関数は、iMACD()を使用します。

iMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_MAIN,shift)とiMACD(NULL,timeFrame,12,26,9,PRICE_CLOSE,MODE_SIGNAL,shift)を比較してクロスチェックすればよいかと思います。
※詳細な引数のパラメータは各自所望の値に変更してくださいね。

[お知らせ]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万円がキャッシュバックされるキャンペーンもやっていますがこちらは、指定の取引量がかなり大きいので紹介は割愛させていただきます。