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

MT4 エラー139「Order is locked」注文がロックされて変更・決済できない場合の対処法

✅ 結論(解決策)

エラー139とは

MT4のエラー139(メッセージ:Order is locked)は、変更・決済しようとした注文が、別の処理によってロック(排他制御)されている場合に返されるエラーです。MT4のサーバーは、同一注文に対して複数の操作が同時に行われることを防ぐため、処理中の注文をロックします。

このエラーは一時的なもので、ロック中の処理が完了すれば自動的に解除されます。ただし、EA設計の問題で繰り返し発生することがあります。

原因

  1. EAと手動操作の競合:EAがポジションのSL/TPを変更している最中に、手動で同じポジションを決済しようとした場合。これが最も多い原因です。
  2. 複数EAの競合:異なるEAが同一の注文を同時に操作しようとした場合。例えば、エントリーEAとトレイリングストップEAが同じポジションのSLを同時に変更しようとするケース。
  3. 部分決済処理中の操作:部分決済(Partial Close)の処理中に、同じポジションに対して別の操作を行おうとした場合。部分決済はサーバー上で注文の分割処理が行われるため、通常より長くロックされます。
  4. サーバー側の処理遅延:ブローカーのサーバーが高負荷状態で、注文のロック解除に通常より時間がかかっている場合。

解決手順

数秒待ってから再操作する

エラー139は一時的なロック状態のため、2〜5秒待ってから再度操作してください。ほとんどの場合、この待機で解消されます。連打や連続クリックはロック解除を遅らせる可能性があるため避けてください。

EA稼働中の手動操作を避ける

EAが稼働しているチャート上のポジションを手動で操作する場合は、一時的にEAを停止(自動売買ボタンをオフ)してから操作し、完了後に再度EAを有効にしてください。

EA間のマジックナンバーを分離する

複数のEAを運用する場合、各EAに固有のマジックナンバーを設定し、自分のマジックナンバー以外の注文を操作しないよう設計してください。これにより、EA間の注文操作の競合を防げます。

EAにリトライ処理を実装する

EA開発者は、OrderModify()やOrderClose()がエラー139を返した場合に、2秒程度のウェイト後にリトライする処理を実装してください。リトライ上限は3回程度で十分です。

エラー139が頻発するEA設計パターンと修正例

EA開発でエラー139を引き起こしやすい設計パターンを紹介します。

問題のあるパターン:1つのOnTick()内で全操作を実行

OnTick()関数内で「ポジション選択→SL変更→TP変更→条件判定→決済」を1回のティックで全て実行しようとすると、OrderModify()とOrderClose()が同じ注文に対して競合し、エラー139が発生します。特にSL変更の直後にTP変更を行うと、前回のOrderModify()の処理がサーバー上で完了する前に次のOrderModify()が送信されるため、ロック状態になります。

改善パターン:状態管理による段階的処理

ティックごとに1つの操作だけを実行する設計に変更してください。グローバル変数で「現在の処理状態」を管理し、ティック1でSL変更→ティック2でTP変更→ティック3で条件判定、のように処理を分散させます。これにより同一注文に対する同時操作が防げ、エラー139の発生を大幅に抑制できます。

エラー139のログ確認と発生パターンの分析

エラー139の発生状況を正確に把握するには、MT4のエキスパートタブのログを確認します。ログに「139」や「order is locked」のメッセージが記録されている場合、直前の操作内容(OrderModify、OrderClose等)と合わせて確認してください。

発生パターンとして多いのは、ティック間隔が非常に短い高ボラティリティ時間帯(ロンドンセッション開始の16時前後、NY市場オープンの21時半前後)です。この時間帯はティックが1秒に数十回発生することがあり、EA内の処理が追いつかなくなってエラー139が多発します。

対策としては、前回のOrderModify()またはOrderClose()の実行時刻をグローバル変数に記録し、最低2秒間は次の注文操作を行わないようにするインターバル制御が効果的です。

⚠ 急落時の注意

相場急変時にポジションを緊急決済したい場面でエラー139が出ると焦りますが、連打は逆効果です。数秒待っても解消しない場合は、MT4を一旦閉じて再起動し、再度決済を試みてください。MT4再起動中もポジションはサーバー上で維持されます。

エラー139と他のエラーの切り分け方

注文操作に関するエラーは複数存在するため、エラー139を他のエラーと混同しないことが重要です。

エラーコードメッセージ原因対処法
137Broker is busyサーバー処理過多時間を空けて再送信
138Requote価格変動スリッページ許容値を設定
139Order is locked注文の排他ロック数秒待って再操作
142Order modify deniedSL/TP制限違反ストップレベル確認
4109Trade is not allowedEA取引権限なし自動売買の許可設定

エラー139は「一時的」なロック状態であることが最大の特徴です。137(サーバー混雑)と似ていますが、139は特定の注文に対するロックであり、137はサーバー全体の問題です。139はその注文の前の処理が完了すれば自動的に解除されるため、数秒の待機で解決するケースがほとんどです。

よくある質問

MT4でポジションを決済しようとしたらエラー139が出ました。どうすればいいですか?
注文が別の処理(変更・部分決済など)によってロックされている状態です。数秒待ってから再度決済を試みてください。EAと手動操作を同時に行っている場合は、どちらかの操作が完了してから再試行してください。
EAがエラー139を出し続けてポジション管理ができません。
複数のEAが同一ポジションを同時に操作しようとしている可能性があります。EA間でマジックナンバーを分離し、同一注文を複数のEAが同時に操作しないよう設計を見直してください。また、OrderModify()やOrderClose()の前にリトライ処理を実装することを推奨します。

エラー139のまとめと対策チェックリスト

  1. エラー139が発生したら、まず2〜5秒待ってから再操作する
  2. EAと手動操作を同時に行っていないか確認する
  3. 複数のEAが同一注文を操作していないかマジックナンバーで確認する
  4. EA開発者はOrderModify()/OrderClose()の前にインターバルチェックを実装する
  5. 高ボラティリティ時間帯にエラーが集中している場合は、EA内の処理間隔を広げる
EA運用に強い取引環境を選ぶ

複数EA運用でエラー139に悩んでいるなら、サーバーインフラへの投資規模が大きいブローカーを検討してください。XMは注文拒否なし・リクオートなしのポリシーで、最大8口座を開設してEA別に分散運用が可能です。条件を満たせばVPSも無料で利用できます。

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