FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】2つの種類の違う移動平均線を表示させるインジケーター【初級編】

MQL インジケーター作成 2つの移動平均線を表示MT4インジケーター作成

2つの種類の違う移動平均線を表示させるインジケーター

前回は1つの移動平均線を表示できたので、

今度は異なる種類の移動平均線を表示させるインジケーターを作成していきましょう。

SMAとEMAの2つの種類の移動平均線を表示させたいと思います。

  • SMAの移動平均線を表示させる
  • EMAの移動平均線を表示させる

メタエディタを開く

メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。

【MQL】カスタムインジケーターを作成の流れについてわかりやすく説明してみた
カスタムインジケーターの作成の流れ カスタムインジケーターの作成の流れを説明していきます。 メタエディターを起動する MetaEditor(メタエディタ)をMT4から起動させる方法は以下の通りです。 ツール→メタエデ...

今回は名前を「ma-sample2」で作成します。

プロパティを記述する

今回は2つの移動平均線を使うので2つのプロパティを記述します。

バッファも2つ用意します。

1つ目の移動平均線は

  • 赤色
  • SOLID
  • 幅3

2つ目の移動平均線は

  • 黄色
  • SOLID
  • 幅3

です。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Yellow
#property indicator_style1 STYLE_SOLID
#property indicator_style2 STYLE_SOLID
#property indicator_width1 3
#property indicator_width2 1
Copy

バッファを定義する

バッファの定義します。今回は移動平均線が2つなのでバッファも2つ用意します。

sma[]とema[]の2つのバッファを作りましょう。

double sma[]; 
double ema[];
Copy

OnInit()関数に記述する

OnInit()関数に記述していきます。

今回は配列を2つ使うので、SetIndexBufferも0と1の2つを使います。

0にsmaの配列を紐付けして、1にemaの配列を紐付けします。

SetIndexBuffer(0,sma);
SetIndexBuffer(1,ema);
Copy

OnCalculate()関数に記述する

OnCalculate()関数に記述にはiMA関数の情報を記述していきます。

前回は1つでしたが、今回は2つ必要になります。

今回は

  • 期間20
  • SMAとEMAを1つずつ

表示させていきます。

int limit = Bars-IndicatorCounted();//未だ計算されていないバー数(チャート上のバー数 - 計算済みバー数)
   for(int i=0; i < limit; i++)
   {
      sma[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);//期間20のSMA
      ema[i] = iMA(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, i);//期間20のEMA
   }
Copy

コンパイルする

コンパイルしてチャートにセットして赤色と黄色の移動平均線が表示されていればOKです。

MQL インジケーター作成 2つの移動平均線を表示

ソースコード全体

//+------------------------------------------------------------------+
//|                                                   ma-sample2.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2//バッファ2つ
#property indicator_color1 Red//赤色
#property indicator_color2 Yellow//黄色
#property indicator_style1 STYLE_SOLID//実線
#property indicator_style2 STYLE_SOLID//実線
#property indicator_width1 3//幅3
#property indicator_width2 3//幅3
double sma[];//バッファ定義
double ema[];//バッファ定義

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,sma);//インデックスにsma配列を紐付け
   SetIndexBuffer(1,ema);//インデックスにema配列を紐付け
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
int limit = Bars-IndicatorCounted();//未だ計算されていないバー数(チャート上のバー数 - 計算済みバー数)
   for(int i=0; i < limit; i++)
   {
      sma[i] = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);//期間20のSMA
      ema[i] = iMA(NULL, 0, 20, 0, MODE_EMA, PRICE_CLOSE, i);//期間20のEMA
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Copy

まとめ

これで2つの種類の移動平均線を表示することができましたね。

今回のソースコードを応用すれば、何本でも移動平均線を表示させることができるようになりましたね。

コメント

タイトルとURLをコピーしました