【MQL4テクニック】指定の時間からバーのシフト数を取得する方法

MQL4テクニック

時間を指定してバー(ローソク足)のシフト数を取得する方法をご紹介します。

例えば5分足で動かしているときに、現在の足のオープン時間が1分足では何本前かというのが知りたいときなどに役立ちます。

iBarShift関数を利用して指定の時間からバーシフト数を取得する

iBarShift関数は、以下の書式で時間を指定してバーのシフト数を取得することができます。

int iBarShift(string symbol, int timeframe, datetime time, bool exact = false);

引数の意味は以下です。

引数名詳細
symbol通貨ペアを指定します。
timeframe時間足を指定します。
timeシフト数を取得したい時間を指定します。
exact検索モードを指定します。
false: 指定した時間のバーが存在しない場合、一番近いバーのシフト数を返します。デフォルトの設定はfalseです。
true: 指定した時間のバーが存在しない場合、-1を返します。

実際に取得してみる

コードを書いて、実際に取得してみます。

datetime time = iTime(Symbol(), Period(), 10);
datetime future = time + Period() * 60 * 100;

Print(iBarShift(Symbol(), Period(), time, false));
// 結果10
Print(iBarShift(Symbol(), Period(), future, false));
// 結果 0
Print(iBarShift(Symbol(), Period(), future, true));
// 結果 -1

iTime関数を用いてシフト数が10のバーのオープン時間を取得し、それに100本分の時間を足して存在しない(未来の)時間を用意します。

存在しない時間を参照しているので、exactがfalseの場合は最新足のシフト数である0が、trueの場合は-1が返ります。

この関数を応用すれば、1分足のチャートから5分足のシフト数を取得するなど様々な応用が可能です。

POINT

こちらの記事で悩みが解決されない場合は、
MQL4 User Community に参加してお気軽にご質問ください。

MQL4初心者の方や開発に行き詰った方の悩みを、 様々なソフトウェアやツールを開発してきた経験豊富なエンジニアたちが解決いたします。