//MQL4互換ライブラリ(MQL5のみ)
#include "LibMQL4.mqh"
カスタム指標プログラムでは、共通ライブラリのなかのLibMQL4.mqh
を利用します。これは、MQL5でMQL4と互換性をもたせるためのライブラリです。テクニカル指標関数、カスタム指標関数をMQL4と同じ書式で使えるようにします。
#property indicator_chart_window //チャートウィンドウに表示
#property indicator_buffers 1 //指標バッファの数
#property indicator_plots 1 //表示させる指標バッファの数
#property indicator_type1 DRAW_LINE //指標の種類
#property indicator_color1 clrRed //ラインの色
#property indicator_width1 2 //ラインの太さ
#property indicator_style1 STYLE_SOLID //ラインの種類
#property
から始まる命令で、指標のスタイルや色などプログラム全体の設定をします。詳しくはこちらを参照してください。
double Buf[];
表示させたい指標の値を格納するための配列を宣言します。配列のサイズは指定しません。
int OnInit()
{
//配列を指標バッファに関連付ける
SetIndexBuffer(0, Buf);
//時系列配列に設定
ArraySetAsSeries(Buf, true);
return(INIT_SUCCEEDED);
}
プログラムの最初に1回だけ実行する関数です。ここでは、SetIndexBuffer()
で、上で宣言した配列を指標バッファに関連付けます。さらにArraySetAsSeries()
で、その配列を時系列配列に設定します。
時系列配列とは、配列のインデックスが最新のバーで0から始まり、過去にさかのぼるにつれ、1、2、3・・・と増えていく配列のことです。カスタム指標プログラムの場合、必ずしも時系列配列に設定する必要はありませんが、MQL4との互換性を考慮して時系列配列にしています。
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[])
{
//時系列配列に設定
ArraySetAsSeries(open, true);
ArraySetAsSeries(high, true);
ArraySetAsSeries(low, true);
ArraySetAsSeries(close, true);
int limit = rates_total - prev_calculated; //プロットするバーの数
for(int i=0; i<limit; i++)
{
Buf[i] = (open[i]+high[i]+low[i]+close[i])/4;
}
return(rates_total-1);
}
ティックの度に実行され、指標を表示する関数です。指標バッファに関連付けられた配列に値を代入することで、指標値が表示される仕組みとなっています。
チャートの4本値はopen[]
、high[]
、low[]
、close[]
という配列に格納されています。ArraySetAsSeries()
で、利用する配列を時系列配列に設定しておきます。
この例は4本値の平均を表示するという、特に意味のないカスタム指標ですが、変数i
を0
からlimit-1
まで繰り返してチャート全体の指標を表示させています。
limit
の計算に利用するrates_total
、prev_calculated
について説明します。rates_total
はチャート全体のバーの数です。バーが増えるにつれて増えていきます。