
MT4 MT4 取引エラー
145
- 定数名
ERR_TRADE_MODIFY_DENIED- メッセージ
modification denied because order is too close to market- 意味
- 現在値に近すぎて変更が拒否された(フリーズレベル)
MT4エラー145とは
待機注文やポジションの価格が現在値に近すぎて(フリーズレベル内に入っていて)、変更や削除が拒否されたときのエラーです。
ログの表示例
OrderModify error 145
「エキスパート」タブまたは「操作履歴」タブに表示されます。数値や表記の細部は、ビルド・ブローカー・EAの作りによって異なります。
MT4エラー145の主な原因
- 待機注文の価格が現在値からフリーズレベル(MODE_FREEZELEVEL)以内に近づいている
- SL・TPが現在値に近く、約定直前の状態で変更しようとした
MT4エラー145の対処法
- MarketInfo(Symbol(), MODE_FREEZELEVEL) * Point より現在値から離れているときだけ変更する
- 変更できないときは次のティックで再判定する
コード例(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に組み込むときは、変数名や設定値を合わせてください。












