Invalid requestとは
MT5で「Invalid request」(リターンコード:TRADE_RETCODE_INVALID、数値10013)は、送信した取引リクエストの形式や内容が不正であることを示します。MT5はMT4よりも注文パラメータの検証が厳格なため、MT4では通った注文がMT5でInvalid requestになることがあります。
このエラーは「リクエスト自体の構造が正しくない」ことを意味しており、サーバー側の問題ではなくクライアント側(ユーザーの注文内容またはEAコード)の問題です。手動注文では画面上で修正して再送、EA運用の場合はコードの該当箇所を修正する必要があります。リクエストの検証は以下の順に厳格に行われるため、どの段階でエラーが出ているかを特定するのが解決への近道です。
Invalid requestの主な原因
- 注文タイプとパラメータの不一致:成行注文に価格を指定した、指値注文に価格を指定しなかった、など。
- ロット数の不正:最小ロット未満、最大ロット超過、ステップ値に合わない値。
- SL/TPの設定不正:ストップレベル内の値、または方向が逆。
- シンボル名の不一致:EAでハードコードしたシンボル名が、業者のシンボル名と異なる(例:「EURUSD」と「EURUSD.」)。
- 口座タイプの制限:デモ口座で本番サーバーのシンボルを指定した場合など。
- フィリングモードの不一致:MT5では注文のフィリングモード(FOK, IOC, Return)を指定する必要があり、銘柄がサポートするモードと合っていない場合にエラーになります。
- 通貨ペアの気配値表示未設定:MT5では気配値表示ウィンドウに表示されていないシンボルへの注文はエラーになることがあります。
- マジックナンバーの指定漏れ:EAで複数ポジションを管理する場合、マジックナンバーが未指定または不適切だとInvalid requestになることがあります。
手動注文時に確認すべきポイント
手動注文でInvalid requestが出る場合、以下の項目を順番に確認してください。一つずつ検証していくことで、原因の多くは特定できます。MT4に慣れたトレーダーがMT5に移行したばかりのときによく遭遇する内容です。
- 気配値表示にシンボルがあるか:右クリック→「すべてを表示」でシンボルを一旦表示させる。
- ロット数が0.01の倍数か:小数点以下2桁超えのロット数はエラーになる業者もある。
- SL/TPが現在価格の反対側にあるか:買い注文のSLはEntry価格より下、TPは上に設定。
- 有効期限の形式:指値注文のGTD(Good Till Date)指定時は未来の日時を指定。
- 指定価格が現在値±ストップレベル以上:指値・逆指値は現在価格から一定距離離れている必要がある。
- ワンクリック取引の設定:有効化されていない状態で高速発注しようとすると失敗する場合がある。
- コメント欄の特殊文字:注文コメントに絵文字やUnicode特殊文字が含まれるとエラーになる場合がある。
解決手順
手動注文の場合:注文画面の内容を確認
注文タイプ(成行/指値/逆指値)、ロット数、SL/TP、有効期限の設定を確認します。特にSL/TPが現在価格に近すぎないか、ロット数が範囲内かを確認してください。
銘柄の取引仕様を確認
MT5で対象銘柄を右クリック →「仕様」で最小ロット、最大ロット、ストップレベル、フィリングモードを確認します。
EAの場合:MqlTradeRequestを検証
EAのコードでMqlTradeRequest構造体の全フィールドが正しく設定されているか確認します。特に以下のフィールドに注意してください。
request.action // TRADE_ACTION_DEAL(成行)等
request.symbol // 正確なシンボル名
request.volume // ロット数(範囲内・ステップ合致)
request.type // ORDER_TYPE_BUY / SELL
request.price // 成行ならAsk/Bid
request.sl // ストップロス
request.tp // テイクプロフィット
request.type_filling // ORDER_FILLING_FOK等
フィリングモードを正しく設定
MT5では銘柄ごとにサポートするフィリングモードが異なります。SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE)でサポートされているモードを取得し、リクエストのtype_fillingに正しい値を設定します。
MT4のEAをMT5に移植する場合、注文関連の関数(OrderSend等)の仕様が大きく異なります。MT4のOrderSend()は単一関数ですが、MT5ではMqlTradeRequest構造体にパラメータを設定してOrderSend()に渡す形式です。フィリングモードの指定も必須です。移植作業は専門的な知識が必要なため、無理せず既製のMT5対応版EAを入手する選択肢もあります。
フィリングモードの選び方
MT5で最も頻繁にInvalid requestを引き起こすのがフィリングモードの不一致です。銘柄ごとにサポートされるモードが異なるため、動的に取得して設定するのが安全です。
- ORDER_FILLING_FOK(Fill or Kill):全量約定できない場合は注文全体をキャンセル。ECN口座で多用される。
- ORDER_FILLING_IOC(Immediate or Cancel):部分約定を許容。残量はキャンセル。流動性の低い銘柄で使える。
- ORDER_FILLING_RETURN:成行注文が約定するまで注文が保持される。XMの成行注文で標準。
- XM KIWAMI極口座:FOK/IOC両対応。
- XM Standard口座:RETURNが基本。
フィリングモードを間違えて指定するとInvalid requestが出ます。SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE)でビット値を取得し、サポートされているモードを確認してから設定してください。
ストップレベル違反を避ける実装
SL(ストップロス)やTP(テイクプロフィット)が現在価格に近すぎるとInvalid requestになります。銘柄ごとのストップレベルを取得して、動的にSL/TP距離を調整する実装が必要です。
- 最小ストップ距離取得:
SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)でポイント単位の距離を取得。 - 実際のストップ距離確認:stopsLevel × Point()でピップス換算。
- SL/TPの最小距離:その値以上で設定。安全マージンとして2倍以上推奨。
- XM KIWAMI極口座:ストップレベル=0。距離制限なしの代表例。
- XM Standard口座:ストップレベル=0。同じく制限なし。
- 一般的な業者:10〜20ポイント必要。
シンボル名の動的取得
EAコードにシンボル名を"EURUSD"のようにハードコードすると、EURUSD.やEURUSDmのような派生シンボルを使う業者でInvalid requestが出ます。必ずSymbol()関数や_Symbol定数で動的に取得してください。複数銘柄を扱うEAではSymbolSelect()で事前にシンボルを選択しておくことも必要です。
類似エラーとの違い
- 10013(Invalid request):リクエスト形式自体が不正。→ パラメータ修正。
- 10014(Invalid volume):ロット数が仕様違反。→ ロット調整。
- 10016(Invalid stops):SL/TPが無効値。→ ストップレベル確認。
- 10006(Request rejected):業者側が注文を拒否。→ 口座状態確認。
- 10018(Market closed):取引時間外。→ 市場再開待ち。
よくある質問(FAQ)
Q. MT4のEAをそのままMT5で動かせますか?
A. 動きません。MT4とMT5では取引関数の仕様が大きく異なるため、移植作業が必要です。特にOrderSend関数の引数形式、フィリングモードの指定、構造体の使い方などを書き換える必要があります。
Q. フィリングモードとは何ですか?
A. 注文約定の方式を指定するパラメータで、FOK(Fill or Kill:全量約定or全量キャンセル)、IOC(Immediate or Cancel:部分約定可)、Return(成行で完全約定)の3種類があります。MT5では必須項目です。
Q. ストップレベル違反を避けるには?
A. SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)で最小ストップ距離を取得し、SL/TPがそれより近くならないように設定してください。XMのKIWAMI極口座は0ですが、他業者は10〜20ポイントが一般的です。
Q. シンボル名の末尾に「.」や「m」が付く業者はなぜ?
A. ECN/STP口座用やマイクロ口座用に別シンボルを用意している業者があるためです。EAコードにシンボル名をハードコードせず、Symbol()関数で動的に取得する実装が推奨されます。
Q. Invalid requestは口座凍結の前兆ですか?
A. いいえ、単なるリクエスト形式のエラーです。口座凍結やロスカットとは無関係で、注文内容を修正すれば解消します。ただし不正取引パターンで連発すると業者側の監視対象になる場合もあるため、EAは正常な動作を心がけてください。
MT4/MT5のエラーが頻発する場合、サーバー環境や口座設定に問題がある可能性があります。XMは日本語サポート完備で、口座開設ボーナス15,000円を使えば自己資金を投入する前に取引環境を試すことができます。
XM公式サイトで口座開設(無料)※ XMは日本の金融庁に未登録の海外FX業者です。取引にはリスクが伴います。
FX(外国為替証拠金取引)は元本保証のない金融商品です。レバレッジにより、預けた証拠金以上の損失が発生する可能性があります。余剰資金の範囲で取引を行ってください。当サイトで紹介する海外FX業者は日本の金融庁に未登録であり、日本の投資者保護基金の対象外です。当サイトの情報は一般的な情報提供を目的としたものであり、特定の業者の利用を推奨するものでも、個別の売買助言でもありません。