エラー129の発生状況
MT4でエラー129「Invalid price」が表示されるのは、発注ボタンを押した瞬間、または指値注文を設置しようとした時です。MT4の注文実行ダイアログに「エラー129」「Invalid price」「価格が無効です」のいずれかのメッセージが表示され、注文が成立しません。成行注文で発生することもあれば、指値注文の設置時に発生することもあります。
特に発生しやすいのは、米雇用統計やFOMC政策金利発表直後など、相場が急激に動いている時間帯です。スプレッドが平常時の10倍以上に拡大する瞬間があり、数秒前の価格情報に基づいて発注すると、サーバー側ではすでに別の価格帯に移動しているため、価格不一致と判定されてエラー129が返ります。
原因
エラー129の根本原因は「注文時にMT4クライアントから送信された価格が、FX業者サーバー側の現在価格と一致しない(または受け渡し可能な範囲を超えて乖離している)」ことです。具体的には以下の6つのシナリオに分けられます。
- 急激な価格変動:重要経済指標発表や要人発言で相場が一瞬で動き、発注時点の価格が古くなる。
- スプレッド拡大時の発注:スプレッドが広がった瞬間、成行注文のAsk/Bidが通常時の範囲を超える。
- 指値注文の論理矛盾:Buy Limitを現在Ask以上の位置に設定した、Sell Stopを現在Bid以上に設定したなど、注文タイプの条件を満たさない価格指定。
- 取引時間外の発注:FX市場が閉じている週末・祝日、または通貨ペア固有の取引休止時間に発注。
- EAのプログラムミス:価格正規化(NormalizeDouble)不足、古い価格キャッシュの使用、許容スリッページ未設定。
- ネットワーク遅延:VPS~サーバー間の遅延で注文到達時に価格が動いている。
これら6つは独立した原因ではなく、しばしば複合的に発生します。例えば指標発表直後にEAが古い価格で成行注文を送信し、サーバー到達までに数十ポイント動いた結果エラー129となる、というケースが現場では最も多く観測されます。
エラー129「Invalid price」は注文価格そのものが不正、エラー130「Invalid stops」はSL/TPの距離が不正、という違いがあります。ただしメッセージが類似しているため混同されがちです。MT4のエラーメッセージに表示される数値コードで正確に判別してください。
解決手順
成行注文で再発注する
最もシンプルな対処法は、価格を指定せず成行で発注することです。MT4の注文ダイアログで「注文種別:成行注文」を選択し、「許容スリッページ」を3〜10ポイントに設定します。この設定があれば、サーバー側の現在価格と指定価格のズレが許容範囲内なら約定が成立します。
指値注文の場合は論理整合性を確認
Buy Limit(指値買い)は現在Askより低い位置、Sell Limit(指値売り)は現在Bidより高い位置、Buy Stop(逆指値買い)は現在Askより高い位置、Sell Stop(逆指値売り)は現在Bidより低い位置、というロジックを守る必要があります。逆の関係で設定していないか再確認してください。
取引時間を確認する
発注しようとしている通貨ペアが取引可能時間内かをFX業者の取引仕様ページで確認します。XMの場合、メジャー通貨ペアは月曜日午前7時~土曜日午前6時(冬時間)の範囲で取引可能です。また貴金属や株価指数CFDは通貨ペアとは異なる取引時間が設定されています。
EAの価格取得ロジックを修正
EAからの発注でエラー129が頻発する場合、プログラム側で以下の対策を実装します:
① 発注直前にRefreshRates関数を呼んで最新価格を取得
② OrderSend関数のslippageパラメータに10以上を設定
③ NormalizeDouble(price, Digits)で価格を正規化
④ エラー発生時は2〜3秒待って再試行するリトライロジックを実装
VPS環境への移行を検討
自宅ネットワーク経由でEAを稼働している場合、FX業者サーバーと同じデータセンター内のVPSに移行することで遅延を大幅に削減できます。Ping値が10ミリ秒以下になると、エラー129の発生頻度は大きく減少します。
スリッページ許容値の推奨設定
成行注文時の「許容スリッページ」は通貨ペアと時間帯で最適値が変わります。以下は実運用で参考にされる目安です。
| 通貨ペア | 平常時の推奨値 | 指標発表時 |
|---|---|---|
| USD/JPY, EUR/USD | 3〜5 ポイント | 10〜20 ポイント |
| GBP/USD, AUD/USD | 5〜8 ポイント | 15〜30 ポイント |
| GBP/JPY, EUR/JPY | 5〜10 ポイント | 20〜40 ポイント |
| ゴールド(XAU/USD) | 20〜40 ポイント | 50〜100 ポイント |
スリッページを大きく取るほど約定はしやすくなりますが、不利な価格で約定するリスクも増えます。平常時と指標時で設定を切り替えるのが現実的な運用です。
EAから発注する際のエラー129回避コードの骨格:RefreshRates();
double askPrice = NormalizeDouble(Ask, Digits);
int ticket = OrderSend(Symbol(), OP_BUY, 0.1, askPrice, 10, 0, 0, "comment", 0, 0, clrGreen);
if(ticket < 0) {
if(GetLastError() == 129) {
Sleep(2000); RefreshRates();
// リトライ処理
}
}
類似エラーとの違い
エラー129と混同されやすいMT4の価格関連エラーを整理します。
- エラー130 (Invalid stops):SL/TPが現在価格に近すぎる、またはロジック的に不正。
- エラー136 (Off quotes):サーバーからの価格配信が一時的に途切れている。
- エラー138 (Requote):業者側が別の価格を提示してきた(リクオート)。
- エラー146 (Trade context is busy):前の注文処理が完了していない状態で新規注文を送信。
エラー129が頻発する場合はまずエラー138との切り分けから行うのがセオリーです。両者は「発注価格とサーバー価格の乖離」という根は共通ですが、業者のリクオート対応の有無で出方が変わります。
予防のためのチェックリスト
- 重要経済指標(米雇用統計、FOMC、日銀金融政策)のカレンダーを把握し、発表前後30分は新規発注を控える。
- EA運用時は許容スリッページを10以上に設定し、RefreshRatesを発注直前に呼ぶ。
- 指値注文設置時は現在価格から最低でも10〜20ポイント離す。
- VPS環境でPing値10ミリ秒以下を維持する。
- 週末・祝日の取引時間外発注を避け、取引可能時間を業者公式で確認する。
エラー129が発生しやすい時間帯
過去のデータを見ると、エラー129の発生は特定の時間帯に集中しています。以下は日本時間ベースで注意すべきタイミングです。
| 時間帯 | 特徴 | 推奨対応 |
|---|---|---|
| 月曜日 午前7時前後 | 週初窓開け、価格飛びが発生 | 成行注文を避け、数分待って相場落ち着いてから発注 |
| 21時30分(米重要指標) | 雇用統計・CPI・小売売上高の発表 | 発表15分前〜発表後30分は新規発注停止 |
| 23時00分(米FOMC) | 政策金利発表・議長会見 | EA停止推奨、手動でも控える |
| 深夜〜早朝(流動性低下) | スプレッド拡大・約定拒否増加 | スリッページ許容値を通常の2倍に |
業者選びによる改善効果
エラー129の発生頻度はFX業者の約定システムによって大きく異なります。NDD(No Dealing Desk)方式の業者はリクオートが原則なく、エラー129は「価格乖離時は自動的に不利な方向へ約定」する形で処理されます。一方DD(Dealing Desk)方式の業者はディーラーが介入するため、エラー129とエラー138が組み合わさって頻発するケースがあります。約定品質を重視するなら、NDD方式・STP/ECN口座を提供している業者を選ぶのが合理的です。また一部の業者ではワンクリック取引やストリーミング注文機能を提供しており、これらを活用することでエラー129の発生を大幅に減らせる場合があります。ワンクリック取引は発注ダイアログを経由せず現在価格で即座に発注されるため、価格乖離が発生する余地が狭まる仕組みです。
出典・参考
- MetaQuotes公式 — MT4 Error Codes
- 各FX業者公式サイト — 取引仕様・スリッページポリシー
設定を直しても、指標発表のたびにエラー129で手が止まる——その根っこは、あなたの腕ではなく業者の約定サーバー側にあることも多いんです。XMは公表ベースで約定率99.35%以上、リクオートなしのNDD方式。EA向けに無料VPSの提供枠もあり、自宅回線で悩んでいた人ほど体感差が大きい。口座開設ボーナス13,000円が付くので、まずは小さく触って約定の"重さ"の違いを確かめてみてください。
XM公式で約定環境を試す(口座開設3分)※ XMは日本の金融庁に未登録の海外FX業者です。取引にはリスクが伴います。
FX(外国為替証拠金取引)は元本保証のない金融商品です。レバレッジにより、預けた証拠金以上の損失が発生する可能性があります。余剰資金の範囲で取引を行ってください。当サイトの情報は一般的な情報提供を目的としたものであり、個別の売買助言ではありません。