
MT4 MT4 実行時エラー
4200
- 定数名
ERR_OBJECT_ALREADY_EXISTS- メッセージ
object already exists- 意味
- 同じ名前のオブジェクトがすでにある
MT4エラー4200とは
ObjectCreate() で、チャート上にすでにある名前と同じ名前のオブジェクトを作ろうとしたときのエラーです。毎ティックObjectCreate()する作りだと、2回目以降はすべてこのエラーになります。
ログの表示例
ObjectCreate error 4200
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー4200の主な原因
- 毎ティック同じ名前で ObjectCreate() している
- 前回の起動時に作ったオブジェクトが残っている(OnDeinit で削除していない)
MT4エラー4200の対処法
- ObjectFind(名前) < 0 のときだけ ObjectCreate() し、あとは ObjectSet...() で位置や色を変更する
- OnDeinit() で自分が作ったオブジェクトを削除する
- オブジェクト名にEA固有の接頭辞を付け、ObjectsDeleteAll(0, 接頭辞) でまとめて消せるようにする
コード例(MQL4)
// オブジェクトは「なければ作る、あれば動かす」(エラー4200・4202 対策)(MQL4)
#define OBJ_PREFIX "MyEA_"
void DrawLevel(string name, double price, color clr)
{
string obj = OBJ_PREFIX + name;
if(ObjectFind(0, obj) < 0)
{
if(!ObjectCreate(0, obj, OBJ_HLINE, 0, 0, price))
{
Print("ObjectCreate error ", GetLastError());
return;
}
}
ObjectSetDouble(0, obj, OBJPROP_PRICE, price);
ObjectSetInteger(0, obj, OBJPROP_COLOR, clr);
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0, OBJ_PREFIX); // 自分が作ったオブジェクトだけ消す
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












