カスタム指標では、チャート上にプロットするための指標バッファのほかに、指標値の途中計算のための指標バッファを使うことができます。そのため、使用する指標バッファの数と、プロットする指標バッファの数をそれぞれ宣言する必要があります。

ところが、MQL4とMQL5とで宣言の仕方が違うの注意が必要です。

MQL4の場合

使用する指標バッファの数が2個、プロットする指標バッファの数が1個の場合、MQL4では以下のように宣言します。

//プログラムのプロパティ
#property indicator_buffers 1  //プロットする指標バッファの数(MQL4)
  :
  :
//初期化関数
int OnInit()
{
   IndicatorBuffers(2);  //使用する指標バッファの数(MQL4);
  :
  :
}

MQL5の場合

使用する指標バッファの数が2個、プロットする指標バッファの数が1個の場合、MQL5では以下のように宣言します。

//プログラムのプロパティ
#property indicator_buffers 2  //使用する指標バッファの数(MQL5)
#property indicator_plots 1    //プロットする指標バッファの数(MQL5)

MQL4/MQL5で共通化させる場合

このようにMQL4とMQL5とで記述方法が異なっているのですが、これを共通化させるために、以下のように#ifdef#endifというプリプロセッサ命令を用いることができます。

#ifdef __MQL4__
   #property indicator_buffers 1  //プロットする指標バッファの数(MQL4)
#endif
#ifdef __MQL5__
   #property indicator_buffers 2  //使用する指標バッファの数(MQL5)
#endif
  :
  :
//初期化関数
int OnInit()
{
   #ifdef __MQL4__
      IndicatorBuffers(2); //使用する指標バッファの数(MQL4)
   #endif
  :
  :
}

#ifdef __MQL4__#endifで囲った部分は、MQL4としてコンパイルするときだけ有効となります。また#ifdef __MQL5__#endifで囲った部分は、MQL5としてコンパイルするときだけ有効となります。

この仕組みを利用することで、同じソースファイルでMQL4用とMQL5用のカスタム指標プログラムを作成することができます。

なお、#property indicator_plotsは、MQL4では無視されるだけなので、MQL4版に記述してあっても問題ありません。