Собственно, сначала кусок кода:
//Сформируем приказ на вход в рынок***************************************************************************************************
if(Close[1]>Max20 && LongOpen==0 && ShortOpen==0)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)-StopLoss;
ticket[t]=OrderSend(Symbol(),OP_BUY,Lot,Ask,20,0,0,»Старт»,t,0,Green); LongOpen=true; OrderPrice=MarketInfo(Symbol(),MODE_BID);
if(ticket[t]<0)
{
Print(«Buy OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
if(Close[1]<Min20 && ShortOpen==0 && LongOpen==0)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)+StopLoss;
ticket[t]=OrderSend(Symbol(),OP_SELL,Lot,Bid,20,0,0,»Старт»,t,0,Green); ShortOpen=true; OrderPrice=MarketInfo(Symbol(),MODE_BID);
if(ticket[t]<0)
{
Print(«Sell OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
//Сформировали приказ на вход в рынок*************************************************************************************************
//Зададим алгоритм построения «пирамиды» для увеличения прибыльной позиции************************************************************************************************************
while(t<2)
{
if(MarketInfo(Symbol(),MODE_BID)>OrderPrice+2*N_vtor && LongOpen==1)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)-StopLoss;
ticket[t]=OrderSend(Symbol(),OP_BUY,Lot,Ask,20,0,0,»Пирамида»,t,0,Green); OrderPrice=MarketInfo(Symbol(),MODE_BID);//открытие доп. ордера в пирамиде
if(ticket[t]<0)
{
Print(«Buy OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
if(MarketInfo(Symbol(),MODE_BID)<OrderPrice-2*N_vtor && ShortOpen==1)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)+StopLoss;
ticket[t]=OrderSend(Symbol(),OP_SELL,Lot,Bid,20,0,0,»Пирамида»,t,0,Green); OrderPrice=MarketInfo(Symbol(),MODE_BID);//открытие доп. ордера в пирамиде
if(ticket[t]<0)
{
Print(«Sell OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
break;
}
//Задали алгоритм построения «пирамиды» для увеличения прибыльной
позиции************************************************************************************************************
//Приведение StopLoss’а для всех ордеров к уровню только что открытого (последнего)**************************************************************************************************
while(tt<t)//ордер модифицируется ТОЛЬКО когда открылся следующий ордер (tt<t, после модификации tt=t, после открытия нового ордера tt<t и т.д)
{
tt=0;
for(tt=0;tt<t;tt++)//Перебор всех ордеров начиная с 0го, заканчивая (t-1)’м
{
OrderSelect(ticket[tt], SELECT_BY_TICKET);
Print(«Модифицируется ордер «,OrderTicket());
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
}
}
Первая часть (вход на рынок) выполняется как нужно.
Вторая часть (пирамида) выполняется как нужно.
В третьей части проблема. Происходит следующее — советник открывает 0й ордер с тикетом ticket[0]=1 (это в первой части, номер тикета — в массиве), затем OrderSelect — выбрали этот ордер, OrderModify — модифицировали.
Далее, после срабатывания необходимых условий, советник открывает 1й ордер с тикетом ticket[1]=5 (все аналогично, ордер открывается как нужно, без проблем). Затем:
Должно быть так: 0: OrderSelect — выбирает предыдущий ордер с тикетом ticket[0], OrderModify- модифицирует его (подтягивает стоплосс)
1: OrderSelect — выбирает ордер с тикетом ticket[1], OrderModify- модифицирует его (задает стоплосс — такой же, какой теперь у предыдущего ордера)
Имеем следующее: 0: OrderSelect — выбирает предыдущий ордер с тикетом ticket[0], OrderModify- должен бы модифицировать его, но возвращает ошибку 4108 (Неверный номер тикета) — Unknown ticket 1 for OrderModify function (где ticket 1 — и есть ticket[0]).
1: OrderSelect — выбирает ордер с тикетом ticket[1], OrderModify-
модифицирует его (задает стоплосс — такой же, какой теперь у предыдущего
ордера) — все тип-топ.
Далее, при открытии 2го ордера с тикетом ticket[2]=16 повторяется та же история. Советник НЕ модифицирует 2 предыдущих ордера (дважды выдает ошибку 4108), модифицирует последний. При открытии последующих ордеров — модифицируется только последний из них, все предыдущие — «Unknown ticket». Хотя они открыты, я могу вытянуть любую информацию из них.
OrderSelect(ticket[tt], SELECT_BY_TICKET);
Print(«Модифицируется ордер «,OrderTicket());
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
Функция OrderSelect — исправно перебирает все ордеры, от 0-го до текущего, возвращая каждый раз TRUE. Функция OrderModify поочередно получает значение OrderTicket() выбранных ордеров. Но видит только последний. В чем может быть проблема? Собственно говоря, все работает исправно до строчки
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
Всем спасибо за внимание.
GetLastError() — функция, возвращающая коды ошибок. Кодовые константы ошибок определены
в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию
ErrorDescription(), определенную в файле stdlib.mqh.
Константа | Значение | Описание |
---|---|---|
ERR_NO_ERROR | 0 | Нет ошибки |
ERR_NO_RESULT | 1 | Нет ошибки, но результат неизвестен |
ERR_COMMON_ERROR | 2 | Общая ошибка |
ERR_INVALID_TRADE_PARAMETERS | 3 | Неправильные параметры |
ERR_SERVER_BUSY | 4 | Торговый сервер занят |
ERR_OLD_VERSION | 5 | Старая версия клиентского терминала |
ERR_NO_CONNECTION | 6 | Нет связи с торговым сервером |
ERR_NOT_ENOUGH_RIGHTS | 7 | Недостаточно прав |
ERR_TOO_FREQUENT_REQUESTS | 8 | Слишком частые запросы |
ERR_MALFUNCTIONAL_TRADE | 9 | Недопустимая операция нарушающая функционирование сервера |
ERR_ACCOUNT_DISABLED | 64 | Счет заблокирован |
ERR_INVALID_ACCOUNT | 65 | Неправильный номер счета |
ERR_TRADE_TIMEOUT | 128 | Истек срок ожидания совершения сделки |
ERR_INVALID_PRICE | 129 | Неправильная цена |
ERR_INVALID_STOPS | 130 | Неправильные стопы |
ERR_INVALID_TRADE_VOLUME | 131 | Неправильный объем |
ERR_MARKET_CLOSED | 132 | Рынок закрыт |
ERR_TRADE_DISABLED | 133 | Торговля запрещена |
ERR_NOT_ENOUGH_MONEY | 134 | Недостаточно денег для совершения операции |
ERR_PRICE_CHANGED | 135 | Цена изменилась |
ERR_OFF_QUOTES | 136 | Нет цен |
ERR_BROKER_BUSY | 137 | Брокер занят |
ERR_REQUOTE | 138 | Новые цены |
ERR_ORDER_LOCKED | 139 | Ордер заблокирован и уже обрабатывается |
ERR_LONG_POSITIONS_ONLY_ALLOWED | 140 | Разрешена только покупка |
ERR_TOO_MANY_REQUESTS | 141 | Слишком много запросов |
ERR_TRADE_MODIFY_DENIED | 145 | Модификация запрещена, так как ордер слишком близок к рынку |
ERR_TRADE_CONTEXT_BUSY | 146 | Подсистема торговли занята |
ERR_TRADE_EXPIRATION_DENIED | 147 | Использование даты истечения ордера запрещено брокером |
ERR_TRADE_TOO_MANY_ORDERS | 148 | Количество открытых и отложенных ордеров достигло предела, установленного брокером. |
Константа | Значение | Описание |
---|---|---|
ERR_NO_MQLERROR | 4000 | Нет ошибки |
ERR_WRONG_FUNCTION_POINTER | 4001 | Неправильный указатель функции |
ERR_ARRAY_INDEX_OUT_OF_RANGE | 4002 | Индекс массива — вне диапазона |
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK | 4003 | Нет памяти для стека функций |
ERR_RECURSIVE_STACK_OVERFLOW | 4004 | Переполнение стека после рекурсивного вызова |
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER | 4005 | На стеке нет памяти для передачи параметров |
ERR_NO_MEMORY_FOR_PARAMETER_STRING | 4006 | Нет памяти для строкового параметра |
ERR_NO_MEMORY_FOR_TEMP_STRING | 4007 | Нет памяти для временной строки |
ERR_NOT_INITIALIZED_STRING | 4008 | Неинициализированная строка |
ERR_NOT_INITIALIZED_ARRAYSTRING | 4009 | Неинициализированная строка в массиве |
ERR_NO_MEMORY_FOR_ARRAYSTRING | 4010 | Нет памяти для строкового массива |
ERR_TOO_LONG_STRING | 4011 | Слишком длинная строка |
ERR_REMAINDER_FROM_ZERO_DIVIDE | 4012 | Остаток от деления на ноль |
ERR_ZERO_DIVIDE | 4013 | Деление на ноль |
ERR_UNKNOWN_COMMAND | 4014 | Неизвестная команда |
ERR_WRONG_JUMP | 4015 | Неправильный переход |
ERR_NOT_INITIALIZED_ARRAY | 4016 | Неинициализированный массив |
ERR_DLL_CALLS_NOT_ALLOWED | 4017 | Вызовы DLL не разрешены |
ERR_CANNOT_LOAD_LIBRARY | 4018 | Невозможно загрузить библиотеку |
ERR_CANNOT_CALL_FUNCTION | 4019 | Невозможно вызвать функцию |
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED | 4020 | Вызовы внешних библиотечных функций не разрешены |
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING | 4021 | Недостаточно памяти для строки, возвращаемой из функции |
ERR_SYSTEM_BUSY | 4022 | Система занята |
ERR_INVALID_FUNCTION_PARAMETERS_COUNT | 4050 | Неправильное количество параметров функции |
ERR_INVALID_FUNCTION_PARAMETER_VALUE | 4051 | Недопустимое значение параметра функции |
ERR_STRING_FUNCTION_INTERNAL_ERROR | 4052 | Внутренняя ошибка строковой функции |
ERR_SOME_ARRAY_ERROR | 4053 | Ошибка массива |
ERR_INCORRECT_SERIES_ARRAY_USING | 4054 | Неправильное использование массива-таймсерии |
ERR_CUSTOM_INDICATOR_ERROR | 4055 | Ошибка пользовательского индикатора |
ERR_INCOMPATIBLE_ARRAYS | 4056 | Массивы несовместимы |
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR | 4057 | Ошибка обработки глобальныех переменных |
ERR_GLOBAL_VARIABLE_NOT_FOUND | 4058 | Глобальная переменная не обнаружена |
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE | 4059 | Функция не разрешена в тестовом режиме |
ERR_FUNCTION_NOT_CONFIRMED | 4060 | Функция не подтверждена |
ERR_SEND_MAIL_ERROR | 4061 | Ошибка отправки почты |
ERR_STRING_PARAMETER_EXPECTED | 4062 | Ожидается параметр типа string |
ERR_INTEGER_PARAMETER_EXPECTED | 4063 | Ожидается параметр типа integer |
ERR_DOUBLE_PARAMETER_EXPECTED | 4064 | Ожидается параметр типа double |
ERR_ARRAY_AS_PARAMETER_EXPECTED | 4065 | В качестве параметра ожидается массив |
ERR_HISTORY_WILL_UPDATED | 4066 | Запрошенные исторические данные в состоянии обновления |
ERR_TRADE_ERROR | 4067 | Ошибка при выполнении торговой операции |
ERR_END_OF_FILE | 4099 | Конец файла |
ERR_SOME_FILE_ERROR | 4100 | Ошибка при работе с файлом |
ERR_WRONG_FILE_NAME | 4101 | Неправильное имя файла |
ERR_TOO_MANY_OPENED_FILES | 4102 | Слишком много открытых файлов |
ERR_CANNOT_OPEN_FILE | 4103 | Невозможно открыть файл |
ERR_INCOMPATIBLE_ACCESS_TO_FILE | 4104 | Несовместимый режим доступа к файлу |
ERR_NO_ORDER_SELECTED | 4105 | Ни один ордер не выбран |
ERR_UNKNOWN_SYMBOL | 4106 | Неизвестный символ |
ERR_INVALID_PRICE_PARAM | 4107 | Неправильный параметр цены для торговой функции |
ERR_INVALID_TICKET | 4108 | Неверный номер тикета |
ERR_TRADE_NOT_ALLOWED | 4109 | Торговля не разрешена |
ERR_LONGS_NOT_ALLOWED | 4110 | Длинные позиции не разрешены |
ERR_SHORTS_NOT_ALLOWED | 4111 | Короткие позиции не разрешены |
ERR_OBJECT_ALREADY_EXISTS | 4200 | Объект уже существует |
ERR_UNKNOWN_OBJECT_PROPERTY | 4201 | Запрошено неизвестное свойство объекта |
ERR_OBJECT_DOES_NOT_EXIST | 4202 | Объект не существует |
ERR_UNKNOWN_OBJECT_TYPE | 4203 | Неизвестный тип объекта |
ERR_NO_OBJECT_NAME | 4204 | Нет имени объекта |
ERR_OBJECT_COORDINATES_ERROR | 4205 | Ошибка координат объекта |
ERR_NO_SPECIFIED_SUBWINDOW | 4206 | Не найдено указанное подокно |
ERR_SOME_OBJECT_ERROR | 4207 | Ошибка при работе с объектом |
В исполняющей подсистеме клиентского терминала имеется возможность сохранения кода ошибки в случае ее возникновения при выполнении mql-программы. Для каждой исполняемой mql-программы предусмотрена своя собственная специальная переменная last_error. Перед запуском функции OnInit() переменная last_error обнуляется. В случае возникновения патовой ситуации во время вычислений или во время вызова встроенной функции переменная last_error принимает соответствующий код ошибки. Значение, сохраненное в этой переменной, можно получить при помощи функции GetLastError(). При этом переменная last_error обнуляется.
Существует ряд критических ошибок, при возникновении которых выполнение программы немедленно завершается:
Константа | Значение | Описание |
ERR_WRONG_FUNCTION_POINTER | 4001 | При вызове внутренней функции обнаружен неправильный указатель вызываемой функции |
ERR_NO_MEMORY_FOR_CALL_STACK | 4003 | При вызове внутренней функции невозможно перераспределить память для стека вызовов функции |
ERR_RECURSIVE_STACK_OVERFLOW | 4004 | При рекурсивном вызове функции исчерпан стек данных |
ERR_NO_MEMORY_FOR_PARAM_STRING | 4006 | При вызове внутренней функции невозможно распределить память для передачи строки в качестве параметра функции |
ERR_NO_MEMORY_FOR_TEMP_STRING | 4007 | Невозможно распределить временный буфер для операций со строками |
ERR_NO_MEMORY_FOR_ARRAYSTRING | 4010 | При присвоении невозможно перераспределить память для строки в массиве |
ERR_TOO_LONG_STRING | 4011 | При присвоении слишком длинная результатная строка для помещения в служебный буфер (невозможно перераспределить память для служебного буфера) |
ERR_REMAINDER_FROM_ZERO_DIVIDE | 4012 | Деление на 0 при взятии остатка от деления |
ERR_ZERO_DIVIDE | 4013 | Деление на 0 |
ERR_UNKNOWN_COMMAND | 4014 | Неизвестная инструкция |
Если выполнение программы было прервано из-за критической ошибки, то при следующем запуске функции OnTick или функции OnDeinit можно прочитать код этой ошибки, используя функцию GetLastError(). Перед выполнением функций OnTick и OnDeinit переменная last_error не сбрасывается.
Существует ряд критических ошибок, связанных с вызовом импортируемых функций, при возникновении которых выполнение эксперта или индикатора немедленно прерывается и функция OnTick не запускается до тех пор, пока не будет произведена переинициализация эксперта или индикатора.
Константа | Значение | Описание |
ERR_CANNOT_LOAD_LIBRARY | 4018 | При вызове импортируемой функции произошла ошибка загрузки dll или ex4-библиотеки |
ERR_CANNOT_CALL_FUNCTION | 4019 | При вызове импортируемой из функции выяснилось, что dll или ex4-библиотека не содержит эту функцию |
ERR_DLL_CALLS_NOT_ALLOWED | 4017 | При вызове импортируемой из dll функции выяснилось, что установлен запрет на вызовы из dll |
ERR_EXTERNAL_CALLS_NOT_ALLOWED | 4020 | При вызове импортируемой из ex4-библиотеки выяснилось, что установлен запрет на вызовы из ex4 |
ERR_FUNCTION_NOT_CONFIRMED | 4060 | Не подтвержден вызов импортируемой из dll функции. Если нажата кнопка «Нет», то выполнение программы не прерывается. Если нажата кнопка «Отмена», то выполнение программы немедленно прерывается |
Остальные ошибки не прерывают работу программы.
Константа | Значение | Описание |
ERR_ARRAY_INDEX_OUT_OF_RANGE | 4002 | Обращение к элементу массива, номер которого находится за пределами массива |
ERR_NOT_INITIALIZED_STRING | 4008 | Неинициализированная строка; строке, участвующей в каком-либо выражении, не присвоено никакого значения |
ERR_NOT_INITIALIZED_ARRAYSTRING | 4009 | Неинициализированная строка в массиве строк; строке, участвующей в каком-либо выражении, не присвоено никакого значения |
ERR_NO_MEMORY_FOR_RETURNED_STR | 4021 | Невозможно перераспределить память для строки, возвращаемой из функции |
Никогда не генерируется код ошибки ERR_NO_MQLERROR (4000).
Имеется ряд ошибок, которые случаются только в результате сбоя. При постоянном проявлении какой-либо из нижеуказанных ошибок следует связаться с разработчиками.
Константа | Значение | Описание |
ERR_WRONG_FUNCTION_POINTER | 4001 | При вызове внутренней функции обнаружен неправильный указатель вызываемой функции |
ERR_UNKNOWN_COMMAND | 4014 | Неизвестная инструкция |
ERR_NOT_INITIALIZED_ARRAY | 4016 | Неинициализированный массив |
ERR_INVALID_FUNCTION_PARAMSCNT | 4050 | Неверное количество параметров, передаваемых во встроенную функцию |
ERR_STRING_FUNCTION_INTERNAL | 4052 | Ошибка при работе со строками |
ERR_TRADE_ERROR | 4067 | Ошибка при выполнении торговой функции |
ERR_SOME_OBJECT_ERROR | 4207 | Ошибка при работе с объектами |
Существует несколько встроенных функций, которые всегда меняют значение переменной last_error.
Функция | Коды ошибок |
AccountFreeMarginCheck | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_UNKNOWN_SYMBOL (4106), ERR_NOT_ENOUGH_MONEY (134) |
OrderSend | ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INVALID_PRICE_PARAM (4107), ERR_UNKNOWN_SYMBOL (4106), ERR_TRADE_NOT_ALLOWED (4109), ERR_LONGS_NOT_ALLOWED (4110), ERR_SHORTS_NOT_ALLOWED (4111), коды от торгового сервера |
OrderClose | ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INVALID_PRICE_PARAM (4107), ERR_INVALID_TICKET (4108), ERR_UNKNOWN_SYMBOL (4106), ERR_TRADE_NOT_ALLOWED (4109), коды от торгового сервера |
OrderCloseBy | ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INVALID_TICKET (4108), ERR_UNKNOWN_SYMBOL (4106), ERR_TRADE_NOT_ALLOWED (4109), коды от торгового сервера |
OrderDelete | ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INVALID_TICKET (4108), ERR_UNKNOWN_SYMBOL (4106), ERR_TRADE_NOT_ALLOWED (4109), коды от торгового сервера |
OrderModify | ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INVALID_PRICE_PARAM (4107), ERR_INVALID_TICKET (4108), ERR_UNKNOWN_SYMBOL (4106), ERR_TRADE_NOT_ALLOWED (4109), коды от торгового сервера |
GetLastError | ERR_NO_ERROR (0) |
Некоторые функции меняют значение переменной last_error только в случае возникновения какой-либо ошибки.
Функция | Коды ошибок |
ArrayBsearch | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayCopy | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INCOMPATIBLE_ARRAYS (4056), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayCopyRates | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INCOMPATIBLE_ARRAYS (4056), ERR_STRING_PARAMETER_EXPECTED (4062), |
ArrayCopySeries | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INCORRECT_SERIESARRAY_USING (4054), ERR_INCOMPATIBLE_ARRAYS (4056), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_HISTORY_WILL_UPDATED (4066), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayDimension | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
ArrayGetAsSeries | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
ArrayInitialize | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayIsSeries | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
ArrayMaximum | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayMinimum | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayRange | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INTEGER_PARAMETER_EXPECTED (4063), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArrayResize | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
ArraySetAsSeries | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
ArraySize | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
ArraySort | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053), ERR_INCORRECT_SERIESARRAY_USING (4054), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileClose | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileDelete | ERR_WRONG_FILE_NAME (4101), ERR_SOME_FILE_ERROR (4100) |
FileFlush | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileIsEnding | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileIsLineEnding | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileOpen | ERR_TOO_MANY_OPENED_FILES (4102), ERR_WRONG_FILE_NAME (4101), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_SOME_FILE_ERROR (4100), ERR_CANNOT_OPEN_FILE (4103) |
FileOpenHistory | ERR_TOO_MANY_OPENED_FILES (4102), ERR_WRONG_FILE_NAME (4101), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_SOME_FILE_ERROR (4100), ERR_CANNOT_OPEN_FILE (4103) |
FileReadArray | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_ARRAY_ERROR (4053), ERR_SOME_FILE_ERROR (4100), ERR_END_OF_FILE (4099) |
FileReadDouble | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_END_OF_FILE (4099) |
FileReadInteger | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_END_OF_FILE (4099) |
FileReadNumber | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100), ERR_END_OF_FILE (4099) |
FileReadString | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100), ERR_TOO_LONG_STRING (4011), ERR_END_OF_FILE (4099) |
FileSeek | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileSize | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileTell | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
FileWrite | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_SOME_FILE_ERROR (4100) |
FileWriteDouble | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100) |
FileWriteInteger | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100) |
FileWriteString | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100), ERR_STRING_PARAMETER_EXPECTED (4062) |
FileWriteArray | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCOMPATIBLE_FILEACCESS (4104), ERR_SOME_FILE_ERROR (4100), |
GlobalVariableCheck | ERR_STRING_PARAMETER_EXPECTED (4062) |
GlobalVariableDel | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_GLOBAL_VARIABLES_PROCESSING (4057) |
GlobalVariableGet | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) |
GlobalVariablesDeleteAll | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_GLOBAL_VARIABLES_PROCESSING (4057) |
GlobalVariableSet | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_GLOBAL_VARIABLES_PROCESSING (4057) |
GlobalVariableSetOnCondition | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) |
iCustom | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
технические индикаторы, функции доступа к таймсериям | ERR_HISTORY_WILL_UPDATED (4066) |
технические индикаторы OnArray | ERR_ARRAY_AS_PARAMETER_EXPECTED (4065), ERR_SOME_ARRAY_ERROR (4053) |
IndicatorBuffers | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
IndicatorDigits | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
IndicatorShortName | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
MarketInfo | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_UNKNOWN_SYMBOL (4106), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
MathArccos | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
MathArcsin | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
MathMod | ERR_ZERO_DIVIDE (4013) |
MathSqrt | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
MessageBox | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_STRING_PARAMETER_EXPECTED (4062) |
ObjectCreate | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_UNKNOWN_OBJECT_TYPE (4203), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_OBJECT_ALREADY_EXISTS (4200), ERR_NO_SPECIFIED_SUBWINDOW (4206) |
ObjectDelete | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202) |
ObjectDescription | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202) |
ObjectFind | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204) |
ObjectGet | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_UNKNOWN_OBJECT_PROPERTY (4201) |
ObjectGetFiboDescription | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_UNKNOWN_OBJECT_TYPE (4203), ERR_UNKNOWN_OBJECT_PROPERTY (4201) |
ObjectGetShiftByValue | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_OBJECT_COORDINATES_ERROR (4205) |
ObjectGetValueByShift | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_OBJECT_COORDINATES_ERROR (4205) |
ObjectMove | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_OBJECT_DOES_NOT_EXIST (4202) |
ObjectName | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_ARRAY_INDEX_OUT_OF_RANGE (4002) |
ObjectSet | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_UNKNOWN_OBJECT_PROPERTY (4201) |
ObjectSetText | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202) |
ObjectSetFiboDescription | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_OBJECT_DOES_NOT_EXIST (4202), ERR_UNKNOWN_OBJECT_TYPE (4203), ERR_UNKNOWN_OBJECT_PROPERTY (4201) |
ObjectType | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NO_OBJECT_NAME (4204), ERR_OBJECT_DOES_NOT_EXIST (4202) |
OrderClosePrice | ERR_NO_ORDER_SELECTED (4105) |
OrderCloseTime | ERR_NO_ORDER_SELECTED (4105) |
OrderComment | ERR_NO_ORDER_SELECTED (4105) |
OrderCommission | ERR_NO_ORDER_SELECTED (4105) |
OrderExpiration | ERR_NO_ORDER_SELECTED (4105) |
OrderLots | ERR_NO_ORDER_SELECTED (4105) |
OrderMagicNumber | ERR_NO_ORDER_SELECTED (4105) |
OrderOpenPrice | ERR_NO_ORDER_SELECTED (4105) |
OrderOpenTime | ERR_NO_ORDER_SELECTED (4105) |
OrderPrint | ERR_NO_ORDER_SELECTED (4105) |
OrderProfit | ERR_NO_ORDER_SELECTED (4105) |
OrderStopLoss | ERR_NO_ORDER_SELECTED (4105) |
OrderSwap | ERR_NO_ORDER_SELECTED (4105) |
OrderSymbol | ERR_NO_ORDER_SELECTED (4105) |
OrderTakeProfit | ERR_NO_ORDER_SELECTED (4105) |
OrderTicket | ERR_NO_ORDER_SELECTED (4105) |
OrderType | ERR_NO_ORDER_SELECTED (4105) |
PlaySound | ERR_WRONG_FILE_NAME (4101) |
SendFTP | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_CUSTOM_INDICATOR_ERROR (4055), ERR_STRING_PARAMETER_EXPECTED (4062) |
SendMail | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_FUNCTION_NOT_CONFIRMED (4060), ERR_SEND_MAIL_ERROR (4061) |
SetIndexArrow | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
SetIndexBuffer | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_INCORRECT_SERIESARRAY_USING (4054), ERR_INCOMPATIBLE_ARRAYS (4056) |
SetIndexDrawBegin | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
SetIndexEmptyValue | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
SetIndexLabel | ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_STRING_PARAMETER_EXPECTED (4062) |
SetIndexShift | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
SetIndexStyle | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
SetLevelValue | ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
Sleep | ERR_CUSTOM_INDICATOR_ERROR (4055) |
StringFind | ERR_STRING_PARAMETER_EXPECTED (4062) |
StringGetChar | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NOT_INITIALIZED_STRING (4008), ERR_ARRAY_INDEX_OUT_OF_RANGE (4002) |
StringLen | ERR_STRING_PARAMETER_EXPECTED (4062) |
StringSetChar | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_INVALID_FUNCTION_PARAMVALUE (4051), ERR_NOT_INITIALIZED_STRING (4008), ERR_TOO_LONG_STRING (4011), ERR_ARRAY_INDEX_OUT_OF_RANGE (4002) |
StringSubstr | ERR_STRING_PARAMETER_EXPECTED (4062), ERR_TOO_LONG_STRING (4011) |
StringTrimLeft | ERR_STRING_PARAMETER_EXPECTED (4062) |
StringTrimRight | ERR_STRING_PARAMETER_EXPECTED (4062) |
WindowIsVisible | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059) |
WindowFind | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NOT_INITIALIZED_STRING (4008) |
WindowHandle | ERR_FUNC_NOT_ALLOWED_IN_TESTING (4059), ERR_STRING_PARAMETER_EXPECTED (4062), ERR_NOT_INITIALIZED_STRING (4008) |
WindowScreenShot | ERR_WRONG_FILE_NAME (4101), ERR_INVALID_FUNCTION_PARAMVALUE (4051) |
Следующие функции не меняют значение переменной last_error ни при каких условиях:
AccountBalance, AccountCompany, AccountCredit, AccountCurrency, AccountEquity, AccountFreeMargin, AccountLeverage, AccountMargin, AccountName, AccountNumber, AccountProfit, AccountServer, Alert, CharToStr, Comment, Day, DayOfWeek, DayOfYear, DoubleToStr, GetTickCount, HideTestIndicators, Hour, IndicatorCounted, IsConnected, IsDemo, IsDllsAllowed, IsExpertEnabled, IsLibrariesAllowed, IsOptimization, IsStopped, IsTesting, IsTradeAllowed, IsTradeContextBusy, IsVisualMode, MathAbs, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathMax, MathMin, MathPow, MathRand, MathRound, MathSin, MathSrand, MathTan, Minute, Month, NormalizeDouble, ObjectsDeleteAll, ObjectsTotal, OrderSelect, OrdersHistoryTotal, Period, Print, RefreshRates, Seconds, SetLevelStyle, StringConcatenate, StrToTime, StrToDouble, Symbol, TerminalCompany, TerminalName, TerminalPath, TimeCurrent, TimeDay, TimeDayOfWeek, TimeDayOfYear, TimeHour, TimeLocal, TimeMinute, TimeMonth, TimeSeconds, TimeToStr, TimeYear, UninitializeReason, WindowBarsPerChart, WindowFirstVisibleBar, WindowPriceOnDropped, WindowTimeOnDropped, WindowsTotal, WindowOnDropped, WindowRedraw, WindowXOnDropped, WindowYOnDropped, Year.
The GetLastError() function returns the last error code. The Error code constants are defined in the stderror.mqh file.
To print text messages use the ErrorDescription() function defined in the stdlib.mqh file.
Constant
Value
Description