MQL5超入門(9)/#property と IndexBuffer の種類

昨日に引き続き、MQL5超入門の第九回です。
これまでは、他のプログラミング言語にも共通する文法的なお話が主体でしたが、これからはMQL5に特化した内容になります。


MQL5 でも、インジケータの先頭には、

#property XXXXXXX YYYY

という表記をそのまま使います。
MQL4 と比較して変わった部分は、現時点では、以下の通りです。

Constant Type Description
version string バージョン番号 ( 31文字まで )
description string 説明 ( 複数行合せて511文字まで )
indicator_buffers int indicator の計算用/表示用バッファ総数
indicator_plots int indicator の表示用バッファ総数
script_show_confirm 旧 show_confirm
script_show_inputs 旧 show_inputs


バージョン( version ) と説明( description ) は、

#property version     "3.26"  
#property description "ZigZag Indicator tracks and connects extreme points of the chart,"
#property description "the distance between these points being equal or "
#property description "higher than the percentage specified for the price scale."

こんな感じに使います。description は、改行したい場合複数行に分けて書きますが、トータルでの文字数は511文字までです。


IndexBuffer は、MQL4 では表示用に8本まで使えましたが、MQL5 からは、バッファ数に制限が無くなり ( 仕様上は512本 らしい)
バッファの種類が、表示用、色設定用、内部計算用 の3種類にわかれました。
以下は、3種類を使い分けるときのコードサンプルです。

#property indicator_chart_window
#property indicator_buffers 3   // 使用するバッファの合計数を指定する。
#property indicator_plots   1    // 実際にラインを引いて表示させる為のバッファ数を指定する。

//--- indicator buffers
double         MABuffer,TempBuffer;
int         ColorBuffer[];

void OnInit()   // 従来 init() で行っていた処理を OnInit() で行う。
{
SetIndexBuffer(0,MABuffer,INDICATOR_DATA);           // ラインを引く為のバッファ
SetIndexBuffer(1,ColorBuffer,INDICATOR_COLOR_INDEX); // ラインの色のインデックスを指定するバッファ
SetIndexBuffer(2,TempBuffer,INDICATOR_CALCULATIONS); // 内部で計算に使う為だけのバッファ
//// SetIndexBuffer の3番目の引数で、バッファの種類を指定している。

MQL4 では、赤黄青の3色でラインを塗り分けようとすると、3本のバッファに値を設定する必要があったのですが、
それが、値を設定する為のバッファ( INDICATOR_DATA ) と、色を指定する為のバッファ( INDICATOR_COLOR_INDEX ) の2本で何色でも表現できるようになったのは、大きなメリットです。


EA を作成するだけの人には、大した効能はないのですが、iCustom で呼び出す際にバッファの種類を意識してもらったらよいと思います。
次回は、いよいよインジケータの作成に入ります..。