エラー139とは
MT4のエラー139(メッセージ:Order is locked)は、変更・決済しようとした注文が、別の処理によってロック(排他制御)されている場合に返されるエラーです。MT4のサーバーは、同一注文に対して複数の操作が同時に行われることを防ぐため、処理中の注文をロックします。
このエラーは一時的なもので、ロック中の処理が完了すれば自動的に解除されます。ただし、EA設計の問題で繰り返し発生することがあります。
原因
- EAと手動操作の競合:EAがポジションのSL/TPを変更している最中に、手動で同じポジションを決済しようとした場合。これが最も多い原因です。
- 複数EAの競合:異なるEAが同一の注文を同時に操作しようとした場合。例えば、エントリーEAとトレイリングストップEAが同じポジションのSLを同時に変更しようとするケース。
- 部分決済処理中の操作:部分決済(Partial Close)の処理中に、同じポジションに対して別の操作を行おうとした場合。部分決済はサーバー上で注文の分割処理が行われるため、通常より長くロックされます。
- サーバー側の処理遅延:ブローカーのサーバーが高負荷状態で、注文のロック解除に通常より時間がかかっている場合。
解決手順
数秒待ってから再操作する
エラー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を他のエラーと混同しないことが重要です。
| エラーコード | メッセージ | 原因 | 対処法 |
|---|---|---|---|
| 137 | Broker is busy | サーバー処理過多 | 時間を空けて再送信 |
| 138 | Requote | 価格変動 | スリッページ許容値を設定 |
| 139 | Order is locked | 注文の排他ロック | 数秒待って再操作 |
| 142 | Order modify denied | SL/TP制限違反 | ストップレベル確認 |
| 4109 | Trade is not allowed | EA取引権限なし | 自動売買の許可設定 |
エラー139は「一時的」なロック状態であることが最大の特徴です。137(サーバー混雑)と似ていますが、139は特定の注文に対するロックであり、137はサーバー全体の問題です。139はその注文の前の処理が完了すれば自動的に解除されるため、数秒の待機で解決するケースがほとんどです。
よくある質問
エラー139のまとめと対策チェックリスト
- エラー139が発生したら、まず2〜5秒待ってから再操作する
- EAと手動操作を同時に行っていないか確認する
- 複数のEAが同一注文を操作していないかマジックナンバーで確認する
- EA開発者はOrderModify()/OrderClose()の前にインターバルチェックを実装する
- 高ボラティリティ時間帯にエラーが集中している場合は、EA内の処理間隔を広げる
複数EA運用でエラー139に悩んでいるなら、サーバーインフラへの投資規模が大きいブローカーを検討してください。XMは注文拒否なし・リクオートなしのポリシーで、最大8口座を開設してEA別に分散運用が可能です。条件を満たせばVPSも無料で利用できます。
XM公式サイトで口座開設(無料)※ XMは日本の金融庁に未登録の海外FX業者です。取引にはリスクが伴います。
FX(外国為替証拠金取引)は元本保証のない金融商品です。レバレッジにより、預けた証拠金以上の損失が発生する可能性があります。余剰資金の範囲で取引を行ってください。当サイトで紹介する海外FX業者は日本の金融庁に未登録であり、日本の投資者保護基金の対象外です。当サイトの情報は一般的な情報提供を目的としたものであり、特定の業者の利用を推奨するものでも、個別の売買助言でもありません。