エラーコード定数(ERR_○○)
エラーコード定数(ERR_○○)は、プログラム実行時のエラー内容を知るための定数です。
例えば、注文が通らなかった場合、ERR_INVALID_TRADE_VOLUMEなどのエラー定数が使用されます。
エラーコードは、システムが自動的に_LastError変数に格納するものなので、プログラムに記述する必要はありませんが、デバッグするときに非常に便利なので、覚えておくと良いでしょう。
エラーコード定数は、以下の関数で使います。
- GetLastError関数:最近のエラーコードを返す関数
 - ErrorDescription関数:エラーコードの内容を返す関数
 
エラーコード定数(ERR_○○)
| 定数 | 数値 | 説明 | 
| ERR_NO_ERROR | 0 | エラーはありません No error returned  | 
| ERR_NO_RESULT | 1 | エラーはありませんが、結果が不明です No error returned, but the result is unknown  | 
| ERR_COMMON_ERROR | 2 | 一般的なエラーCommon error  | 
| ERR_INVALID_TRADE_PARAMETERS | 3 | 無効な取引パラメータ Invalid trade parameters  | 
| ERR_SERVER_BUSY | 4 | トレードサーバーがビジー状態です Trade server is busy  | 
| ERR_OLD_VERSION | 5 | クライアントターミナルのバージョンが古い Old version of the client terminal  | 
| ERR_NO_CONNECTION | 6 | トレードサーバーに接続していません No connection with trade server  | 
| ERR_NOT_ENOUGH_RIGHTS | 7 | 権限が十分ではありません Not enough rights  | 
| ERR_TOO_FREQUENT_REQUESTS | 8 | 要求が頻繁過ぎます Too frequent requests  | 
| ERR_MALFUNCTIONAL_TRADE | 9 | 異常な取引操作です Malfunctional trade operation  | 
| ERR_ACCOUNT_DISABLED | 64 | 許可されていないアカウントです Account disabled  | 
| ERR_INVALID_ACCOUNT | 65 | 無効なアカウントです Invalid account  | 
| ERR_TRADE_TIMEOUT | 128 | トレードタイムアウト Trade timeout  | 
| ERR_INVALID_PRICE | 129 | 無効な価格です Invalid price  | 
| ERR_INVALID_STOPS | 130 | 無効なストップ設定です Invalid stops  | 
| ERR_INVALID_TRADE_VOLUME | 131 | 無効なトレード量(lot数)です Invalid trade volume  | 
| ERR_MARKET_CLOSED | 132 | 市場が閉じています Market is closed  | 
| ERR_TRADE_DISABLED | 133 | トレード無効設定になっています Trade is disabled  | 
| ERR_NOT_ENOUGH_MONEY | 134 | 証拠金が不足しています Not enough money  | 
| ERR_PRICE_CHANGED | 135 | 価格が変更されました Price changed  | 
| ERR_OFF_QUOTES | 136 | レートが提示されていません Off quotes  | 
| ERR_BROKER_BUSY | 137 | ブローカーがビジー状態です Broker is busy  | 
| ERR_REQUOTE | 138 | レート再提示Requote  | 
| ERR_ORDER_LOCKED | 139 | 注文がロックされています Order is locked  | 
| ERR_LONG_POSITIONS_ONLY_ALLOWED | 140 | ロングエントリーのみ許可されています Buy orders only allowed  | 
| ERR_TOO_MANY_REQUESTS | 141 | 要求が多過ぎます Too many requests  | 
| ERR_TRADE_MODIFY_DENIED | 145 | 変更注文が市場提示価格に近すぎる為、拒否されました。 Modification denied because order is too close to market  | 
| ERR_TRADE_CONTEXT_BUSY | 146 | トレードコンテキストがビジーです Trade context is busy  | 
| ERR_TRADE_EXPIRATION_DENIED | 147 | 有効期限設定はブローカーによって拒否されました Expirations are denied by broker  | 
| ERR_TRADE_TOO_MANY_ORDERS | 148 | 保留中の注文量がブローカーによって設定された上限に達しています The amount of open and pending orders has reached the limit set by the broker  | 
| ERR_TRADE_HEDGE_PROHIBITED | 149 | 両建ては無効になっています An attempt to open an order opposite to the existing one when hedging is disabled  | 
| ERR_TRADE_PROHIBITED_BY_FIFO | 150 | FIFOルールに違反したポジション決済をしようとしています An attempt to close an order contravening the FIFO rule  | 
| ERR_NO_MQLERROR | 4000 | エラーはありません No error returned  | 
| ERR_WRONG_FUNCTION_POINTER | 4001 | 不正な関数ポインタ Wrong function pointer  | 
| ERR_ARRAY_INDEX_OUT_OF_RANGE | 4002 | 配列インデックスの範囲外指定。 Array index is out of range.  | 
| ERR_NO_MEMORY_FOR_CALL_STACK | 4003 | 関数呼び出しの為のスタックメモリがありませんNo memory for function call stack  | 
| ERR_RECURSIVE_STACK_OVERFLOW | 4004 | スタックオーバーフロー Recursive stack overflow  | 
| ERR_NOT_ENOUGH_STACK_FOR_PARAM | 4005 | 引数の為のスタックが不十分 Not enough stack for parameter  | 
| ERR_NO_MEMORY_FOR_PARAM_STRING | 4006 | 文字列引数の為のメモリ不足 No memory for parameter string  | 
| ERR_NO_MEMORY_FOR_TEMP_STRING | 4007 | 文字列の為のメモリ不足 No memory for temp string  | 
| ERR_NOT_INITIALIZED_STRING | 4008 | 文字列は初期化されません Not initialized string  | 
| ERR_NOT_INITIALIZED_ARRAYSTRING | 4009 | 配列文字列は初期化されません Not initialized string in array  | 
| ERR_NO_MEMORY_FOR_ARRAYSTRING | 4010 | 配列文字列の為のメモリ不足 No memory for array string  | 
| ERR_TOO_LONG_STRING | 4011 | 文字列が長過ぎです Too long string  | 
| ERR_REMAINDER_FROM_ZERO_DIVIDE | 4012 | ゼロ除算(余剰)をしています Remainder from zero divide  | 
| ERR_ZERO_DIVIDE | 4013 | ゼロ除算をしています Zero divide  | 
| ERR_UNKNOWN_COMMAND | 4014 | 不明なコマンド Unknown command  | 
| ERR_WRONG_JUMP | 4015 | 不正なジャンプ Wrong jump (never generated error).  | 
| ERR_NOT_INITIALIZED_ARRAY | 4016 | 配列は初期化されません Not initialized array  | 
| ERR_DLL_CALLS_NOT_ALLOWED | 4017 | DLL呼び出しが許可されていません。許可するには、EAプロパティのチェックボックスで設定します DLL calls are not allowed  | 
| ERR_CANNOT_LOAD_LIBRARY | 4018 | ライブラリをロードできません Cannot load library  | 
| ERR_CANNOT_CALL_FUNCTION | 4019 | 関数を呼び出せません Cannot call function  | 
| ERR_EXTERNAL_CALLS_NOT_ALLOWED | 4020 | 外部関数の呼び出しが許可されていません。許可するには、EAプロパティのチェックボックスで設定します Expert function calls are not allowed  | 
| ERR_NO_MEMORY_FOR_RETURNED_STR | 4021 | 関数の文字列型の戻り値の為のメモリが足りません Not enough memory for temp string returned from function  | 
| ERR_SYSTEM_BUSY | 4022 | システムビジー System is busy (never generated error)  | 
| ERR_DLLFUNC_CRITICALERROR | 4023 | DLL呼び出しの致命的なエラー DLL-function call critical error  | 
| ERR_INTERNAL_ERROR | 4024 | 内部エラー Internal error  | 
| ERR_OUT_OF_MEMORY | 4025 | メモリ不足 Out of memory  | 
| ERR_INVALID_POINTER | 4026 | 無効なポインタ Invalid pointer  | 
| ERR_FORMAT_TOO_MANY_FORMATTERS | 4027 | フォーマット関数で引数が多過ぎます Too many formatters in the format function  | 
| ERR_FORMAT_TOO_MANY_PARAMETERS | 4028 | パラメータカウントが上限を超えています Parameters count exceeds formatters count  | 
| ERR_ARRAY_INVALID | 4029 | 無効な配列 Invalid array  | 
| ERR_CHART_NOREPLY | 4030 | チャートから返信がありません No reply from chart  | 
| ERR_INVALID_FUNCTION_PARAMSCNT | 4050 | 無効な関数の引数数 Invalid function parameters count  | 
| ERR_INVALID_FUNCTION_PARAMVALUE | 4051 | 無効な関数の引数値 Invalid function parameter value  | 
| ERR_STRING_FUNCTION_INTERNAL | 4052 | 文字列関数の内部エラー String function internal error  | 
| ERR_SOME_ARRAY_ERROR | 4053 | 配列エラー Some array error  | 
| ERR_INCORRECT_SERIESARRAY_USING | 4054 | 不正な時系列配列使用 Incorrect series array using  | 
| ERR_CUSTOM_INDICATOR_ERROR | 4055 | カスタムインジケータエラー Custom indicator error  | 
| ERR_INCOMPATIBLE_ARRAYS | 4056 | 互換性の無い配列 Arrays are incompatible  | 
| ERR_GLOBAL_VARIABLES_PROCESSING | 4057 | グローバル変数処理エラー Global variables processing error  | 
| ERR_GLOBAL_VARIABLE_NOT_FOUND | 4058 | グローバル変数が見つかりません Global variable not found  | 
| ERR_FUNC_NOT_ALLOWED_IN_TESTING | 4059 | 関数がテストモードで許可されていません Function is not allowed in testing mode  | 
| ERR_FUNCTION_NOT_CONFIRMED | 4060 | 関数が呼び出し許可されていません Function is not allowed for call  | 
| ERR_SEND_MAIL_ERROR | 4061 | メール送信エラー Send mail error  | 
| ERR_STRING_PARAMETER_EXPECTED | 4062 | 文字列引数が必要 String parameter expected  | 
| ERR_INTEGER_PARAMETER_EXPECTED | 4063 | 整数引数が必要 Integer parameter expected  | 
| ERR_DOUBLE_PARAMETER_EXPECTED | 4064 | double引数が必要 Double parameter expected  | 
| ERR_ARRAY_AS_PARAMETER_EXPECTED | 4065 | 配列引数が必要 Array as parameter expected  | 
| ERR_HISTORY_WILL_UPDATED | 4066 | 要求したヒストリーデータが更新中 Requested history data is in updating state  | 
| ERR_TRADE_ERROR | 4067 | 内部トレードエラー Internal trade error  | 
| ERR_RESOURCE_NOT_FOUND | 4068 | リソースが見つかりません Resource not found  | 
| ERR_RESOURCE_NOT_SUPPORTED | 4069 | リソースがサポートされていません Resource not supported  | 
| ERR_RESOURCE_DUPLICATED | 4070 | リソースが重複しています Duplicate resource  | 
| ERR_INDICATOR_CANNOT_INIT | 4071 | カスタムインジケータを初期化できません Custom indicator cannot initialize  | 
| ERR_INDICATOR_CANNOT_LOAD | 4072 | カスタムインジータをロードできません Cannot load custom indicator  | 
| ERR_NO_HISTORY_DATA | 4073 | ヒストリーデータがありません No history data  | 
| ERR_NO_MEMORY_FOR_HISTORY | 4074 | ヒストリーデータの為のメモリがありません No memory for history data  | 
| ERR_NO_MEMORY_FOR_INDICATOR | 4075 | インジケータ計算の為のメモリがありませんNot enough memory for indicator calculation  | 
| ERR_END_OF_FILE | 4099 | ファイルの終わり End of file  | 
| ERR_SOME_FILE_ERROR | 4100 | ファイルエラー Some file error  | 
| ERR_WRONG_FILE_NAME | 4101 | 不正なファイル名 Wrong file name  | 
| ERR_TOO_MANY_OPENED_FILES | 4102 | ファイルを開き過ぎています Too many opened files  | 
| ERR_CANNOT_OPEN_FILE | 4103 | ファイルが開けません Cannot open file  | 
| ERR_INCOMPATIBLE_FILEACCESS | 4104 | 互換性の無いファイルアクセス Incompatible access to a file  | 
| ERR_NO_ORDER_SELECTED | 4105 | オーダー選択されていません No order selected  | 
| ERR_UNKNOWN_SYMBOL | 4106 | 不明なシンボル Unknown symbol  | 
| ERR_INVALID_PRICE_PARAM | 4107 | 無効な価格 Invalid price  | 
| ERR_INVALID_TICKET | 4108 | 無効なチケット Invalid ticket  | 
| ERR_TRADE_NOT_ALLOWED | 4109 | トレードが許可されていません。許可するには、EAプロパティのチェックボックスで設定します Trade is not allowed. Enable checkbox “Allow live trading” in the Expert Advisor properties  | 
| ERR_LONGS_NOT_ALLOWED | 4110 | 買い注文は許可されていません。許可するには、EAプロパティで設定します Longs are not allowed. Check the Expert Advisor properties  | 
| ERR_SHORTS_NOT_ALLOWED | 4111 | 売り注文は許可されていません。許可するには、EAプロパティで設定します Shorts are not allowed. Check the Expert Advisor properties  | 
| ERR_TRADE_EXPERT_DISABLED_BY_SERVER | 4112 | EA・スクリプトによる自動売買はトレードサーバーで許可されていません Automated trading by Expert Advisors/Scripts disabled by trade server  | 
| ERR_OBJECT_ALREADY_EXISTS | 4200 | オブジェクトが既に存在しています Object already exists  | 
| ERR_UNKNOWN_OBJECT_PROPERTY | 4201 | 不明なオブジェクトプロパティ Unknown object property  | 
| ERR_OBJECT_DOES_NOT_EXIST | 4202 | オブジェクトが存在していません Object does not exist  | 
| ERR_UNKNOWN_OBJECT_TYPE | 4203 | 不明なオブジェクトタイプ Unknown object type  | 
| ERR_NO_OBJECT_NAME | 4204 | オブジェクト名がありません No object name  | 
| ERR_OBJECT_COORDINATES_ERROR | 4205 | オブジェクト調整エラー Object coordinates error  | 
| ERR_NO_SPECIFIED_SUBWINDOW | 4206 | サブウインドウを指定出来ません No specified subwindow  | 
| ERR_SOME_OBJECT_ERROR | 4207 | グラフィカルオブジェクトエラー Graphical object error  | 
| ERR_CHART_PROP_INVALID | 4210 | 不正なチャートプロパティ Unknown chart property  | 
| ERR_CHART_NOT_FOUND | 4211 | チャートが見つかりません Chart not found  | 
| ERR_CHARTWINDOW_NOT_FOUND | 4212 | チャートサブウインドウが見つかりません Chart subwindow not found  | 
| ERR_CHARTINDICATOR_NOT_FOUND | 4213 | チャートインジケータが見つかりません Chart indicator not found  | 
| ERR_SYMBOL_SELECT | 4220 | シンボル選択エラー Symbol select error  | 
| ERR_NOTIFICATION_ERROR | 4250 | 通知エラー Notification error  | 
| ERR_NOTIFICATION_PARAMETER | 4251 | 通知パラメータエラー Notification parameter error  | 
| ERR_NOTIFICATION_SETTINGS | 4252 | 通知無効 Notifications disabled  | 
| ERR_NOTIFICATION_TOO_FREQUENT | 4253 | 通知を頻繁に送り過ぎ Notification send too frequent  | 
| ERR_FTP_NOSERVER | 4260 | FTPサーバーが指定されていません FTP server is not specified  | 
| ERR_FTP_NOLOGIN | 4261 | FTPログインが指定されていません | 
| ERR_FTP_CONNECT_FAILED | 4262 | FTP接続に失敗しました FTP login is not specified  | 
| ERR_FTP_CLOSED | 4263 | FTP接続が閉じられました FTP connection closed  | 
| ERR_FTP_CHANGEDIR | 4264 | サーバー上でFTPパスが見つかりませんFTP path not found on server  | 
| ERR_FTP_FILE_ERROR | 4265 | FTPサーバーで送信するディレクトリ(MQL4\Files)にファイルがありません File not found in the MQL4\Files directory to send on FTP server  | 
| ERR_FTP_ERROR | 4266 | FTPデータ送信中のエラー Common error during FTP data transmission  | 
| ERR_FILE_TOO_MANY_OPENED | 5001 | ファイルを開き過ぎ Too many opened files  | 
| ERR_FILE_WRONG_FILENAME | 5002 | 不正なファイル名 Wrong file name  | 
| ERR_FILE_TOO_LONG_FILENAME | 5003 | ファイル名が長すぎます Too long file name  | 
| ERR_FILE_CANNOT_OPEN | 5004 | ファイルを開けません Cannot open file  | 
| ERR_FILE_BUFFER_ALLOCATION_ERROR | 5005 | テキストファイルのバッファ割り当てエラー Text file buffer allocation error  | 
| ERR_FILE_CANNOT_DELETE | 5006 | ファイルを削除できません Cannot delete file  | 
| ERR_FILE_INVALID_HANDLE | 5007 | 無効なファイルハンドル(ファイルがオープン・クローズされていない) Invalid file handle (file closed or was not opened)  | 
| ERR_FILE_WRONG_HANDLE | 5008 | 不正なファイルハンドル(ハンドルインデックスがハンドルテーブル外) Wrong file handle (handle index is out of handle table)  | 
| ERR_FILE_NOT_TOWRITE | 5009 | FILE_WRITEフラグ付きでオープンする必要があります File must be opened with FILE_WRITE flag  | 
| ERR_FILE_NOT_TOREAD | 5010 | FILE_READフラグ付きでオープンする必要があります File must be opened with FILE_READ flag  | 
| ERR_FILE_NOT_BIN | 5011 | FILE_BINフラグ付きでオープンする必要があります File must be opened with FILE_BIN flag  | 
| ERR_FILE_NOT_TXT | 5012 | FILE_TXTフラグ付きでオープンする必要があります File must be opened with FILE_TXT flag  | 
| ERR_FILE_NOT_TXTORCSV | 5013 | FILE_TXT又はFILE_CSVフラグ付きでオープンする必要があります File must be opened with FILE_TXT or FILE_CSV flag  | 
| ERR_FILE_NOT_CSV | 5014 | FILE_CSVフラグ付きでオープンする必要があります File must be opened with FILE_CSV flag  | 
| ERR_FILE_READ_ERROR | 5015 | ファイル読み込みエラー File read error  | 
| ERR_FILE_WRITE_ERROR | 5016 | ファイル書き込みエラー File write error  | 
| ERR_FILE_BIN_STRINGSIZE | 5017 | バイナリファイルの為に文字列サイズを指定する必要があります String size must be specified for binary file  | 
| ERR_FILE_INCOMPATIBLE | 5018 | 互換性の無いファイル(.txt:文字列ファイル, .bin:他ファイル) Incompatible file (for string arrays-TXT, for others-BIN)  | 
| ERR_FILE_IS_DIRECTORY | 5019 | ファイルではありません。ディレクトリです。 File is directory not file  | 
| ERR_FILE_NOT_EXIST | 5020 | ファイルが存在しません File does not exist  | 
| ERR_FILE_CANNOT_REWRITE | 5021 | ファイルを書き換える事は出来ません File cannot be rewritten  | 
| ERR_FILE_WRONG_DIRECTORYNAME | 5022 | 不正なディレクトリ名 Wrong directory name  | 
| ERR_FILE_DIRECTORY_NOT_EXIST | 5023 | ディレクトリが存在しません Directory does not exist  | 
| ERR_FILE_NOT_DIRECTORY | 5024 | 指定されたファイルはディレクトリではありません Specified file is not directory  | 
| ERR_FILE_CANNOT_DELETE_DIRECTORY | 5025 | ディレクトリを削除する事は出来ません Cannot delete directory  | 
| ERR_FILE_CANNOT_CLEAN_DIRECTORY | 5026 | ディレクトリ内のデータを削除する事は出来ません Cannot clean directory  | 
| ERR_FILE_ARRAYRESIZE_ERROR | 5027 | 配列サイズ変更エラー Array resize error  | 
| ERR_FILE_STRINGRESIZE_ERROR | 5028 | 文字列サイズ変更エラー String resize error  | 
| ERR_FILE_STRUCT_WITH_OBJECTS | 5029 | 構造体に文字列または動的配列が含まれていますStructure contains strings or dynamic arrays  | 
| ERR_WEBREQUEST_INVALID_ADDRESS | 5200 | 無効なURL Invalid URL  | 
| ERR_WEBREQUEST_CONNECT_FAILED | 5201 | 指定されたURLへの接続に失敗しました Failed to connect to specified URL  | 
| ERR_WEBREQUEST_TIMEOUT | 5202 | タイムアウト Timeout exceeded  | 
| ERR_WEBREQUEST_REQUEST_FAILED | 5203 | HTTPリクエスト失敗 HTTP request failed  | 
| ERR_USER_ERROR_FIRST | 65536 | ユーザー定義エラーは、このコードから始まります User defined errors start with this code  | 
エラーコード定数(ERR_○○)の使い方
エラーが起こったとき、システムが自動的に_LastError変数に、適切なエラーコード定数を格納します。
_LastError変数の値を取得するために、GetLastError関数を使います。
GetLastError関数を使うことで、エラーコードの番号を知ることができます。
エラーコードの番号を知ることができれば、エラーの内容をErrorDescription関数を使って表示させることができるので、デバッグするときにとても役立ちます。
例えば、以下のように使用します。
#property strict
//ライブラリをインクルード
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| スクリプトスタート
//+------------------------------------------------------------------+
void OnStart()
{
    int ea_ticket_res;
    // エラーになるようにLot:0で発注
    ea_ticket_res = OrderSend(  // オーダー送信
        Symbol(),               // 通貨ペア
        OP_BUY,                 // オーダータイプ[OP_BUY / OP_SELL]
        0.00000,                // ロット[0.01単位]
        Ask,                    // オーダープライスレート
        20,                     // スリップ上限    (int)[分解能 0.1pips]
        0,                      // ストップレート
        0,                      // リミットレート
        "エラーテスト",          // オーダーコメント
        999,                    // マジックナンバー(管理用)
        0,                      // オーダーリミット時間
        clrRed                  // オーダーアイコンカラー
    );
    //オーダーエラー
    if ( ea_ticket_res == -1 ) { 
        int error_code;
        string error_detail;
        // エラーコード取得
        error_code = GetLastError(); 
        // エラー内容取得
        error_detail = ErrorDescription(error_code);
        if ( error_code != ERR_NO_ERROR ) {
            printf( "エラーコード:%d 内容:%s" , error_code , error_detail);
        }
    }
}上記のプログラムを実行することで、以下のような結果を得ることができます。
「エラーコード: 4051 詳細:invalid function parameter value」

  




