//+------------------------------------------------------------------+ //| Module: Lang/Error.mqh | //| This file is part of the mql4-lib project: | //| https://github.com/dingmaotu/mql4-lib | //| | //| Copyright 2016-2017 Li Ding | //| | //| Licensed under the Apache License, Version 2.0 (the "License"); | //| you may not use this file except in compliance with the License. | //| You may obtain a copy of the License at | //| | //| http://www.apache.org/licenses/LICENSE-2.0 | //| | //| Unless required by applicable law or agreed to in writing, | //| software distributed under the License is distributed on an | //| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, | //| either express or implied. | //| See the License for the specific language governing permissions | //| and limitations under the License. | //+------------------------------------------------------------------+ #property strict //+------------------------------------------------------------------+ //| Error code and description combo | //+------------------------------------------------------------------+ struct ErrorDescriptor { public: int code; string description; }; //+------------------------------------------------------------------+ //| Table of predefined errors | //+------------------------------------------------------------------+ static ErrorDescriptor ErrorDescriptorTable[]= { #ifdef __MQL5__ {0,"The operation completed successfully "}, {4001,"Unexpected internal error"}, {4002,"Wrong parameter in the inner call of the client terminal function"}, {4003,"Wrong parameter when calling the system function"}, {4004,"Not enough memory to perform the system function"}, {4005,"The structure contains objects of strings and/or dynamic arrays and/or structure of such objects and/or classes"}, {4006,"Array of a wrong type, wrong size, or a damaged object of a dynamic array"}, {4007,"Not enough memory for the relocation of an array, or an attempt to change the size of a static array"}, {4008,"Not enough memory for the relocation of string"}, {4009,"Not initialized string"}, {4010,"Invalid date and/or time"}, {4011,"Requested array size exceeds 2 GB"}, {4012,"Wrong pointer"}, {4013,"Wrong type of pointer"}, {4014,"Function is not allowed for call"}, {4015,"The names of the dynamic and the static resource match"}, {4016,"Resource with this name has not been found in EX5"}, {4017,"Unsupported resource type or its size exceeds 16 Mb"}, {4018,"The resource name exceeds 63 characters"}, {4019,"Overflow occurred when calculating math function "}, //--- Charts {4101,"Wrong chart ID"}, {4102,"Chart does not respond"}, {4103,"Chart not found"}, {4104,"No Expert Advisor in the chart that could handle the event"}, {4105,"Chart opening error"}, {4106,"Failed to change chart symbol and period"}, {4107,"Error value of the parameter for the function of working with charts"}, {4108,"Failed to create timer"}, {4109,"Wrong chart property ID"}, {4110,"Error creating screenshots"}, {4111,"Error navigating through chart"}, {4112,"Error applying template"}, {4113,"Subwindow containing the indicator was not found"}, {4114,"Error adding an indicator to chart"}, {4115,"Error deleting an indicator from the chart"}, {4116,"Indicator not found on the specified chart"}, //--- Graphical Objects {4201,"Error working with a graphical object"}, {4202,"Graphical object was not found"}, {4203,"Wrong ID of a graphical object property"}, {4204,"Unable to get date corresponding to the value"}, {4205,"Unable to get value corresponding to the date"}, //--- MarketInfo {4301,"Unknown symbol"}, {4302,"Symbol is not selected in MarketWatch"}, {4303,"Wrong identifier of a symbol property"}, {4304,"Time of the last tick is not known (no ticks)"}, {4305,"Error adding or deleting a symbol in MarketWatch"}, //--- History Access {4401,"Requested history not found"}, {4402,"Wrong ID of the history property"}, {4403,"Exceeded history request timeout"}, {4404,"Number of requested bars limited by terminal settings"}, {4405,"Multiple errors when loading history"}, {4407,"Receiving array is too small to store all requested data"}, //--- Global_Variables {4501,"Global variable of the client terminal is not found"}, {4502,"Global variable of the client terminal with the same name already exists"}, {4503,"Global variables were not modified"}, {4504,"Cannot read file with global variable values"}, {4505,"Cannot write file with global variable values"}, {4510,"Email sending failed"}, {4511,"Sound playing failed"}, {4512,"Wrong identifier of the program property"}, {4513,"Wrong identifier of the terminal property"}, {4514,"File sending via ftp failed"}, {4515,"Failed to send a notification"}, {4516,"Invalid parameter for sending a notification – an empty string or NULL has been passed to the SendNotification() function"}, {4517,"Wrong settings of notifications in the terminal (ID is not specified or permission is not set)"}, {4518,"Too frequent sending of notifications"}, {4519,"FTP server is not specified"}, {4520,"FTP login is not specified"}, {4521,"File not found in the MQL5\\Files directory to send on FTP server"}, {4522,"FTP connection failed"}, {4523,"FTP path not found on server"}, {4524,"FTP connection closed"}, //--- Custom Indicator Buffers {4601,"Not enough memory for the distribution of indicator buffers"}, {4602,"Wrong indicator buffer index"}, //--- Custom Indicator Properties {4603,"Wrong ID of the custom indicator property"}, //--- Account {4701,"Wrong account property ID"}, {4751,"Wrong trade property ID"}, {4752,"Trading by Expert Advisors prohibited"}, {4753,"Position not found"}, {4754,"Order not found"}, {4755,"Deal not found"}, {4756,"Trade request sending failed"}, {4758,"Failed to calculate profit or margin"}, //--- Indicators {4801,"Unknown symbol"}, {4802,"Indicator cannot be created"}, {4803,"Not enough memory to add the indicator"}, {4804,"The indicator cannot be applied to another indicator"}, {4805,"Error applying an indicator to chart"}, {4806,"Requested data not found"}, {4807,"Wrong indicator handle"}, {4808,"Wrong number of parameters when creating an indicator"}, {4809,"No parameters when creating an indicator"}, {4810,"The first parameter in the array must be the name of the custom indicator"}, {4811,"Invalid parameter type in the array when creating an indicator"}, {4812,"Wrong index of the requested indicator buffer"}, //--- Depth of Market {4901,"Depth Of Market can not be added"}, {4902,"Depth Of Market can not be removed"}, {4903,"The data from Depth Of Market can not be obtained"}, {4904,"Error in subscribing to receive new data from Depth Of Market"}, //--- File Operations {5001,"More than 64 files cannot be opened at the same time"}, {5002,"Invalid file name"}, {5003,"Too long file name"}, {5004,"File opening error"}, {5005,"Not enough memory for cache to read"}, {5006,"File deleting error"}, {5007,"A file with this handle was closed, or was not opening at all"}, {5008,"Wrong file handle"}, {5009,"The file must be opened for writing"}, {5010,"The file must be opened for reading"}, {5011,"The file must be opened as a binary one"}, {5012,"The file must be opened as a text"}, {5013,"The file must be opened as a text or CSV"}, {5014,"The file must be opened as CSV"}, {5015,"File reading error"}, {5016,"String size must be specified, because the file is opened as binary"}, {5017,"A text file must be for string arrays, for other arrays - binary"}, {5018,"This is not a file, this is a directory"}, {5019,"File does not exist"}, {5020,"File can not be rewritten"}, {5021,"Wrong directory name"}, {5022,"Directory does not exist"}, {5023,"This is a file, not a directory"}, {5024,"The directory cannot be removed"}, {5025,"Failed to clear the directory (probably one or more files are blocked and removal operation failed)"}, {5026,"Failed to write a resource to a file"}, {5027,"Unable to read the next piece of data from a CSV file (FileReadString, FileReadNumber, FileReadDatetime, FileReadBool), since the end of file is reached"}, //--- String Casting {5030,"No date in the string"}, {5031,"Wrong date in the string"}, {5032,"Wrong time in the string"}, {5033,"Error converting string to date"}, {5034,"Not enough memory for the string"}, {5035,"The string length is less than expected"}, {5036,"Too large number, more than ULONG_MAX"}, {5037,"Invalid format string"}, {5038,"Amount of format specifiers more than the parameters"}, {5039,"Amount of parameters more than the format specifiers"}, {5040,"Damaged parameter of string type"}, {5041,"Position outside the string"}, {5042,"0 added to the string end, a useless operation"}, {5043,"Unknown data type when converting to a string"}, {5044,"Damaged string object"}, //--- Operations with Arrays {5050,"Copying incompatible arrays. String array can be copied only to a string array, and a numeric array - in numeric array only"}, {5051,"The receiving array is declared as AS_SERIES, and it is of insufficient size"}, {5052,"Too small array, the starting position is outside the array"}, {5053,"An array of zero length"}, {5054,"Must be a numeric array"}, {5055,"Must be a one-dimensional array"}, {5056,"Timeseries cannot be used"}, {5057,"Must be an array of type double"}, {5058,"Must be an array of type float"}, {5059,"Must be an array of type long"}, {5060,"Must be an array of type int"}, {5061,"Must be an array of type short"}, {5062,"Must be an array of type char"}, {5063,"String array only"}, //--- Operations with OpenCL {5100,"OpenCL functions are not supported on this computer"}, {5101,"Internal error occurred when running OpenCL"}, {5102,"Invalid OpenCL handle"}, {5103,"Error creating the OpenCL context"}, {5104,"Failed to create a run queue in OpenCL"}, {5105,"Error occurred when compiling an OpenCL program"}, {5106,"Too long kernel name (OpenCL kernel)"}, {5107,"Error creating an OpenCL kernel"}, {5108,"Error occurred when setting parameters for the OpenCL kernel"}, {5109,"OpenCL program runtime error"}, {5110,"Invalid size of the OpenCL buffer"}, {5111,"Invalid offset in the OpenCL buffer"}, {5112,"Failed to create an OpenCL buffer"}, {5113,"Too many OpenCL objects"}, {5114,"OpenCL device selection error"}, //--- Operations with WebRequest {5200,"Invalid URL"}, {5201,"Failed to connect to specified URL"}, {5202,"Timeout exceeded"}, {5203,"HTTP request failed"}, //--- Custom Symbols {5300,"A custom symbol must be specified"}, {5301,"The name of the custom symbol is invalid. The symbol name can only contain Latin letters without punctuation, spaces or special characters (may only contain \".\", \"_\", \"&\" and \"#\"). It is not recommended to use characters <, >, :, \", /,\\, |, ?, *."}, {5302,"The name of the custom symbol is too long. The length of the symbol name must not exceed 32 characters including the ending 0 character"}, {5303,"The path of the custom symbol is too long. The path length should not exceed 128 characters including \"Custom\\\", the symbol name, group separators and the ending 0"}, {5304,"A custom symbol with the same name already exists"}, {5305,"Error occurred while creating, deleting or changing the custom symbol"}, {5306,"You are trying to delete a custom symbol selected in Market Watch"}, {5307,"An invalid custom symbol property"}, {5308,"A wrong parameter while setting the property of a custom symbol"}, {5309,"A too long string parameter while setting the property of a custom symbol"}, {5310,"Ticks in the array are not arranged in the order of time"}, //--- Trade Server Returned Errors {10004,"Requote"}, {10006,"Request rejected"}, {10007,"Request canceled by trader"}, {10008,"Order placed"}, {10009,"Request completed"}, {10010,"Only part of the request was completed"}, {10011,"Request processing error"}, {10012,"Request canceled by timeout"}, {10013,"Invalid request"}, {10014,"Invalid volume in the request"}, {10015,"Invalid price in the request"}, {10016,"Invalid stops in the request"}, {10017,"Trade is disabled"}, {10018,"Market is closed"}, {10019,"There is not enough money to complete the request"}, {10020,"Prices changed"}, {10021,"There are no quotes to process the request"}, {10022,"Invalid order expiration date in the request"}, {10023,"Order state changed"}, {10024,"Too frequent requests"}, {10025,"No changes in request"}, {10026,"Autotrading disabled by server"}, {10027,"Autotrading disabled by client terminal"}, {10028,"Request locked for processing"}, {10029,"Order or position frozen"}, {10030,"Invalid order filling type"}, {10031,"No connection with the trade server"}, {10032,"Operation is allowed only for live accounts"}, {10033,"The number of pending orders has reached the limit"}, {10034,"The volume of orders and positions for the symbol has reached the limit"}, {10035,"Incorrect or prohibited order type"}, {10036,"Position with the specified POSITION_IDENTIFIER has already been closed"}, {10038,"A close volume exceeds the current position volume"}, {10039,"A close order already exists for a specified position"}, {10040,"The number of open positions simultaneously present on an account can be limited by the server settings"}, {10041,"The pending order activation request is rejected, the order is canceled"}, {10042,"The request is rejected, because the \"Only long positions are allowed\" rule is set for the symbol (POSITION_TYPE_BUY)"}, {10043,"The request is rejected, because the \"Only short positions are allowed\" rule is set for the symbol (POSITION_TYPE_SELL)"}, {10044,"The request is rejected, because the \"Only position closing is allowed\" rule is set for the symbol"}, //--- User-Defined Errors {65536,"User defined errors start with this code"} #else //--- trade server errors {0, "no error"}, {1, "no error, trade conditions not changed"}, {2, "common error"}, {3, "invalid trade parameters"}, {4, "trade server is busy"}, {5, "old version of the client terminal"}, {6, "no connection with trade server"}, {7, "not enough rights"}, {8, "too frequent requests"}, {9, "malfunctional trade operation (never returned error)"}, {64, "account disabled"}, {65, "invalid account"}, {128, "trade timeout"}, {129, "invalid price"}, {130, "invalid stops"}, {131, "invalid trade volume"}, {132, "market is closed"}, {133, "trade is disabled"}, {134, "not enough money"}, {135, "price changed"}, {136, "off quotes"}, {137, "broker is busy (never returned error)"}, {138, "requote"}, {139, "order is locked"}, {140, "long positions only allowed"}, {141, "too many requests"}, {145, "modification denied because order is too close to market"}, {146, "trade context is busy"}, {147, "expirations are denied by broker"}, {148, "amount of open and pending orders has reached the limit"}, {149, "hedging is prohibited"}, {150, "prohibited by FIFO rules"}, //--- mql4 errors {4000, "no error (never generated code)"}, {4001, "wrong function pointer"}, {4002, "array index is out of range"}, {4003, "no memory for function call stack"}, {4004, "recursive stack overflow"}, {4005, "not enough stack for parameter"}, {4006, "no memory for parameter string"}, {4007, "no memory for temp string"}, {4008, "non-initialized string"}, {4009, "non-initialized string in array"}, {4010, "no memory for array\' string"}, {4011, "too long string"}, {4012, "remainder from zero divide"}, {4013, "zero divide"}, {4014, "unknown command"}, {4015, "wrong jump (never generated error)"}, {4016, "non-initialized array"}, {4017, "dll calls are not allowed"}, {4018, "cannot load library"}, {4019, "cannot call function"}, {4020, "expert function calls are not allowed"}, {4021, "not enough memory for temp string returned from function"}, {4022, "system is busy (never generated error)"}, {4023, "dll-function call critical error"}, {4024, "internal error"}, {4025, "out of memory"}, {4026, "invalid pointer"}, {4027, "too many formatters in the format function"}, {4028, "parameters count is more than formatters count"}, {4029, "invalid array"}, {4030, "no reply from chart"}, {4050, "invalid function parameters count"}, {4051, "invalid function parameter value"}, {4052, "string function internal error"}, {4053, "some array error"}, {4054, "incorrect series array usage"}, {4055, "custom indicator error"}, {4056, "arrays are incompatible"}, {4057, "global variables processing error"}, {4058, "global variable not found"}, {4059, "function is not allowed in testing mode"}, {4060, "function is not confirmed"}, {4061, "send mail error"}, {4062, "string parameter expected"}, {4063, "integer parameter expected"}, {4064, "double parameter expected"}, {4065, "array as parameter expected"}, {4066, "requested history data is in update state"}, {4067, "internal trade error"}, {4068, "resource not found"}, {4069, "resource not supported"}, {4070, "duplicate resource"}, {4071, "cannot initialize custom indicator"}, {4072, "cannot load custom indicator"}, {4073, "no history data"}, {4074, "not enough memory for history data"}, {4075, "not enough memory for indicator"}, {4099, "end of file"}, {4100, "some file error"}, {4101, "wrong file name"}, {4102, "too many opened files"}, {4103, "cannot open file"}, {4104, "incompatible access to a file"}, {4105, "no order selected"}, {4106, "unknown symbol"}, {4107, "invalid price parameter for trade function"}, {4108, "invalid ticket"}, {4109, "trade is not allowed in the expert properties"}, {4110, "longs are not allowed in the expert properties"}, {4111, "shorts are not allowed in the expert properties"}, {4200, "object already exists"}, {4201, "unknown object property"}, {4202, "object does not exist"}, {4203, "unknown object type"}, {4204, "no object name"}, {4205, "object coordinates error"}, {4206, "no specified subwindow"}, {4207, "graphical object error"}, {4210, "unknown chart property"}, {4211, "chart not found"}, {4212, "chart subwindow not found"}, {4213, "chart indicator not found"}, {4220, "symbol select error"}, {4250, "notification error"}, {4251, "notification parameter error"}, {4252, "notifications disabled"}, {4253, "notification send too frequent"}, {4260, "ftp server is not specified"}, {4261, "ftp login is not specified"}, {4262, "ftp connect failed"}, {4263, "ftp connect closed"}, {4264, "ftp change path error"}, {4265, "ftp file error"}, {4266, "ftp error"}, {5001, "too many opened files"}, {5002, "wrong file name"}, {5003, "too long file name"}, {5004, "cannot open file"}, {5005, "text file buffer allocation error"}, {5006, "cannot delete file"}, {5007, "invalid file handle (file closed or was not opened)"}, {5008, "wrong file handle (handle index is out of handle table)"}, {5009, "file must be opened with FILE_WRITE flag"}, {5010, "file must be opened with FILE_READ flag"}, {5011, "file must be opened with FILE_BIN flag"}, {5012, "file must be opened with FILE_TXT flag"}, {5013, "file must be opened with FILE_TXT or FILE_CSV flag"}, {5014, "file must be opened with FILE_CSV flag"}, {5015, "file read error"}, {5016, "file write error"}, {5017, "string size must be specified for binary file"}, {5018, "incompatible file (for string arrays-TXT, for others-BIN)"}, {5019, "file is directory, not file"}, {5020, "file does not exist"}, {5021, "file cannot be rewritten"}, {5022, "wrong directory name"}, {5023, "directory does not exist"}, {5024, "specified file is not directory"}, {5025, "cannot delete directory"}, {5026, "cannot clean directory"}, {5027, "array resize error"}, {5028, "string resize error"}, {5029, "structure contains strings or dynamic arrays"} #endif }; //+------------------------------------------------------------------+ //| Binary search error description | //+------------------------------------------------------------------+ string GetErrorDescription(int errorCode) { int size = ArraySize(ErrorDescriptorTable); int begin=0,end=size-1,mid=-1; while(begin<=end) { mid=(begin+end)/2; if(ErrorDescriptorTable[mid].codeerrorCode) { end=mid-1; continue; } else { break; } } if(mid==-1) return "Unknown error"; else return ErrorDescriptorTable[mid].description; } //+------------------------------------------------------------------+