リターンコードとは
取引サーバのリターンコードは、取引操作実行リクエストに対するサーバの応答結果を示すためのコードです。これらのリターンコードは、OrderSend関数によって送信されるMqlTradeRequest構造体の一部として取得され、実行結果はMqlTradeResult構造体に収められます。retcodeフィールドには、取引サーバから返されるリターンコードが含まれており、取引が正常に実行されたか、エラーが発生したかを判断するために使用されます。
10004
TRADE_RETCODE_REQUOTE
リクオート。
リクオートは、取引リクエストが送信された際に、提示された価格が市場の実際の価格と一致しない場合に発生します。この状況では、取引サーバは新しい価格を提示し、トレーダーはその新しい価格で取引を行うかどうかを選択することが求められます。リクオートが発生する理由は、通常、市場の変動が激しい時や取引量が多い時に、価格が急速に変化するためです。
10006
TRADE_RETCODE_REJECT
リクエストの拒否。
リクエストが取引サーバによって拒否されたことを示します。この場合、取引操作は実行されません。リクエストの拒否は、注文の内容に問題がある場合や、取引条件が満たされていない場合などに発生します。具体的な理由は、取引サーバの設定や現在の市場状況によって異なります。エラーコードと共に返されるコメントを確認することで、拒否の詳細な理由を把握することができます。
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
無効なリクエスト。
このリターンコードは、取引リクエストが無効であることを示します。これは、リクエストの形式や内容に誤りがある場合に発生します。無効なリクエストは、適切に処理されず、取引操作は実行されません。リクエスト内容を確認し、正しい形式で再送信することが必要です。
10014
TRADE_RETCODE_INVALID_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
注文状態の変化。
このリターンコードは、取引リクエストが送信された後に注文の状態が変更されたことを示します。例えば、既存の注文が部分的に約定されたり、キャンセルされたりした場合に発生します。注文の最新の状態を確認し、必要に応じて新しいリクエストを送信する必要があります。
10024
TRADE_RETCODE_TOO_MANY_REQUESTS
頻繁過ぎるリクエスト。
このリターンコードは、短時間に多数の取引リクエストが送信されたため、リクエストが拒否されたことを示します。取引サーバが過負荷になるのを防ぐために、このエラーが発生します。一定期間待ってから、再度リクエストを送信する必要があります。
10025
TRADE_RETCODE_NO_CHANGES
リクエストに変更なし。
このリターンコードは、取引リクエストが送信された際に、既存の注文やポジションに対して変更がなかったことを示します。例えば、注文の変更リクエストが既存の注文の状態と同じ場合に発生します。リクエスト内容を確認し、必要な変更が反映されていることを確認した上で、再度リクエストを送信する必要があります。
10026
TRADE_RETCODE_SERVER_DISABLES_AT
サーバが自動取引を無効化。
このリターンコードは、取引サーバによって自動取引が無効化されていることを示します。このため、リクエストされた取引操作は実行されません。サーバ設定が変更されるまで、自動取引は行えません。手動での取引を行うか、サーバ設定の変更を待つ必要があります。
10027
TRADE_RETCODE_CLIENT_DISABLES_AT
クライアント端末が自動取引を無効化。
このリターンコードは、クライアント端末の設定によって自動取引が無効化されていることを示します。このため、リクエストされた取引操作は実行されません。クライアント端末の設定を見直し、自動取引が有効になっていることを確認する必要があります。
10028
TRADE_RETCODE_LOCKED
リクエストが処理のためにロック中。
このリターンコードは、取引リクエストが現在処理のためにロックされていることを示します。通常、同時に複数のリクエストが送信された場合に発生します。リクエストが処理されるのを待ってから、再度リクエストを送信する必要があります。
10029
TRADE_RETCODE_FROZEN
注文やポジションが凍結。
このリターンコードは、注文やポジションが凍結されているため、取引リクエストが実行できないことを示します。これは、口座の設定や規制、サーバの状況などにより発生します。凍結が解除されるまで、取引操作を行うことはできません。
10030
TRADE_RETCODE_INVALID_FILL
無効な注文充填タイプ。
このリターンコードは、取引リクエストに指定された注文のフィルポリシーが無効であることを示します。充填タイプがサポートされていない場合や、不適切な値が指定された場合に発生します。適切なフィルポリシーを設定し、再度リクエストを送信する必要があります。
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
指定されたPOSITION_IDENTIFIERを持つポジションがすでに閉鎖。
このリターンコードは、指定されたポジション識別子を持つポジションがすでに閉鎖されているため、取引リクエストが実行できないことを示します。閉鎖されたポジションに対する操作は無効であり、新しいポジションに対してリクエストを送信する必要があります。
10038
TRADE_RETCODE_INVALID_CLOSE_VOLUME
決済ボリュームが現在のポジションのボリュームを超過。
このリターンコードは、取引リクエストに指定された決済ボリュームが現在のポジションのボリュームを超過しているため、リクエストが実行できないことを示します。決済ボリュームを適切に調整し、再度リクエストを送信する必要があります。
10039
TRADE_RETCODE_CLOSE_ORDER_EXIST
指定されたポジションの決済注文が既存。
このリターンコードは、指定されたポジションに対する決済注文が既に存在するため、新しい決済リクエストが拒否されたことを示します。これは、ヘッジングシステムでの作業中に発生する可能性があります。以下のような場合に発生します:
- 反対のポジションを決済しようとしているときに、そのポジションの決済注文が既に存在している場合。
- ポジションを完全または部分的に決済しようとしているときに、既存する決済注文と新しく出された決済注文の合計が現在のポジションボリュームを超えている場合。
10040
TRADE_RETCODE_LIMIT_POSITIONS
アカウントに同時に存在するポジションの数は、サーバー設定によって制限されます。
このリターンコードは、アカウントに同時に存在するポジションの数がサーバー設定によって制限されていることを示します。限度に達すると、新しいポジションの発注が無効になります。具体的な動作はポジション会計タイプによって異なります:
- ネッティングシステム:ポジションの数が考慮され、限度に達すると新しい注文の発注が無効になります。
- ヘッジングシステム:待機注文もポジションとともに考慮され、限度に達すると新しい注文の発注が無効になります。
限度に達した場合、既存のポジションを決済するか、サーバー設定の調整を行う必要があります。
10041
TRADE_RETCODE_REJECT_CANCEL
待機注文アクティベーションリクエストは却下され、注文はキャンセルされます。
このリターンコードは、待機注文のアクティベーションリクエストが拒否され、該当する注文がキャンセルされたことを示します。
※アクティベーションリクエストとは、待機注文を有効化するための要求のことです。これは、リクエストの内容に問題があるか、取引条件が変更された場合に発生します。リクエスト内容を確認し、再度送信する必要があります。
10042
TRADE_RETCODE_LONG_ONLY
銘柄に「買いポジションのみ」(POSITION_TYPE_BUY)のルールが設定されているため、リクエストは却下されます。
このリターンコードは、取引リクエストが銘柄に設定されているルールにより拒否されたことを示します。この銘柄では買いポジションのみが許可されており、売りポジションを取ることができません。取引戦略を見直し、適切なポジションを取る必要があります。
10043
TRADE_RETCODE_SHORT_ONLY
銘柄に「売りポジションのみ」(POSITION_TYPE_SELL)のルールが設定されているため、リクエストは却下されます。
このリターンコードは、取引リクエストが銘柄に設定されているルールにより拒否されたことを示します。この銘柄では売りポジションのみが許可されており、買いポジションを取ることができません。取引戦略を見直し、適切なポジションを取る必要があります。
10044
TRADE_RETCODE_CLOSE_ONLY
銘柄に「ポジション決済のみ」のルールが設定されているため、リクエストは却下されます。
このリターンコードは、取引リクエストが銘柄に設定されているルールにより拒否されたことを示します。この銘柄では新規のポジションを取ることはできず、既存のポジションの決済のみが許可されています。取引戦略を見直し、適切な操作を行う必要があります。
10045
TRADE_RETCODE_FIFO_CLOSE
取引口座に「FIFOによるポジション決済のみ」(ACCOUNT_FIFO_CLOSE=true)のフラグが設定されているため、リクエストは却下されます。
このリターンコードは、取引口座に設定されているFIFOルール(First In, First Out)により、リクエストが拒否されたことを示します。
FIFOルールとは?
FIFOルールとは、最初に開かれたポジションを最初に決済する必要があるという取引ルールです。具体的には、ある銘柄に対して複数のポジションを開いた場合、一番古いポジションから順に決済していかなければならないというものです。
FIFOルールを破る行為
FIFOルールを破る行為には、以下のようなものがあります。
- 後から開いたポジションを先に決済する: 例えば、最初に開いたポジションがまだ残っている状態で、後から開いたポジションを先に決済しようとすること。
- 複数のポジションのうち、一部だけを選択して決済する: FIFOルールでは、決済は一番古いポジションから順に行わなければならないため、途中のポジションだけを決済しようとするとルール違反となります。
これらの行為はFIFOルールに反するため、取引リクエストは拒否されます。ルールに従った取引を行うよう、取引戦略を調整する必要があります。