MQL4MQL5 スクリプト 売買サイン・相場の判定
直近 N 本の最高値・最安値を求めたい
結論:iHighest() で最も高い足の位置を求め、iHigh() でその足の高値を取得します(安値は iLowest() と iLow())。
考え方
iHighest() と iLowest() は「値」ではなく「その足の位置(shift)」を返します。返ってきた位置を iHigh()・iLow() に渡して価格を取得します。ここでは直近 N 本の最高値・最安値と、その時刻・値幅を表示するスクリプトを例にしています。
- iHighest(銘柄, 時間足, MODE_HIGH, 本数, 開始位置) で最高値の足の位置を求める
- iHigh(銘柄, 時間足, 位置) でその足の高値を取得する
- 安値も同じように iLowest() と iLow() で求める
そのまま使えるコード
MetaEditor の「新規作成」で「スクリプト」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Scripts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
#property script_show_inputs
// 直近 N 本(確定足)の最高値・最安値を表示するスクリプト
input int InpBars = 20; // 調べる本数
void OnStart()
{
int hi = iHighest(_Symbol, PERIOD_CURRENT, MODE_HIGH, InpBars, 1); // 1 = 確定した足から
int lo = iLowest(_Symbol, PERIOD_CURRENT, MODE_LOW, InpBars, 1);
if(hi < 0 || lo < 0)
{
Print("データが足りません");
return;
}
double high = iHigh(_Symbol, PERIOD_CURRENT, hi);
double low = iLow(_Symbol, PERIOD_CURRENT, lo);
Print("直近", InpBars, "本 最高値 ", DoubleToString(high, _Digits), "(", TimeToString(iTime(_Symbol, PERIOD_CURRENT, hi)), ")");
Print("直近", InpBars, "本 最安値 ", DoubleToString(low, _Digits), "(", TimeToString(iTime(_Symbol, PERIOD_CURRENT, lo)), ")");
Print("値幅 ", DoubleToString((high - low) / _Point, 0), " ポイント");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 終値の最高値にしたいときは MODE_HIGH を MODE_CLOSE にします。
- EA で「直近の高値を上抜けたら買い」にするときは、この最高値と現在の Bid を比べます。
注意点
- 開始位置を 0 にすると、未確定の現在の足も含まれます。ブレイクアウトの判定では、現在の足を除く(開始位置 1)のが基本です。












