MT4(MQL4)/MT5(MQL5)のiHighest
指定した期間の最高値を取得できます。
int iHighest(
const string symbol, // 銘柄
ENUM_TIMEFRAMES timeframe, // 期間
ENUM_SERIESMODE type, // 時系列識別子
int count=WHOLE_ARRAY, // 要素数
int start=0 // インデックス
);
「start」は、現在の足の何本前からカウントを開始するかを表します。
MT4→MT5になっても変わらず使えます。
使用できるENUM_SERIESMODEは以下の通りです。
識別子 | 説明 |
---|---|
MODE_OPEN | 始値 |
MODE_LOW | 安値 |
MODE_HIGH | 高値 |
MODE_CLOSE | 終値 |
MODE_VOLUME | ティックボリューム |
MODE_REAL_VOLUME | 実のボリューム |
MODE_SPREAD | スプレッド |
例えばENUM_SERIESMODEに「MODE_OPEN」をセットした場合、指定期間の始値の最も大きい値のインデックスが取得できます。
注意点としては、戻り値はインデックス番号なので、実際の始値を取得する場合はiOpen関数などを使用しなければいけないという事です。
iHighと似ていますが、iHighestは指定した期間内のすべての足の中で最高値のインデックスを返すのに対して、iHighは指定した足単体の高値を返します。
サンプルコード
過去の指定した期間の最高値を取得してログに出力します。
void OnInit()
{
Print("iHighest(""NZDUSD"", PERIOD_H1 , MODE_OPEN , 3 , 0) = ",iHighest("NZDUSD", PERIOD_H1 , MODE_OPEN , 3 , 0));
Print("iHighest(Symbol(), Period() , MODE_OPEN , 3 , 0) = ",iHighest(Symbol(), Period() , MODE_OPEN , 3 , 0)," ※やっている事は↑と同じ");
Print("iHighest(Symbol(), 16385 , MODE_OPEN , 3 , 0) = ",iHighest(Symbol(), 16385 , MODE_OPEN , 3 , 0)," ※やっている事は↑と同じ");
Print("----------");
Print("現在値の始値 = ",iOpen("NZDUSD", PERIOD_H1 , 0));
Print("1本前の足の始値 = ",iOpen("NZDUSD", PERIOD_H1 , 1));
Print("2本前の足の始値 = ",iOpen("NZDUSD", PERIOD_H1 , 2));
Print("現在値~2本前までの3本の足の最も大きい始値 = ",iOpen(Symbol(), 16385 , iHighest(Symbol(), 16385 , MODE_OPEN , 3 , 0)));
return;
}
ちょっと分かり辛いので図解すると、こんな感じです。
PERIOD_H1が”60”ではなく”16385”になっているのは、MT4→MT5の仕様変更によるものです。
詳しくは【MT5(MQL5)サンプルコード】_Period、Period()を参照。
結果
現在値のデータ。
1本前のデータ。
2本前のデータ。
出力結果。
現在~2本前までの3本の足の中で、始値の最大値が出力されています。
iHighest(NZDUSD, PERIOD_H1 , MODE_OPEN , 3 , 0) = 1
iHighest(Symbol(), Period() , 1) = 1 ※やっている事は↑と同じ
iHighest(Symbol(), 16385 , 1) = 1 ※やっている事は↑と同じ
----------
現在値の始値 = 0.66945
1本前の足の始値 = 0.6699
2本前の足の始値 = 0.66982
現在値~2本前までの3本の足の最も大きい始値 = 0.6699
【参考】MQL5公式ページ
コメント / Comments