1. ゴールデンクロス・デッドクロスとは?
ゴールデンクロスとは、短期線が長期線を下から上に突き抜けることです。ゴールデンクロスは買いサインに用いられることが多いです。
デッドクロスとは、短期線が長期線を上から下に突き抜けることです。デッドクロスは売りサインに用いられることが多いです。
2. 移動平均線の値を取得しよう。
前章で分かる通り、ゴールデンクロスやデッドクロスは短期線と長期線の期間の違う2種類の移動平均線を利用します。
2種類の移動平均線から、ローソク足1本前と2本前の移動平均線の値を取得します。
なので、短期線からローソク足1本前と2本前、長期線からローソク足1本前と2本前の合計4つの値を取得します。
移動平均線の値を取得するためにはiMA関数を使用し、取得した値はdouble型の変数に格納します。
double ma_one_short = iMA(NULL,PERIOD_M5,100,0,MODE_SMA, PRICE_CLOSE, 1);
double ma_one_long = iMA(NULL,PERIOD_M5,200,0,MODE_SMA, PRICE_CLOSE, 1);
double ma_two_short = iMA(NULL,PERIOD_M5,100,0,MODE_SMA, PRICE_CLOSE, 2);
double ma_two_long = iMA(NULL,PERIOD_M5,200,0,MODE_SMA, PRICE_CLOSE, 2);
1行目 短期線からローソク足1本前のMA値を取得し、”ma_one_short“に格納。
2行目 長期線からローソク足1本前のMA値を取得し、”ma_one_long“に格納。
3行目 短期線からローソク足2本前のMA値を取得し、”ma_two_short“に格納。
4行目 長期線からローソク足2本前のMA値を取得し、”ma_two_long“に格納。
現在足(0本前)の値を使わない理由は、現在足の形成途中にクロスを確認したが、形成後、結局クロスしなかったということがあるため、確実にクロスを確認したい場合は1本前と2本前で値を取得するのが良い。
それは次の章で解説します。
3. 移動平均線の値を比較しよう。
次は、移動平均線の取得した4つの値を比較します。やることは2つです。
- 2本前の短期線と2本前の長期線の値を比較します。
- 1本前の短期線と1本前の長期線の値を比較します。
この2つを比較し、条件を満たせば、クロスを確認したことになります。
画像と共に、詳しく見ていきましょう。
3-1. ゴールデンクロス時の値を比較
ゴールデンクロス時の移動平均線の値の比較は次のようになります。
2本前では長期線が短期線より大きい。1本前では短期線が長期線より大きい。
2本前長期線>2本前短期線 且つ 1本前短期線>1本前長期線
if( ma_two_long>ma_two_short && ma_one_short>ma_one_long )
{
//ゴールデンクロス時の処理を書く
}
3-2. デッドクロス時の値を比較
デッドクロス時の移動平均線の値の比較は次のようになります。
2本前では短期線が長期線より大きい。1本前では長期線が短期線より大きい。
2本前短期線>2本前長期線 且つ 1本前長期線>1本前短期線
if( ma_two_short>ma_two_long && ma_one_long>ma_one_short )
{
//デッドクロス時の処理を書く
}
4. まとめ(プログラム)
最後に、ここまでに記事の内容をまとめておきます。
- ゴールデンクロス・デッドクロスは短期線と長期線の2種類の移動平均線を用いる。
- 短期線と長期線から1本前と2本前の値、計4つの値をiMA関数を利用して取得する。
- 取得した2本前の短期線と長期線の値を比較する。取得した1本前の短期線と長期線の値を比較する。
- if文で条件を満たすことでゴールデンクロス・デッドクロスを確認する。
まとめプログラムです。変数名やiMA関数の値は自由に変更してお使い下さい。
void OnTick() {
//MA値取得
double ma_one_short = iMA(NULL,PERIOD_M5,100,0,MODE_SMA, PRICE_CLOSE, 1);
double ma_one_long = iMA(NULL,PERIOD_M5,200,0,MODE_SMA, PRICE_CLOSE, 1);
double ma_two_short = iMA(NULL,PERIOD_M5,100,0,MODE_SMA, PRICE_CLOSE, 2);
double ma_two_long = iMA(NULL,PERIOD_M5,200,0,MODE_SMA, PRICE_CLOSE, 2);
//ゴールデンクロス
if( ma_two_long>ma_two_short && ma_one_short>ma_one_long )
{
//ゴールデンクロス時の処理を書く
}
//デッドクロス
if( ma_two_short>ma_two_long && ma_one_long>ma_one_short )
{
//デッドクロス時の処理を書く
}
}