
MT4 MT4 実行時エラー
4002
- 定数名
ERR_ARRAY_INDEX_OUT_OF_RANGE- メッセージ
array index is out of range- 意味
- 配列の範囲外にアクセスした
MT4エラー4002とは
配列の要素数を超えた番号(インデックス)を読み書きしようとしたときのエラーです。#property strict のEA・インジケーターでは、そのまま「array out of range」でプログラムが停止します。
ログの表示例
array out of range in 'MyEA.mq4' (58,17)
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー4002の主な原因
- ループの終了条件が「<=」になっていて、1つ多く回っている
- ArrayResize() をせずに動的配列に書き込んでいる
- Bars より大きい番号で Close[] や iClose() を参照している
- インジケーターバッファの番号を SetIndexBuffer() の数より大きくしている
MT4エラー4002の対処法
- ループは「i < ArraySize(配列)」で回す
- 動的配列は書き込む前に ArrayResize() する
- 過去の足を参照するときは Bars や rates_total を上限にする
- エラー位置(行, 列)がログに出るので、その行の添字を確認する
コード例(MQL4)
// 配列の範囲を超えないループ(array out of range / 4002 対策)(MQL4)
double Average(const double &values[])
{
int n = ArraySize(values);
if(n == 0) return 0;
double sum = 0;
for(int i = 0; i < n; i++) // 「<=」にすると範囲外
sum += values[i];
return sum / n;
}
double HighestClose(int bars)
{
bars = MathMin(bars, Bars - 1); // 足の本数を超えて参照しない
double hi = 0;
for(int i = 1; i <= bars; i++)
hi = MathMax(hi, Close[i]);
return hi;
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












