このページは、MT5 の OrderSend() 関数のエラーをまとめたものです。
- MT4のOrderSend() とは仕様が大きくことなる
- Mql5では公式で提供されている ErrorDescription() 関数がない
という点からエラーの内容が比較的わかりにくく、頻繁にチェックすることになると思うのでここにまとめてみました。
MqlTradeResult 構造体のリターンコードとして返ってくる
基本的にMQL5 の OrderSend() のエラーは、 MqlTradeResult 構造体 の ’retcode’ メンバーとして確認ができるので、
要は、MqlTradeResult 構造体 の retcode をまとめた内容
になります。
(※ OrderSend関数の使い方とMqlTradeResult 構造体の確認方法についてはこちらの記事で解説しています。⇒ 【MT5入門】 MQL5特有の複雑な OrderSend() の使い方を完璧に解説!)
MqlTradeResult の retcode 一覧
(スマホの場合は左右にスクロール可能です。)
エラーコード | 定数 | 説明 |
10004 | TRADE_RETCODE_REQUOTE | トレードサーバーによる「リクオート」です。 |
10006 | TRADE_RETCODE_REJECT | トレードサーバーによるリクエスト拒否。不利な価格の場合、約定拒否をするFXブローカーもあります。 |
10007 | TRADE_RETCODE_CANCEL | リクエストをトレーダー側がキャンセルした場合です。 |
10008 | TRADE_RETCODE_PLACED | これはオーダーが「サーバー上に置かれた」状態です。 |
10009 | TRADE_RETCODE_DONE | リクエストがすでに成功し、完了しています。 |
10010 | TRADE_RETCODE_DONE_PARTIAL | リクエストが一部のみ完了した場合にこのエラーコードが返ってきます。 |
10011 | TRADE_RETCODE_ERROR | リクエストの処理中にエラーが発生した場合です。 |
10012 | TRADE_RETCODE_TIMEOUT | リクエストが完了するまでに時間切れとなってしまった場合です。 |
10013 | TRADE_RETCODE_INVALID | OrderSendに渡した、MqlTradeRequest構造体自体に不備があった場合です。 |
10014 | TRADE_RETCODE_INVALID_VOLUME | Volume (= ロット数)が適切でない場合はこちらのエラーコードが返ります。 |
10015 | TRADE_RETCODE_INVALID_PRICE | 指定した価格 が適切でない場合はこちらのエラーコードが返ります。 |
10016 | TRADE_RETCODE_INVALID_STOPS | 逆指値、指値の価格が現在から近く、ストップレベル内だと弾かれます。ストップレベルを確認しましょう。 |
10017 | TRADE_RETCODE_TRADE_DISABLED | トレードが許可されていない銘柄です。 |
10018 | TRADE_RETCODE_MARKET_CLOSED | 銘柄の市場が閉まっている場合です。 |
10019 | TRADE_RETCODE_NO_MONEY | 口座に十分な資金がない場合です。 |
10020 | TRADE_RETCODE_PRICE_CHANGED | 市場価格が変化してしまったために、リクエストが却下された場合です。 |
10021 | TRADE_RETCODE_PRICE_OFF | 市場から価格が到達しておらず、リクエストを実行できません。 |
10022 | TRADE_RETCODE_INVALID_EXPIRATION | 有効期限の設定において不備があった場合です。 |
10023 | TRADE_RETCODE_ORDER_CHANGED | わかりにくいです。「オーダー」にはその「処理状況」があり、これを “ORDER STATE” と呼び、これは ENUM_ORDER_STATE 型の変数で表されます。その「処理状況」が変化したために、取引リクエストが実行できなかった場合です。(逆指値の待機注文を変更しようとしたが変更する前に約定してしまった、など) |
10024 | TRADE_RETCODE_TOO_MANY_REQUESTS | 取引リクエストが多すぎて処理できない場合です。 |
10025 | TRADE_RETCODE_NO_CHANGES | 価格を変更しようとするような取引リクエストを送ったが、元の価格と同じ場合。 |
10026 | TRADE_RETCODE_SERVER_DISABLES_AT | FXサーバーで自動売買が拒否されている場合です。 |
10027 | TRADE_RETCODE_CLIENT_DISABLES_AT | MT5ターミナル側で自動売買を許可してない場合です。設定を変えましょう。 |
10028 | TRADE_RETCODE_LOCKED | リクエストが、処理中のためにロックされており変更ができない場合です。 |
10029 | TRADE_RETCODE_FROZEN | オーダーやポジションが凍結されています。 |
10030 | TRADE_RETCODE_INVALID_FILL | フィリングタイプ(IOC, FOK, RETURN)が適切に設定されていない場合です。 |
10031 | TRADE_RETCODE_CONNECTION | 接続が切れている場合です。 |
10032 | TRADE_RETCODE_ONLY_REAL | ライブ口座のみでトレード操作が許可されている場合です。 |
10033 | TRADE_RETCODE_LIMIT_ORDERS | 待機注文が上限に達した場合です。 |
10034 | TRADE_RETCODE_LIMIT_VOLUME | 銘柄ごとに決められている、合計ロット数が上限に達した場合です。 |
10035 | TRADE_RETCODE_INVALID_ORDER | オーダータイプ()が不適切、または禁止されている場合です。 |
10036 | TRADE_RETCODE_POSITION_CLOSED | 決済しようとしたポジションがすでに決済済みの時。高頻度システムの場合は結構出現します。 |
10038 | TRADE_RETCODE_INVALID_CLOSE_VOLUME | 現在持っているポジションのロット数(Volume, 数量)よりも多くの数量を決済しよと試みた場合、このエラーが出ます。 |
10039 | TRADE_RETCODE_CLOSE_ORDER_EXIST | 決済しようとしたポジションを決済するための「オーダー」がすでにトレードサーバー上に置かれている時。高頻度システムの場合は結構出現します。(ポジションを複数に分けて決済しようとしていて、複数の決済のオーダーのロット数の合計が、もとのロット数の合計よりも多い場合にも出現します) |
10040 | TRADE_RETCODE_LIMIT_POSITIONS | 1つの口座内に存在しうるポジションの数が、上限に達した場合です。 |
10041 | TRADE_RETCODE_REJECT_CANCEL | 待機注文が約定できず、結果的にリクエストが却下された場合です。 |
10042 | TRADE_RETCODE_LONG_ONLY | “Only long positions are allowed(買いポジションのみ)” のルールが設定されているためにリクエストが却下されます。 |
10043 | TRADE_RETCODE_SHORT_ONLY | “Only short positions are allowed(売りポジションのみ)” のルールが設定されているためにリクエストが却下されます。 |
10044 | TRADE_RETCODE_CLOSE_ONLY | “Only position closing is allowed(ポジション決済のみ)”のルールが設定されているためにエントリーできない場合です。 |
10045 | TRADE_RETCODE_FIFO_CLOSE | “Position closing is allowed only by FIFO rule(FIFOによるポジション決済のみ)となっている口座であるために、リクエストが却下されます。 |
10046 | TRADE_RETCODE_HEDGE_PROHIBITED | ヘッジタイプの口座にもかかわらず、両建てを禁止されている場合に、両建てを行おうとするとこのエラーが出ます。 |
まとめ
今回は、MQL5 で OrderSend() 関数を実行した場合に出てくるエラー一覧と、その原因、および解決方法に関して述べました。
もしわかりにくい部分や疑問点があったら、↓ のコメント欄に残してくれるとありがたいです(もちろん匿名でも平気です)。全てしっかりと回答します。