【MQL4テクニック】ローソク足のオープン時間を取得する方法。Time[]とiTime()の違いとは?

MQL4テクニック

ローソク足のオープン時間(足形成の開始時間)を取得するための、2種類の方法を紹介します。

Time[]を使用する

Time[]は、各ローソク足のオープン時間を格納している定義済み配列です。

ローソク足のシフト数をTime[]のインデックスに指定することで、シフト数に対するオープン時間を取得することが出来ます。

サンプルコード

//今足のオープン時間
datetime nowBar = Time[0];

//N本前のローソク足のオープン時間
int shift = 1; //今回の取得するローソク足は1本前のものです。
datetime oldBar = Time[shift];

//一番古いローソク足のオープン時間
datetime oldestBar = Time[Bars - 1];

Barsには、チャートに表示されているローソク足の数が格納されています。

よってBars – 1をインデックス番号に指定することで、一番古いローソク足のオープン時間を取得することもできます。

iTime関数を使用する

iTime()関数は、指定したシフト数に対するローソク足のオープン時間を返します。

Time[]とは違い、通貨ペアと時間足を指定することが可能です。

datetime iTime(string symbol, int timeframe, int shift);

引数の意味は以下です。

引数名詳細
symbol通貨ペア名を指定します。
適用したチャートの通貨ペアは、NULLまたはSymbol()と指定します。
timeframe時間足を指定します。
指定できる時間足はこちら
適用したチャートの時間足は、0またはPeriod()と指定します。
shiftローソク足のシフト数を指定します。

サンプルコード

//チャートに表示されている今足のオープン時間を取得します
datetime barTime1 = iTime(Symbol(), Period(), 0);

//通貨ペア:USDJPY 時間足:1H N本前のローソク足のオープン時間を取得します。
int shift = 1; //今回の取得するローソク足は1本前のものです。
datetime barTime2 = iTime("EURPY", PERIOD_H1, shift);

Time[]とiTime()の使い分け

int shift = 0; //シフト数は任意
datetime barTime1 = Time[shift];
datetime barTime2 = iTime(Symbol(), Period(), shift);

上記二つは同じ結果を得られるので、「同じものでは?」「どうやって使い分けるの?」と思う方もいるかもしれません。

EAやインジケータを適用したチャートに表示されている、通貨ペアや時間足をそのまま指定したい場合はTime[]で問題ありません。

しかし、「チャートの時間足を切り替えても、常に4時間足のオープン時間を取得したい!」という場合には、iTime()関数を使用して引数に「PERIOD_H4」を渡してあげる必要があります。

また、EAやインジを適用したチャートの通貨ペアはUSD/JPYだが、取得したい情報がEUR/JPYのものである場合でもiTime()関数が活躍します。

  • チャートの通貨ペア・時間軸のまま取得したいときはTime[]
  • それ以外の情報を取得したい・常に同じ情報を取得したい場合はiTime()関数

と使い分けましょう。

POINT

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

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