移動平均線を使ったEAを作る際に必要なこと

EA
スポンサーリンク

概要

今回は、FXのテクニカル指標で特にメジャーな移動平均線について、EAを作る際に移動平均線の判断を組み込むにはどうしたらいいかについて解説していきます。

移動平均線の上向きと下向き、ゴールデンクロスやデッドクロス、パーフェクトオーダー系に関する内容についてプログラミングするにはどうしていったらいいかです。

それでは、早速見て行きましょう!

EAで移動平均線の値を取得する

これは、皆さん既にご存知だとは思いますが一応解説します。

よくわからずにプログラミングをしていて、うまく移動平均線関連の処理をアレンジできない方はこの知識を知っておくと便利ですよ!

取得方法

【使用例】
double dMA_atai   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

移動平均線の値を取得するにはiMA()関数を使います。これをEAに書き込むと、dMA_ataiに最新の移動平均線の値が取得できるという感じです。

移動平均線の最新の値や1つ前の値について

何故最新の値が取得されるのかというと、引数の最後が0となっているからです。

【例】
double dMA_atai   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);

こんな感じで1にすると1つ前の値といった感じです。

最新(0)?1つ前(1)?と思うかもしれませんが、実際のチャートで表すとこんな感じです。


各ローソク足に移動平均線の値が1つあると思いましょう。実は移動平均線って線で見えますが、実際は点って考えておくとこの辺はわかりやすいです。見た目上、見やすいように点を結んで移動平均線という形にしてるんですね。

iMA()関数の引数について

iMA()関数の引数は以下の通りです。

  1. 引数1・・・通貨ペアです(NULLでチャートの通貨になります)
  2. 引数2・・・時間軸です(0でチャートの時間軸になります)
  3. 引数3・・・期間です(20で20移動平均線、25で25移動平均線になります)
  4. 引数4・・・表示移動です
  5. 引数5・・・移動平均の種別です(MODE_SMAで単純移動平均線)
  6. 引数6・・・適用価格です(PRICE_CLOSEでクローズ値)
  7. 引数7・・・バーシフトです(0で現在の値、1で1つ前ーのバーの時の値です)

基本的に3,5,7しか触りません。(7は先ほど説明した最新や1つ前の値を取る場合に触ります)

3:期間、5:移動平均線の種別種別は用途や好みによって変えますが、MT4の移動平均線設定画面上で見るとイメージしやすいですね。

期間は、何日(20日)移動平均線とかのあの数値です。

移動平均線の種別は、4種類あり単純移動平均線や指数移動平均線を設定できます。

  • 単純移動平均線:MODE_SMA
  • 指数移動平均線:MODE_EMA
  • 平滑移動平均線:MODE_SMMA
  • 線形加重移動平均線:MODE_LWMA

移動平均線の値の使い方

移動平均線の値の取得方法はわかったけど、実際にエントリー判断する際はどうやって使うの?ということで、次は値の使い方についてです。

  • ローソク足の終値が移動平均線の上抜け・下抜けを判断
  • 移動平均線の上向き・下向きを判断
  • 移動平均線のパーフェクトオーダーを判断
  • 移動平均線のゴールデンクロス・デッドクロスを判断

①ローソク足の終値が移動平均線の上抜け・下抜けを判断

移動平均線をローソク足の終値が上抜けた場合にロングエントリーするソースコードです。

