MetaTrder4(MT4)でEAによるトレードをする際に取引サーバから返される主なエラーとエラーコード、及びその対処方法について解説します。
エラーコード:「0」
定数は「ERR_NO_ERROR」です。
エラーが発生しておらず、トレードに関する操作が成功したことを意味します。
エラーコード:「1」
定数は「ERR_NO_RESULT」です。
エラーは発生していないが、結果が不明確な場合に返されます。
例えば、OrderModify()関数によって修正しようとした値が、既に設定されている値と同じ場合(=何の変更・修正もなされていない場合)に発生します。
当該エラーに対処するためには、OrderModify()関数によって変更・修正しようとする値を、既に設定されている値と異なるものにする必要があります。
- OrderModify()関数の詳細については「こちら」を参照してください。
エラーコード:「2」
定数は「ERR_COMMON_ERROR」です。
一般エラーが発生した場合に返されます。エラーが発生した理由が明らかにされるまで、トレードに関する全ての試みがストップされます。
当該エラーに対処するためには、MT4を再起動する必要がある場合があります。
エラーコード:「3」
定数は「ERR_INVALID_TRADE_PARAMETERS」です。
トレードに関する関数の引数に無効な値が渡された場合に発生します。
例えば、以下のような値です。
- 間違った通貨ペア名
- マイナスの許容スリッページ数
- 存在しないチケット番号 など
当該エラーに対処するためには、引数に正しい値を渡す必要があります。
エラーコード「4」
定数は「ERR_SERVER_BUSY」です。
取引サーバがビジー状態のときに発生します。
当該エラーに対処するためには、時間(数分)を置いて必要な操作を行う必要があります。
エラーコード「5」
定数は「ERR_OLD_VERSION」です。
MT4のバージョンが古い場合に発生します。
当該エラーに対処するためには、MT4のバージョンを最新のものにする必要があります。
エラーコード「6」
定数は「ERR_NO_CONNECTION」です。
MT4が取引サーバに接続されていない場合に発生します。
当該エラーに対処するためには、MT4が取引サーバに接続されているかを確認し、一定の時間(5秒)置いてから必要な操作を試みる必要があります。
エラーコード「8」
定数は「ERR_TOO_FREQUENT_REQUESTS」です。
要求が頻繁すぎる場合に発生します。
当該エラーに対処するためには、要求の頻度を減らすようにトレードロジックを変更する必要があります。
エラーコード「128」
定数は「ERR_TRADE_TIMEOUT」です。
トレードに関する操作が完了するまでに時間切れとなった場合に発生します。
当該エラーに対処するためには、トレードに関する操作を再試行する前(少なくとも1分置く)に、以下に示すような、トレードに関する操作が本当に成功していないのかどうかを確認する必要があります。
- 新規ポジションがオープンしていないかどうか
- 保有ポジションの利益確定・損切り値などが修正されていないかどうか
- 待機注文が取り消されていないかどうか
- 保有ポジションが決済されていないかどうか
エラーコード「129」
定数は「ERR_INVALID_PRICE」です。
無効な「Bid」・「Ask」値、若しくは正規化されていない価格がトレードに関する関数に渡されている場合に発生します。
当該エラーに対処するためには、5秒以上置いて、RefreshRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
当該エラーが消えずに、全てのトレードに関する試みが停止する場合は、トレードに関するロジックを変更する必要があります。
なお、以下の場合は、トレードに関する操作は再試行されます。
- 損切り値が現在のレートに近すぎる。
- 価格を算出する計算式が正しくない。
- 待機注文の執行価格が正規化されていない。
当該エラーの具体的な回避方法については「こちら」を参照してください。
エラーコード「130」
定数は「ERR_INVALID_STOPS」です。
以下のような理由によって、損切り(利益確定)値が無効な場合に発生します。
- 損切り(利益確定)値が現在のレートに近すぎる。
- 損切り(利益確定)値を算出する計算式が正しくない。
- 損切り(利益確定)値が正規化されていない。
レートが変動して損切り(利益確定)値が現在のレートから十分に離れる等するまで、トレードに関する試みが再試行されます。
当該エラーに対処するためには、5秒以上置いて、RefreshRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
当該エラーが消えず、トレードに関する全ての試みが停止する場合は、トレードに関するロジックを変更する必要があります。
エラーコード「131」
定数は「ERR_INVALID_TRADE_VOLUME」です。
取引しようとするロットサイズが無効な場合に発生します。
全てのトレードに関する試みが停止されます。
当該エラーに対処するためには、有効なロットサイズを渡すようにトレードに関するロジックを変更する必要があります。
有効なロットサイズは業者によって異なるので、使用している業者のHP等で確認して下さい。
エラーコード「134」
定数は「ERR_NOT_ENOUGH_MONEY」です。
必要証拠金が不足している場合に発生します。
5秒以上置いて、より小さいロットサイズで取引に関する操作を再試行します。
当該エラーに対処するためには、十分な証拠金があるかどうかを確認する必要があります。
エラーコード「135」
定数は「ERR_PRICE_CHANGED」です。
価格が変化した場合に発生します。
当該エラーに対処するためには、RefreshRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
エラーコード「136」
定数は「ERR_OFF_QUOTES」です。
ブローカーがレートを提示していなかったり、売買の成立を拒否した場合に発生します。
当該エラーに対処するためには、5秒以上置いてRefresRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
エラーコード「138」
定数は「ERR_REQUOTE」です。
OrderSend()関数などの引数に「Bid」や「Ask」を指定したが、それらに格納されている価格が古すぎたり、「Bid」と「Ask」が混在している場合に発生します。
当該エラーに対処するためには、RefreshRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
当該エラーが消えず、トレードに関する全ての試みが停止する場合は、トレードに関するロジックを変更する必要があります。
エラーコード「139」
定数は「ERR_ORDER_LOCKED」です。
注文が処理中のままロックされた場合に発生します。
全てのトレードに関する試みが停止されるので、トレードに関するロジックを変更する必要があります。
エラーコード「140」
定数は「ERR_LONG_POSITIONS_ONLY_ALLOWED」です。
買いポジションに関する操作のみが許可されている場合に、売りポジションに関する操作をした場合に発生します。
当該エラーに対処するためには、売りポジションに関する操作をしないように、トレードに関するロジックを変更する必要があります。
エラーコード「141」
定数は「ERR_TOO_MANY_REQUESTS」です。
要求の頻度が多すぎる場合に発生します。
当該エラーに対処するためには、要求の頻度を減らすようにトレードに関するロジックを変更する必要があります。
エラーコード「145」
定数は「ERR_TRADE_MODIFY_DENIED」です。
注文の修正価格が現在のレートに近すぎたり、修正処理までの時間間隔が短すぎることによって、注文の修正が拒否された場合に発生します。
当該エラーに対処するためには、15秒以上置いてRefreshRates()関数を使用して価格データを更新し、再試行する必要があります。
- RefreshRates()関数の詳細については「こちら」を参照してください。
エラーコード「146」
定数は「ERR_TRADE_CONTEXT_BUSY」です。
トレード環境がビジー状態の場合に発生します。
一般的に、少なくとも2つの注文を同時に処理しようとしたが、それができない場合などに発生します。
複数のトレード操作を行おうとする場合に、1つの操作が完全に終了する前に、別の操作を行おうとした場合などが典型的です。
当該エラーに対処するためには、MT4を終了して再起動する必要があります。
もしこのエラーがしばしば起きるようであれば、EA等のコードをチェックする必要があります。
エラーコード「147」
定数は「ERR_TRADE_EXPIRATION_DENIED」です。
ブローカーによって、注文の有効期限の設定が拒否された場合に発生します。
当該エラーに対処するためには、有効期限を設定しないようにすることが必要となります。
エラーコード「148」
定数は「ERR_TRADE_TOO_MANY_ORDERS」です。
ブローカーによって設定された保有ポジションと待機注文の総数の制限値を超えた場合に発生します。
当該エラーが発生した場合に、新規ポジションを保有したり新規に待機注文を出したい場合は、保有ポジションを減らしたり、発注済みの待機注文を取り消す必要があります。
エラーコード「149」
定数は「ERR_TRADE_HEDGE_PROHIBITED」です。
相殺が禁止されている場合に、保有ポジションと反対のポジションを取ろうとした場合に発生します。
当該エラーに対処するためには、まず先に、保有ポジションを閉じる必要があります。
エラーコード「150」
定数は「ERR_TRADE_PROHIBITED_BY_FIFO」です。
先入れ先出し法に反して保有ポジションを閉じようとした場合に発生します。
当該エラーに対処するためには、古いポジションから順に閉じていくようにする必要があります。