MQL4MQL5 時系列データ(バー・価格)
iClose()
- できること
- 指定したバーの終値を取得する
- 対応
- MQL4・MQL5
iClose() とは
銘柄・時間足・バーの位置を指定して、そのバーの終値を返す関数です。チャートと違う時間足や通貨ペアの価格も取得できます。現在のバー(shift=0)の終値は、いまの Bid です。
iClose() の書式と引数
MQL4 の場合MT4
double iClose(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
double iClose(
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。
iClose() の使い方(コード例)
MQL4・MQL5 共通
double c1 = iClose(_Symbol, PERIOD_CURRENT, 1); // 1本前(確定)の終値
double d1 = iClose(_Symbol, PERIOD_D1, 1); // 前日の終値
if(c1 == 0 || d1 == 0)
Print("データがまだありません");
else
Print("前の足の終値=", c1, " 前日の終値=", d1);OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iClose() の注意点
- 売買判断には、値が確定した shift=1 以降のバーを使うのが基本です。shift=0 はティックごとに値が変わります。
- ほかの時間足のデータがまだ読み込まれていないと 0 が返ることがあります(エラー4066 など)。
MQL4 と MQL5 の違い
MQL4 では Close[1] のように定義済み配列でも取得できますが、MQL5 には Close[] がありません。iClose() は両方で使えるので、移植しやすい書き方です。
iClose() でよく出るエラー
iClose() を使う逆引きレシピ
- 同じ足で何度もアラートが鳴らないようにしたい最後にアラートを出した足の時刻を覚えておき、同じ足なら鳴らさないようにします。
- 新しい足ができたときだけ処理したい今の足の開始時刻 iTime(_Symbol, PERIOD_CURRENT, 0) を前回の値と比べ、変わったら新しい足と判定します。
- ボリンジャーバンドの ±2σ タッチを判定したいiBands() で上のバンド・下のバンドの値を取得し、確定足の高値・安値(または終値)と比べます。
- 陽線・陰線や連続陽線を判定したい終値と始値を比べ、終値 > 始値なら陽線、終値 < 始値なら陰線です。連続は確定足を順に調べます。
- 上位足のトレンド方向を判定したいiMA() などの時間足の引数に PERIOD_H4・PERIOD_D1 などを指定し、上位足の移動平均と価格を比べます。












