インジケータ―作成その4【指数平滑移動平均線を追加】

インジケータ―作成その4【指数平滑移動平均線を追加】

前回までの記事

前回までの記事をまだ読んでない方は、まずはそちらから読み進めてください。

→前回完成ファイルをダウンロード

今回の内容は、「2本目のライン指数平滑移動平均線(EMA)を表示させる」です。

目次

インジケーター用配列を追加

「#property」で始まる部分を次のように変更・追加します。

#property indicator_buffers 2
#property indicator_color2 clrYellow   // 2つ目の色 黄色
#property indicator_width2 2           // 2つ目の太さ 2

表示用インジケーターバッファを2つと定義して、2つ目の色と太さの初期設定をします。

そして、SMA用のパラメーターと配列の宣言と同じように、次のようにEMA用のパラメーターと配列を追加します。

extern int  EMA_Period  = 20;
double ema[];

OnInit()関数内に次のコードを追加して、インジケーターバッファ1番として割り当てとスタイルの設定をします。

   SetIndexBuffer(1, ema);             // 配列「ema」をインジケーター用に割り当てる
   SetIndexStyle(1, DRAW_LINE);        // 描画スタイルをラインと定義

EMAの計算式

はじめは単純移動平均で計算して、その後からは次の式で算出します。

(前回EMA × (期間-1) + 今回終値 × 2) ÷ (期間+1)

「前回EMA少なめ、終値増しで。」って感じですね。

EMAの計算式をコード化する

for()文内で算出開始のシフト数にも気を付けて、EMAの計算式を次のようにコード化します。

      if (i + EMA_Period - 1 <= Bars - 1)
      {
         if(i + EMA_Period - 1 == Bars - 1) // 最初はSMAで算出
         {
            ema[i] = 0;
            for (j=0; j<EMA_Period; j++) ema[i] += Close[i+j];
            ema[i] /= EMA_Period;
         }
         else // その後は前回EMAと終値で算出
         {
            ema[i] = ema[i+1] * (EMA_Period - 1) + Close[i] * 2;
            ema[i] /= EMA_Period + 1;
         }
      }

MT4のEMA

MetaTrader4のインジケーター「Moving Average」でEMAを表示させると、ラインの始まり方が先ほど計算したEMAのライン表示と異なります。

MT4流のEMAを描画するには先ほどのコードの代わりに次のようなコードにします。

      if(i == Bars - 1) ema[i] = Close[i];
      else
      {
         ema[i] = ema[i+1] * (EMA_Period - 1) + Close[i] * 2;
         ema[i] /= EMA_Period + 1;
      }

意外とシンプルになりましたね。

→今回の完成ファイルをダウンロード

まとめ

追加した指数平滑移動平均線EMAは正常に表示されましたか?
今回と同様の手順で3本目のラインやさらに多くのラインを追加していけるのでぜひ挑戦してみてください。

ではまた、次回をお楽しみに!

コメントを投稿する

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)






画像の中に見える文字を入力してください。

Captchaの認証で入力ミスがありますと、コメントが消えてしまいますのでご注意ください。
コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。