当サイトはアフィリエイト広告を含みます(PR)

MT4 エラー142「Order modify denied」注文変更が拒否される場合の対処法

✅ 結論(解決策)

エラー142とは

MT4のエラー142(メッセージ:Order modify denied)は、既存の注文のストップロス(SL)、テイクプロフィット(TP)、または指値・逆指値価格を変更しようとした際に、ブローカーがその変更を拒否した場合に返されるエラーです。

注文の新規発注ではなく、既存の注文の「変更(Modify)」に対してのみ発生します。EA運用時にSL/TPのトレイリング処理で頻繁に遭遇するエラーです。

原因

  1. ストップレベル制限:ブローカーは各銘柄に「ストップレベル」(現在価格からSL/TPまでの最低距離)を設定しています。この距離より近い位置にSL/TPを設定しようとすると拒否されます。XMの場合、多くの通貨ペアでストップレベルは0ですが、一部の銘柄では制限があります。
  2. フリーズレベル制限:「フリーズレベル」は、現在価格から一定距離以内にある注文の変更・削除を禁止する制限です。ストップレベルとは別に設定されている場合があります。
  3. 同一値への変更リクエスト:現在のSL/TP値と同じ値に変更しようとした場合、ブローカーが「変更なし」として拒否します。EAのロジックバグで頻繁に発生します。
  4. 市場閉鎖中の変更:市場が閉鎖中(週末やメンテナンス中)に注文変更を試みた場合、拒否されることがあります。

解決手順

ストップレベルを確認する

MT4の「気配値」ウィンドウで対象通貨ペアを右クリック →「仕様」を選択します。「ストップレベル」の値を確認し、SL/TPを現在価格からストップレベル以上離した位置に設定してください。例えばストップレベルが20ポイントなら、SLは現在価格から2pips以上離す必要があります。

変更前後の値を比較する

EAの場合、OrderModify()を呼ぶ前に、現在の注文のSL/TP値と変更後の値を比較し、差がない場合はスキップする処理を実装してください。if(MathAbs(OrderStopLoss() - newSL) < Point) return;のような判定を入れます。

フリーズレベルを考慮する

フリーズレベルは「仕様」画面で確認できます。指値注文や逆指値注文の価格が現在価格からフリーズレベル以内にある場合、その注文の変更・削除はできません。価格がフリーズレベルの外側に動くまで待つ必要があります。

市場の状態を確認する

週末やブローカーのメンテナンス中は注文変更が拒否されます。MarketInfo(Symbol(), MODE_TRADEALLOWED)で取引可能かどうかを事前チェックしてください。

ストップレベルとフリーズレベルの違い

エラー142に関連する2つの制限値を混同しているトレーダーが多いため、違いを明確にします。

項目ストップレベルフリーズレベル
制限内容SL/TPの最低距離変更・削除禁止の距離
影響する操作SL/TP設定・変更注文の変更・削除全般
対処法距離を広げて設定価格が離れるまで待つ
XMの設定主要通貨ペア:0主要通貨ペア:0

ストップレベルは「SL/TPをどこに設定できるか」の制限で、フリーズレベルは「現在価格に近い注文を変更・削除できるか」の制限です。エラー142はどちらの制限に抵触しても発生する可能性があります。

EA開発でエラー142を防ぐベストプラクティス

EA開発者がエラー142を事前に防ぐには、OrderModify()を呼ぶ前に以下のバリデーションを必ず実装してください。

  1. ストップレベルチェックMarketInfo(Symbol(), MODE_STOPLEVEL)でストップレベルを取得し、SL/TPが現在価格から十分に離れているか確認します。
  2. フリーズレベルチェックMarketInfo(Symbol(), MODE_FREEZELEVEL)でフリーズレベルを取得し、変更対象の注文が現在価格からフリーズレベル以内にないか確認します。
  3. 同値チェック:変更後のSL/TP値が現在の値と同じでないか、Point単位の精度で比較します。浮動小数点誤差を考慮してMathAbs(oldSL - newSL) < Pointのように判定してください。
  4. 市場状態チェックMarketInfo(Symbol(), MODE_TRADEALLOWED)が1(取引可能)であることを確認します。週末やメンテナンス中は0が返されます。

これら4つのチェックをOrderModify()の前に入れるだけで、エラー142の発生をほぼ完全に防げます。

ℹ XMのストップレベルについて

XMは2021年以降、主要通貨ペアのストップレベルを0に設定しています。これにより、現在価格のすぐ近くにもSL/TPを設定でき、スキャルピングやタイトなリスク管理に適しています。ストップレベル0の環境はエラー142の発生を大幅に削減します。

ストップレベルが0の業者を選ぶ重要性

エラー142の発生を根本的に減らすには、ストップレベルが0に設定されている業者を選ぶことが最も効果的です。ストップレベルが0なら、現在価格のすぐ隣にSL/TPを設定でき、「ストップレベル制限によるエラー142」は原理的に発生しません。

ストップレベル0のメリットはエラー防止だけではありません。スキャルピング手法では5〜10pips程度のタイトなSLを設定することが一般的ですが、ストップレベルが20pips(200ポイント)に設定されている業者ではこれが不可能です。ストップレベル0の環境であれば、1pips未満のSLも設定可能であり、トレード戦略の自由度が大幅に向上します。

XMは2021年以降、主要FX通貨ペアのストップレベルを0に変更しており、スキャルピングからスイングトレードまで、あらゆる手法に対応できる取引環境を提供しています。

手動トレードでエラー142が出た場合の確認手順

  1. MT4の注文画面で「決済逆指値(S/L)」と「決済指値(T/P)」の値を確認する
  2. 「気配値」ウィンドウで対象銘柄を右クリック→「仕様」を開き、「ストップレベル」の値を確認する
  3. SL/TPの価格が、現在のAsk/Bid価格からストップレベル以上離れているか計算する
  4. 離れていない場合は、SL/TPの値をストップレベル以上離して再設定する

よくある質問

SL/TPを設定しようとするとエラー142が出ます。なぜですか?
エラー142は注文の変更がブローカーによって拒否された場合に発生します。最も多い原因は、ストップレベル(現在価格からSL/TPまでの最低距離)の制限です。各通貨ペアのストップレベルは「気配値」ウィンドウで右クリック→「仕様」から確認できます。
同じSL値を再設定してもエラー142が出るのはなぜですか?
現在の注文と同一のSL/TP値に変更しようとした場合、ブローカーが「変更なし」として拒否することがあります。OrderModify()を呼ぶ前に、現在の注文のSL/TP値と変更後の値が異なるか確認する処理を入れてください。
ストップレベル0の環境で取引する

XMは主要通貨ペアのストップレベルが0のため、SL/TPを現在価格のすぐ近くに設定できます。これによりエラー142の発生リスクが大幅に低減され、精密なリスク管理が可能になります。

XM公式サイトで口座開設(無料)
※ 当サイト経由の口座開設でボーナスが付与されます(PR)
※ XMは日本の金融庁に未登録の海外FX業者です。取引にはリスクが伴います。
リスクに関する注意事項
FX(外国為替証拠金取引)は元本保証のない金融商品です。レバレッジにより、預けた証拠金以上の損失が発生する可能性があります。余剰資金の範囲で取引を行ってください。当サイトで紹介する海外FX業者は日本の金融庁に未登録であり、日本の投資者保護基金の対象外です。当サイトの情報は一般的な情報提供を目的としたものであり、特定の業者の利用を推奨するものでも、個別の売買助言でもありません。