//----MA値取得      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 

   //移動平均線をローソク足の終値が上抜けた場合
   if(MA_ATAI_1 < iClose(NULL, 0, 1))
   {
      //ロングエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

すごくシンプルですね!

移動平均線の値(MA_ATAI_1)を、ローソク足の終値(iClose(NULL, 0, 1))が大きかった場合、つまり上抜けた場合にロングエントリーという感じです。

赤〇箇所のように、ローソク足の終値が移動平均線より大きい(上抜けしている)場合にロングエントリーといった感じですね!もう少し手前に黄色〇がある箇所はローソク足の高値は移動平均線を超えていますが、ローソク足の終値が移動平均線を超えていない為ロングエントリーしません。

//----MA値取得      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 

   //移動平均線をローソク足の終値が下抜けた場合
   if(MA_ATAI_1 > iClose(NULL, 0, 1))
   {
      //ショートエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

ショートエントリーする際は、こんな感じで5行目を下抜けしたらという感じに書き換えてあげるだけでOKですね!

②移動平均線の上向き・下向きを判断

続いて移動平均線が下向きになった場合にショートエントリーするソースコードです。

//----MA値取得      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 
   double MA_ATAI_2   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 2); 


   //移動平均線が下向きになった場合
   if(MA_ATAI_2 > MA_ATAI_1)
   {
      //ショートエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

今回は3行目のように移動平均線の値を、1つ前の値と2つ前の値という感じで2つ取得しています。

移動平均線の上向き、下向きを判断する場合はこのように2つ取得する必要があるので覚えておきましょう。理由は、以下の画像を見てもらえばわかります。

このように移動平均線の値1つ前が2つ前よりも(わずかでも)下だったら移動平均線が下向きとなっている事がわかります。反対に、移動平均線の値1つ前が2つ前よりも(わずかでも)上だったら移動平均線は上向きとなります。

//----MA値取得      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 
   double MA_ATAI_2   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 2); 


   //移動平均線が上向きだった場合
   if(MA_ATAI_2 < MA_ATAI_1)
   {
      //ロングエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

上向きにしたい場合は、7行目のところで不等号を変えているだけですね。

③移動平均線のパーフェクトオーダーを判断

次は移動平均線のパーフェクトオーダーを判断する方法です。パーフェクトオーダーとは、複数の移動平均線が全て同じ方向(全て上向き・全て下向き)となっている事をさします。

先ほどの『②移動平均線の上向き・下向きを判断』をちょっと応用した感じになりますね。早速ソースコードはこんな感じです。

//----MA値取得(短期)      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 
   double MA_ATAI_2   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 2); 

//----MA値取得(中期)      
   double MA_ATAI_3   = iMA(NULL, 0, 60, 0, MODE_SMA, PRICE_CLOSE, 1); 
   double MA_ATAI_4   = iMA(NULL, 0, 60, 0, MODE_SMA, PRICE_CLOSE, 2);

   //移動平均線(短期・中期)が上向きだった場合
   if(MA_ATAI_2 < MA_ATAI_1 && MA_ATAI_4 < MA_ATAI_3)
   {
      //ロングエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

移動平均線の値を4つも取得してきています。短期移動平均線(20)と中期移動平均線(60)の値を取得してきているためですね。長期などもう1本移動平均線を増やす場合は、移動平均線の値が6つ必要になるという事です。

10行目のif文の条件のところは、移動平均線(短期・中期)が上向きだった場合という感じにしています。

④移動平均線のゴールデンクロス・デッドクロスを判断

続いて移動平均線がゴールデンクロスした場合にエントリーするソースコードです。

//----MA値取得(短期)      
   double MA_ATAI_1   = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1); 

//----MA値取得(中期)      
   double MA_ATAI_2   = iMA(NULL, 0, 60, 0, MODE_SMA, PRICE_CLOSE, 1); 

   //移動平均線(短期・中期)がゴールデンクロスした場合
   if(MA_ATAI_2 < MA_ATAI_1)
   {
      //ロングエントリーする処理を書く
      OrderSend(NULL,・・・省略);
   }
   else
   {
      //エントリーしない   
   }

こちらは、移動平均線のゴールデンクロスは短期移動平均線が中期や長期の移動平均線を上抜けていく事になるので、このような感じになります。

移動平均線のゴールデンクロスやデッドクロスを使ったEAのサンプルソースはこちらの記事に記載していますので参考にしてみてください。

さいごに

以上が、『移動平均線を使ったEAを作る際に必要なこと』です。

移動平均線はEAでも大変人気なテクニカルインジケータとなっているため、使う機会も多いと思いますのでこの機会にしっかりと理解しておきましょう!

※プログラミング知識が無くてもEAが作れる!


※オンラインレッスン

コメント