1,000人限定!!企画に参加してEAをGetする公式ラインに登録して
プレゼントをもらう

【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

です。

まずは移動平均線を2つ表示させるためにバッファを2つ用意しましょう。

#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

これでプロパティの記述は完了です。

#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
Copy

バッファを定義する

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

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

double sma[];//バッファ定義
double ema[];//バッファ定義

これでバッファの定義は完了です。

double sma[];//バッファ定義
double ema[];//バッファ定義
Copy

OnInit()関数に記述する

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

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

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

SetIndexBuffer(0,sma);//インデックス0にsma配列を紐付け
SetIndexBuffer(1,ema);//インデックス1にema配列を紐付け

これでOnInit()関数の記述は完了です。

SetIndexBuffer(0,sma);//インデックス0にsma配列を紐付け
SetIndexBuffer(1,ema);//インデックス1にema配列を紐付け
Copy

OnCalculate()関数に記述する

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

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

今回は

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

表示させていきます。

まずは、いつもどおりに未計算のバーを計算します。

int limit = Bars-IndicatorCounted();//未だ計算されていないバー数(チャート上のバー数 - 計算済みバー数)

つぎにfor文でいつもどおりに繰り返し計算させます。

for(int i=0; i < limit; i++)

最後にfor文の条件が満たされている場合に移動平均線を表示させましょう。

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

これでOnCalculate()関数の記述は完了です。

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のソースコード全体は以下に記載しています。

//+------------------------------------------------------------------+
//|                                                   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);//インデックス0に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つの種類の移動平均線を表示することができましたね。

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

1,000人限定でFXの自動売買のEAを無料で配布中!!

FX-EA System Projectでは、

【1,000人限定で無料でFXの自動売買のEAを配布中】

です!!

・毎日チャートを見てるのに全く稼げなかった

・コンサルや塾に入ったけど全く稼げなかった

・裁量トレードは難しくて挫折した

・ツールやシステムを購入したが全く稼げなかった

・時間がなくて裁量トレードを行える時間がない

・自動で楽に稼ぎたい

という風に思っている方はこの企画はおすすめです。

フォワードテスト・バックテストを

しっかり行ったパフォーマンスの良いEAを提供中です!!

また、どんどん新しいEAも随時無料配布します!!

人数限定なので早いものがちです!!

もしFX-EA System Projectに興味があれば

是非参加してください。

MT4インジケーター作成 初級編
\記事が役に立ったらシェアしてね/
FX-EA System Projectをフォローする
FX-EA System Project Creator

コメント

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