
MT4 MT4 取引エラー
1
- 定数名
ERR_NO_RESULT- メッセージ
no error, trade conditions not changed- 意味
- 変更内容がない(同じ値で OrderModify した)
MT4エラー1とは
OrderModify() に、いま設定されているのとまったく同じ損切り・利確・価格を渡したときに返るエラーです。注文自体は失敗していませんが、EAのログがエラー1で埋まる原因になります。
ログの表示例
OrderModify error 1
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー1の主な原因
- トレーリングストップや建値移動の処理が、毎ティック同じストップ値で OrderModify() を呼んでいる
- 計算したストップ値を NormalizeDouble() で丸めていないため、見た目は違っても実際には同じ値として扱われている
- 比較するときに OrderStopLoss() と新しい値を「!=」でそのまま比べていて、浮動小数点の誤差で「違う」と判定されている
MT4エラー1の対処法
- 新しいストップ値を NormalizeDouble(値, Digits) で丸めてから比較する
- 現在値との差が Point の半分より大きいときだけ OrderModify() を呼ぶ
- トレーリングは「前回より有利な方向に動いたときだけ」更新する条件にする
コード例(MQL4)
// 値が変わるときだけ OrderModify する(エラー1・130・145 対策)(MQL4)
void TrailBuy(int ticket, double trailPips)
{
if(!OrderSelect(ticket, SELECT_BY_TICKET) || OrderCloseTime() != 0) return;
double pip = (Digits == 3 || Digits == 5) ? Point * 10 : Point;
double newSl = NormalizeDouble(Bid - trailPips * pip, Digits);
double minD = MathMax(MarketInfo(Symbol(), MODE_STOPLEVEL), MarketInfo(Symbol(), MODE_FREEZELEVEL)) * Point;
if(newSl <= OrderStopLoss() + Point / 2) return; // 有利な方向に動いていなければ何もしない
if(Bid - newSl < minD) return; // ストップレベル・フリーズレベルの内側なら変更しない
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSl, OrderTakeProfit(), 0, clrNONE))
Print("OrderModify error ", GetLastError());
}MetaEditor(MT4)でコンパイルできることを確認済みです。自分のEAに組み込むときは、変数名や設定値を合わせてください。












