MT5のインジケーターの計算値取得方法(MQL5の書き方)
インジケーターの計算値取得方法
MQL4では、iRSI()やiBands()などのテクニカル指標関数を使用して、条件に応じた計算値を取得することができます。一方、MQL5では、テクニカル指標関数の戻り値はハンドルとなります。このハンドルを元に、配列を用意し、インジケーターの値を配列にコピーすることで参照できます。
MQL5におけるインジケーターの計算値取得の流れは以下の通りです。
テクニカル指標関数からハンドルを取得する。
配列を宣言する。
インジケーターの値を配列にコピーする。
必要に応じて、配列の順番を変更する。
ハンドルを解放する。
以下は、MQL5におけるインジケーターの計算値取得の使用例です。
//テクニカル指標関数からハンドルを取得する
int Handle = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, MODE_CLOSE);
//配列の宣言
double MAbuffer[];
void OnTick(){
//インジケーターの値を配列にコピーする
CopyBuffer(Handle, 0, 0, 10, MAbuffer);
//配列の順番の変更する
ArraySetAsSeries(MAbuffer, true);
//最新の移動平均線の値をコメントに表示する
Comment(MAbuffer[0]);
}
void OnDeinit(const int reason){
//ハンドルの解放
IndicatorRelease(Handle);
}
解説)
int Handle = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, MODE_CLOSE);
Handleを宣言しiMAのハンドルを代入します。
ハンドルは識別子です。複数のテクニカル指標関数を使用する時に区別するための値で、MT5から割り振られます。
double MAbuffer[];
テクニカル指標関数の計算結果を入れる配列を宣言します。配列は動的配列を使用します。
※動的配列とは[]にサイズを入れずに宣言をする配列のことです。
CopyBuffer(Handle, 0, 0, 10, MAbuffer);
テクニカル指標関数の計算結果をMAbufferに代入します。
今回は0個目から10個代入しています。
ArraySetAsSeries(MAbuffer, true);
MQL4では常に最新の値が0、過去にむかって数字が増えましたが、CoppyBuffer()で代入した直後のMAbufferは最も古い値が0で現在に向かって数字が増えていきます。
ArraySetAsSeries()関数でMQL4と同じように最新の値が0に順番を変えます。
Comment(MAbuffer[0]);
確認の為コメントに最も新しいMAの値を表示しています。
IndicatorRelease(Handle);
終了処理OnDeinit()でハンドルを開放しています。
※ストラテジーテスターではIndicatorRelease()は実行されません。
MQL5は複数のシフトのインジケーターの計算値が同時に取得できます。
今回はArraySetAsSeries()で順番を入れ替えていますが、CopyBuffer()で1個だけ取得する場合には不要な作業です。
更新のタイミングはティック動作毎ではなく、1分間に数回程度です。
執筆者
MT5
Trading View
記事執筆者のご紹介
お役立ちコンテンツ