MQL4MQL5 時系列データ(バー・価格)
iTime()
- できること
- 指定したバーの開始時刻を取得する
- 対応
- MQL4・MQL5
iTime() とは
銘柄・時間足・バーの位置を指定して、そのバーが始まった時刻(サーバー時刻)を返す関数です。「新しい足ができたか」の判定によく使います。
iTime() の書式と引数
MQL4 の場合MT4
datetime iTime(string symbol, int timeframe, int shift)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。PERIOD_CURRENT(チャートの時間足)、PERIOD_H1、PERIOD_D1 など。 |
shift | int | 必須 | バーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL4)
バーの開始時刻。データがないときは 0。
MQL5 の場合MT5
datetime iTime(
const string symbol,
ENUM_TIMEFRAMES timeframe,
int shift
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | const string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT(チャートの時間足)、PERIOD_H1、PERIOD_D1 など。 |
shift | int | 必須 | バーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL5)
バーの開始時刻。データがないときは 0。
iTime() の使い方(コード例)
MQL4・MQL5 共通
// 新しい足ができたときだけ true を返す
static datetime last = 0;
datetime t = iTime(_Symbol, PERIOD_CURRENT, 0);
bool isNewBar = (t != 0 && t != last);
if(isNewBar)
{
last = t;
Print("新しい足:", TimeToString(t));
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
MQL4 と MQL5 の違い
MQL4 の Time[shift] にあたります。
iTime() を使う逆引きレシピ
- 同じ足で何度もアラートが鳴らないようにしたい最後にアラートを出した足の時刻を覚えておき、同じ足なら鳴らさないようにします。
- メールを送りたいSendMail(件名, 本文) を使います。事前に MT4・MT5 の「オプション」→「メール」の設定が必要です。
- ゴールデンクロス・デッドクロスで売買したい短期 MA と長期 MA の値を「2本前」と「1本前」で比べ、上下が入れ替わったらクロスと判定します。
- 新しい足ができたときだけ処理したい今の足の開始時刻 iTime(_Symbol, PERIOD_CURRENT, 0) を前回の値と比べ、変わったら新しい足と判定します。
- RSI の買われすぎ・売られすぎでサインを出したいRSI を2本分取得し、30 を下から上に戻ったら買いサイン、70 を上から下に戻ったら売りサインと判定します。
- 前日の高値・安値ブレイクを判定したいiHigh(_Symbol, PERIOD_D1, 1)・iLow(_Symbol, PERIOD_D1, 1) で前日の高値・安値を取得し、現在値と比べます。
- 陽線・陰線や連続陽線を判定したい終値と始値を比べ、終値 > 始値なら陽線、終値 < 始値なら陰線です。連続は確定足を順に調べます。
- 手持ちのインジケーターのサインで売買したいiCustom() でインジケーターを読み込み、矢印が出るバッファの値が 0・EMPTY_VALUE 以外ならサインと判定します。












