カスタム指標では、チャート上にプロットするための指標バッファのほかに、指標値の途中計算のための指標バッファを使うことができます。そのため、使用する指標バッファの数と、プロットする指標バッファの数をそれぞれ宣言する必要があります。
ところが、MQL4とMQL5とで宣言の仕方が違うの注意が必要です。
使用する指標バッファの数が2個、プロットする指標バッファの数が1個の場合、MQL4では以下のように宣言します。
//プログラムのプロパティ
#property indicator_buffers 1 //プロットする指標バッファの数(MQL4)
:
:
//初期化関数
int OnInit()
{
IndicatorBuffers(2); //使用する指標バッファの数(MQL4);
:
:
}
使用する指標バッファの数が2個、プロットする指標バッファの数が1個の場合、MQL5では以下のように宣言します。
//プログラムのプロパティ
#property indicator_buffers 2 //使用する指標バッファの数(MQL5)
#property indicator_plots 1 //プロットする指標バッファの数(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版に記述してあっても問題ありません。