iOpen・iClose・iHigh・iLowの書式を調べても、実際にチャート上でどう使えばいいのか分からない——という人向けの記事です。
この記事では各関数の説明に加えて、実際にMetaEditorでコンパイルしてチャート上にローソク足の四本値を表示できるサンプルコードを紹介します。
ローソク足のレートを取得する関数
今回は、ローソク足のレートを取得する関数について紹介します。
ローソク足とは、日本で最もよく使われるチャートで、
株式投資やFXなど様々なトレードで用いられています。
ローソク足一本には高値・安値・始値・終値の値があります。それら1つずつに関数が決められています。
- iOpen関数:始値
- iClose関数:終値
- iHigh関数:高値
- iLow関数:安値
このローソク足の四本値が視覚的に表されます。
始値と終値を表しているのがローソク足の柱となる実体であり、
高値と安値を表している線の部分がヒゲになります。
いずれの関数も戻り値はdouble型です(4本値はpip単位の小数を含むため)。
ローソク足については以下の記事を参照してください。

iOpen関数
iOpen関数指定した通貨ペア・時間軸・バーシフトに対応するバーの始値を返す関数です。
double iOpen(string symbol, int timeframe, int shift);
iClose関数
iClose関数は、指定した通貨ペア・時間軸・バーシフトに対応するバーの終値を返す関数です。
double iClose(string symbol, int timeframe, int shift);
iHigh関数
iHigh関数は指定した通貨ペア・時間軸・バーシフトに対応するバーの高値を返す関数です。
double iHigh(string symbol, int timeframe, int shift);
iLow関数
iLow関数は指定した通貨ペア・時間軸・バーシフトに対応するバーの安値を返す関数です。
double iLow(string symbol, int timeframe, int shift);
それぞれ共通する3つの引数は次の通りです。
- symbol:通貨ペア(現在のチャートなら
Symbol()またはNULL) - timeframe:時間軸(現在のチャートなら
0) - shift:何本前の足かを指定(
0なら現在の足、1なら1本前の足)
四本値を組み合わせてチャートに表示する
ここまでの4つの関数を組み合わせて、現在の足の四本値をチャート左上に表示するインジケーターを作ってみましょう。
//+------------------------------------------------------------------+
//| OHLC-Display.mq4 |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window
#property indicator_buffers 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");//チャート削除後
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int digit = (int)MarketInfo(Symbol(), MODE_DIGITS);
double op = iOpen(Symbol(), 0, 0);//現在の足の始値
double cl = iClose(Symbol(), 0, 0);//現在の足の終値(未確定足は現在値と同じ)
double hi = iHigh(Symbol(), 0, 0);//現在の足の高値
double lo = iLow(Symbol(), 0, 0);//現在の足の安値
Comment(
"----- 現在の足(shift=0)の四本値 -----", "\n",
"始値(iOpen) = ", NormalizeDouble(op, digit), "\n",
"終値(iClose) = ", NormalizeDouble(cl, digit), "\n",
"高値(iHigh) = ", NormalizeDouble(hi, digit), "\n",
"安値(iLow) = ", NormalizeDouble(lo, digit)
);
return(0);
}
//+------------------------------------------------------------------+
現在確定していない足(shift=0)は、終値(iClose)が現在値と同じ値になる点に注意してください。確定済みの1本前の足を見たい場合は、shiftを1に変えるだけです。
コピペしてコンパイルが通らないときに確認すること
もしコンパイルエラーが出た場合は、次の点を確認してください。
"\n",の後ろに日本語のコメントを書くときは、必ず//を付ける(付け忘れるとコメントの文字が未定義の識別子としてエラーになります)- 全角スペースや全角の記号が紛れ込んでいないか(半角に統一してください)
まとめ
今回はローソク足のレートを取得する関数についてでした。
ローソク足を活用する際にはこれらの関数は必須なので、しっかりとマスターしましょう。
コメント