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 | Ошибка при работе с объектом |
- Коды возврата торгового сервера
- Предупреждения компилятора
- Ошибки компиляции
- Ошибки времени выполнения
Справка MQL4 одним файлом:
- Русский
- Английский
Коды ошибок и предупреждений
Раздел содержит следующие описания:
- Коды возврата торгового сервера – анализ результатов отправки торгового запроса, отправленного функцией OrderSend();
- Предупреждения компилятора – коды предупредительных сообщений, выводимые при компиляции (не являются ошибками);
- Ошибки компиляции – коды сообщений об ошибке при неудачной попытке компиляции;
- Ошибки времени выполнения – коды ошибок при выполнении mql4-программы, которые можно получить при помощи функции GetLastError().
Структура для получения текущих ценКоды возврата торгового сервера
При работе торгового терминала MetaTrader 4 возникают различные ошибки при обмене информацией с торговым сервером, который в ответ на ошибочные запросы отсылает программе MetaTrader 4 не описание ошибки, а цифровой код ошибки — специальную комбинацию цифр, которая отображается во вкладках Эксперты
и Журнал
(примеры этих вкладок и описание типичной ситуации при возникновении ошибок можно найти в статье «Обзор торгового терминала MetaTrader 4»). Не все торговые терминалы MetaTrader 4 различных дилинговых центров дают расшифровку цифрового кода, а если она и есть, то — на английском языке. Чтобы понять, почему программа МетаТрейдер 4 работает неправильно, полезно знать расшифровку цифрового кода — какой комбинации цифр соответствует определенное описание ошибки. В некоторых случаях эта информация может сильно облегчить «жизнь» трейдеру и помочь быстрее справиться с возникшей проблемой.
Итак, предлагаем Вашему вниманию расшифровку кодов ошибок, которые можно встретить при работе с торговым терминалом MetaTrader 4:
Коды ошибок, возвращаемые торговым сервером терминалу MetaTrader 4.
- Error: 0 — Нет ошибки.
- Error: 1 — Нет ошибки, но результат неизвестен.
- Error: 2 — Общая ошибка.
- Error: 3 — Неправильные параметры.
- Error: 4 — Торговый сервер занят.
- Error: 5 — Старая версия клиентского терминала.
- Error: 6 — Нет связи с торговым сервером.
- Error: 7 — Недостаточно прав.
- Error: 8 — Слишком частые запросы.
- Error: 9 — Недопустимая операция, нарушающая функционирование сервера.
- Error: 64 — Счёт заблокирован.
- Error: 65 — Неправильный номер счета.
- Error: 128 — Истек срок ожидания совершения сделки.
- Error: 129 — Неправильная цена.
- Error: 130 — Неправильные стопы.
- Error: 131 — Неправильный объём.
- Error: 132 — Рынок закрыт.
- Error: 133 — Торговля запрещена.
- Error: 134 — Недостаточно денег для совершения операции.
- Error: 135 — Цена изменилась.
- Error: 136 — Нет цен.
- Error: 137 — Брокер занят.
- Error: 138 — Новые цены.
- Error: 139 — Ордер заблокирован и уже обрабатывается.
- Error: 140 — Разрешена только покупка.
- Error: 145 — Модификация запрещена, так как ордер слишком близок к рынку.
- Error: 146 — Подсистема торговли занята.
- Error: 147 — Использование даты истечения ордера запрещено брокером.
- Error: 148 — Количество открытых и отложенных ордеров достигло предела, установленного брокером.
- Error: 149 — Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.
- Error: 150 — Попытка закрыть позицию по инструменту в противоречии с правилом FIFO.
Коды ошибок выполнения MQL4-программы (советника):
- Error: 4000 — Нет ошибки.
- Error: 4001 — Неправильный указатель функции.
- Error: 4002 — Индекс массива — вне диапазона.
- Error: 4003 — Нет памяти для стека функций.
- Error: 4004 — Переполнение стека после рекурсивного вызова.
- Error: 4005 — На стеке нет памяти для передачи параметров.
- Error: 4006 — Нет памяти для строкового параметра.
- Error: 4007 — Нет памяти для временной строки.
- Error: 4008 — Неинициализированная строка.
- Error: 4009 — Неинициализированная строка в массиве.
- Error: 4010 — Нет памяти для строкового массива.
- Error: 4011 — Слишком длинная строка.
- Error: 4012 — Остаток от деления на ноль.
- Error: 4013 — Деление на ноль.
- Error: 4014 — Неизвестная команда.
- Error: 4015 — Неправильный переход.
- Error: 4016 — Неинициализированный массив.
- Error: 4017 — Вызовы DLL не разрешены.
- Error: 4018 — Невозможно загрузить библиотеку.
- Error: 4019 — Невозможно вызвать функцию.
- Error: 4020 — Вызовы внешних библиотечных функций не разрешены.
- Error: 4021 — Недостаточно памяти для строки, возвращаемой из функции.
- Error: 4022 — Система занята.
- Error: 4050 — Неправильное количество параметров функции.
- Error: 4051 — Недопустимое значение параметра функции.
- Error: 4052 — Внутренняя ошибка строковой функции.
- Error: 4053 — Ошибка массива.
- Error: 4054 — Неправильное использование массива-таймсерии.
- Error: 4055 — Ошибка пользовательского индикатора.
- Error: 4056 — Массивы несовместимы.
- Error: 4057 — Ошибка обработки глобальныех переменных.
- Error: 4058 — Глобальная переменная не обнаружена.
- Error: 4059 — Функция не разрешена в тестовом режиме.
- Error: 4060 — Функция не разрешена.
- Error: 4061 — Ошибка отправки почты.
- Error: 4062 — Ожидается параметр типа string.
- Error: 4063 — Ожидается параметр типа integer.
- Error: 4064 — Ожидается параметр типа double.
- Error: 4065 — В качестве параметра ожидается массив.
- Error: 4066 — Запрошенные исторические данные в состоянии обновления.
- Error: 4067 — Ошибка при выполнении торговой операции.
- Error: 4099 — Конец файла.
- Error: 4100 — Ошибка при работе с файлом.
- Error: 4101 — Неправильное имя файла.
- Error: 4102 — Слишком много открытых файлов.
- Error: 4103 — Невозможно открыть файл.
- Error: 4104 — Несовместимый режим доступа к файлу.
- Error: 4105 — Ни один ордер не выбран.
- Error: 4106 — Неизвестный символ.
- Error: 4107 — Неправильный параметр цены для торговой функции.
- Error: 4108 — Неверный номер тикета.
- Error: 4109 — Торговля не разрешена. Необходимо включить опцию
Разрешить советнику торговать
в свойствах эксперта. - Error: 4110 — Длинные позиции не разрешены — необходимо проверить свойства эксперта.
- Error: 4111 — Короткие позиции не разрешены — необходимо проверить свойства эксперта.
- Error: 4200 — Объект уже существует.
- Error: 4201 — Запрошено неизвестное свойство объекта.
- Error: 4202 — Объект не существует.
- Error: 4203 — Неизвестный тип объекта.
- Error: 4204 — Нет имени объекта.
- Error: 4205 — Ошибка координат объекта.
- Error: 4206 — Не найдено указанное подокно.
- Error: 4207 — Ошибка при работе с объектом.
0
ERR_NO_ERROR
Нет ошибки
1
ERR_NO_RESULT
Нет ошибки, но результат неизвестен
2
ERR_COMMON_ERROR
Общая ошибка
3
ERR_INVALID_TRADE_PARAMETERS
Неправильные параметры
4
ERR_SERVER_BUSY
Торговый сервер занят
5
ERR_OLD_VERSION
Старая версия клиентского терминала
6
ERR_NO_CONNECTION
Нет связи с торговым сервером
7
ERR_NOT_ENOUGH_RIGHTS
Недостаточно прав
8
ERR_TOO_FREQUENT_REQUESTS
Слишком частые запросы
9
ERR_MALFUNCTIONAL_TRADE
Недопустимая операция, нарушающая функционирование сервера
64
ERR_ACCOUNT_DISABLED
Счет заблокирован
65
ERR_INVALID_ACCOUNT
Неправильный номер счета
128
ERR_TRADE_TIMEOUT
Истек срок ожидания совершения сделки
129
ERR_INVALID_PRICE
Неправильная цена
130
ERR_INVALID_STOPS
Неправильные стопы
131
ERR_INVALID_TRADE_VOLUME
Неправильный объем
132
ERR_MARKET_CLOSED
Рынок закрыт
133
ERR_TRADE_DISABLED
Торговля запрещена
134
ERR_NOT_ENOUGH_MONEY
Недостаточно денег для совершения операции
135
ERR_PRICE_CHANGED
Цена изменилась
136
ERR_OFF_QUOTES
Нет цен
137
ERR_BROKER_BUSY
Брокер занят
138
ERR_REQUOTE
Новые цены
139
ERR_ORDER_LOCKED
Ордер заблокирован и уже обрабатывается
140
ERR_LONG_POSITIONS_ONLY_ALLOWED
Разрешена только покупка
141
ERR_TOO_MANY_REQUESTS
Слишком много запросов
145
ERR_TRADE_MODIFY_DENIED
Модификация запрещена, так как ордер слишком близок к рынку
146
ERR_TRADE_CONTEXT_BUSY
Подсистема торговли занята
147
ERR_TRADE_EXPIRATION_DENIED
Использование даты истечения ордера запрещено брокером
148
ERR_TRADE_TOO_MANY_ORDERS
Количество открытых и отложенных ордеров достигло предела, установленного брокером
149
ERR_TRADE_HEDGE_PROHIBITED
Попытка открыть противоположный ордер в случае, если хеджирование запрещено
150
ERR_TRADE_PROHIBITED_BY_FIFO
Попытка закрыть позицию по инструменту в противоречии с правилом FIFO
4000
ERR_NO_MQLERROR
Нет ошибки
4001
ERR_WRONG_FUNCTION_POINTER
Неправильный указатель функции
4002
ERR_ARRAY_INDEX_OUT_OF_RANGE
Индекс массива — вне диапазона
4003
ERR_NO_MEMORY_FOR_CALL_STACK
Нет памяти для стека функций
4004
ERR_RECURSIVE_STACK_OVERFLOW
Переполнение стека после рекурсивного вызова
4005
ERR_NOT_ENOUGH_STACK_FOR_PARAM
На стеке нет памяти для передачи параметров
4006
ERR_NO_MEMORY_FOR_PARAM_STRING
Нет памяти для строкового параметра
4007
ERR_NO_MEMORY_FOR_TEMP_STRING
Нет памяти для временной строки
4008
ERR_NOT_INITIALIZED_STRING
Неинициализированная строка
4009
ERR_NOT_INITIALIZED_ARRAYSTRING
Неинициализированная строка в массиве
4010
ERR_NO_MEMORY_FOR_ARRAYSTRING
Нет памяти для строкового массива
4011
ERR_TOO_LONG_STRING
Слишком длинная строка
4012
ERR_REMAINDER_FROM_ZERO_DIVIDE
Остаток от деления на ноль
4013
ERR_ZERO_DIVIDE
Деление на ноль
4014
ERR_UNKNOWN_COMMAND
Неизвестная команда
4015
ERR_WRONG_JUMP
Неправильный переход
4016
ERR_NOT_INITIALIZED_ARRAY
Неинициализированный массив
4017
ERR_DLL_CALLS_NOT_ALLOWED
Вызовы DLL не разрешены
4018
ERR_CANNOT_LOAD_LIBRARY
Невозможно загрузить библиотеку
4019
ERR_CANNOT_CALL_FUNCTION
Невозможно вызвать функцию
4020
ERR_EXTERNAL_CALLS_NOT_ALLOWED
Вызовы внешних библиотечных функций не разрешены
4021
ERR_NO_MEMORY_FOR_RETURNED_STR
Недостаточно памяти для строки, возвращаемой из функции
4022
ERR_SYSTEM_BUSY
Система занята
4023
ERR_DLLFUNC_CRITICALERROR
Критическая ошибка вызова DLL-функции
4024
ERR_INTERNAL_ERROR
Внутренняя ошибка
4025
ERR_OUT_OF_MEMORY
Нет памяти
4026
ERR_INVALID_POINTER
Неверный указатель
4027
ERR_FORMAT_TOO_MANY_FORMATTERS
Слишком много параметров форматирования строки
4028
ERR_FORMAT_TOO_MANY_PARAMETERS
Число параметров превышает число параметров форматирования строки
4029
ERR_ARRAY_INVALID
Неверный массив
4030
ERR_CHART_NOREPLY
График не отвечает
4050
ERR_INVALID_FUNCTION_PARAMSCNT
Неправильное количество параметров функции
4051
ERR_INVALID_FUNCTION_PARAMVALUE
Недопустимое значение параметра функции
4052
ERR_STRING_FUNCTION_INTERNAL
Внутренняя ошибка строковой функции
4053
ERR_SOME_ARRAY_ERROR
Ошибка массива
4054
ERR_INCORRECT_SERIESARRAY_USING
Неправильное использование массива-таймсерии
4055
ERR_CUSTOM_INDICATOR_ERROR
Ошибка пользовательского индикатора
4056
ERR_INCOMPATIBLE_ARRAYS
Массивы несовместимы
4057
ERR_GLOBAL_VARIABLES_PROCESSING
Ошибка обработки глобальных переменных
4058
ERR_GLOBAL_VARIABLE_NOT_FOUND
Глобальная переменная не обнаружена
4059
ERR_FUNC_NOT_ALLOWED_IN_TESTING
Функция не разрешена в тестовом режиме
4060
ERR_FUNCTION_NOT_CONFIRMED
Функция не разрешена
4061
ERR_SEND_MAIL_ERROR
Ошибка отправки почты
4062
ERR_STRING_PARAMETER_EXPECTED
Ожидается параметр типа string
4063
ERR_INTEGER_PARAMETER_EXPECTED
Ожидается параметр типа integer
4064
ERR_DOUBLE_PARAMETER_EXPECTED
Ожидается параметр типа double
4065
ERR_ARRAY_AS_PARAMETER_EXPECTED
В качестве параметра ожидается массив
4066
ERR_HISTORY_WILL_UPDATED
Запрошенные исторические данные в состоянии обновления
4067
ERR_TRADE_ERROR
Ошибка при выполнении торговой операции
4068
ERR_RESOURCE_NOT_FOUND
Ресурс не найден
4069
ERR_RESOURCE_NOT_SUPPORTED
Ресурс не поддерживается
4070
ERR_RESOURCE_DUPLICATED
Дубликат ресурса
4071
ERR_INDICATOR_CANNOT_INIT
Ошибка инициализации пользовательского индикатора
4072
ERR_INDICATOR_CANNOT_LOAD
Ошибка загрузки пользовательского индикатора
4073
ERR_NO_HISTORY_DATA
Нет исторических данных
4074
ERR_NO_MEMORY_FOR_HISTORY
Не хватает памяти для исторических данных
4075
ERR_NO_MEMORY_FOR_INDICATOR
Не хватает памяти для расчёта индикатора
4099
ERR_END_OF_FILE
Конец файла
4100
ERR_SOME_FILE_ERROR
Ошибка при работе с файлом
4101
ERR_WRONG_FILE_NAME
Неправильное имя файла
4102
ERR_TOO_MANY_OPENED_FILES
Слишком много открытых файлов
4103
ERR_CANNOT_OPEN_FILE
Невозможно открыть файл
4104
ERR_INCOMPATIBLE_FILEACCESS
Несовместимый режим доступа к файлу
4105
ERR_NO_ORDER_SELECTED
Ни один ордер не выбран
4106
ERR_UNKNOWN_SYMBOL
Неизвестный символ
4107
ERR_INVALID_PRICE_PARAM
Неправильный параметр цены для торговой функции
4108
ERR_INVALID_TICKET
Неверный номер тикета
4109
ERR_TRADE_NOT_ALLOWED
Торговля не разрешена. Необходимо включить опцию «Разрешить советнику торговать» в свойствах эксперта
4110
ERR_LONGS_NOT_ALLOWED
Ордера на покупку не разрешены. Необходимо проверить свойства эксперта
4111
ERR_SHORTS_NOT_ALLOWED
Ордера на продажу не разрешены. Необходимо проверить свойства эксперта
4112
ERR_TRADE_EXPERT_DISABLED_BY_SERVER
Автоматическая торговля с помощью экспертов/скриптов запрещена на стороне сервера
4200
ERR_OBJECT_ALREADY_EXISTS
Объект уже существует
4201
ERR_UNKNOWN_OBJECT_PROPERTY
Запрошено неизвестное свойство объекта
4202
ERR_OBJECT_DOES_NOT_EXIST
Объект не существует
4203
ERR_UNKNOWN_OBJECT_TYPE
Неизвестный тип объекта
4204
ERR_NO_OBJECT_NAME
Нет имени объекта
4205
ERR_OBJECT_COORDINATES_ERROR
Ошибка координат объекта
4206
ERR_NO_SPECIFIED_SUBWINDOW
Не найдено указанное подокно
4207
ERR_SOME_OBJECT_ERROR
Ошибка при работе с объектом
4210
ERR_CHART_PROP_INVALID
Неизвестное свойство графика
4211
ERR_CHART_NOT_FOUND
График не найден
4212
ERR_CHARTWINDOW_NOT_FOUND
Не найдено подокно графика
4213
ERR_CHARTINDICATOR_NOT_FOUND
Индикатор не найден
4220
ERR_SYMBOL_SELECT
Ошибка выбора инструмента
4250
ERR_NOTIFICATION_ERROR
Ошибка отправки push-уведомления
4251
ERR_NOTIFICATION_PARAMETER
Ошибка параметров push-уведомления
4252
ERR_NOTIFICATION_SETTINGS
Уведомления запрещены
4253
ERR_NOTIFICATION_TOO_FREQUENT
Слишком частые запросы отсылки push-уведомлений
4260
ERR_FTP_NOSERVER
Не указан FTP сервер
4261
ERR_FTP_NOLOGIN
Не указан FTP логин
4262
ERR_FTP_CONNECT_FAILED
Ошибка при подключении к FTP серверу
4263
ERR_FTP_CLOSED
Подключение к FTP серверу закрыто
4264
ERR_FTP_CHANGEDIR
На FTP сервере не найдена директория для выгрузки файла
4265
ERR_FTP_FILE_ERROR
Не найден файл в директории MQL4Files для отправки на FTP сервер
4266
ERR_FTP_ERROR
Ошибка при передаче файла на FTP сервер
5001
ERR_FILE_TOO_MANY_OPENED
Слишком много открытых файлов
5002
ERR_FILE_WRONG_FILENAME
Неверное имя файла
5003
ERR_FILE_TOO_LONG_FILENAME
Слишком длинное имя файла
5004
ERR_FILE_CANNOT_OPEN
Ошибка открытия файла
5005
ERR_FILE_BUFFER_ALLOCATION_ERROR
Ошибка размещения буфера текстового файла
5006
ERR_FILE_CANNOT_DELETE
Ошибка удаления файла
5007
ERR_FILE_INVALID_HANDLE
Неверный хендл файла (файл закрыт или не был открыт)
5008
ERR_FILE_WRONG_HANDLE
Неверный хендл файла (индекс хендла отсутствует в таблице)
5009
ERR_FILE_NOT_TOWRITE
Файл должен быть открыт с флагом FILE_WRITE
5010
ERR_FILE_NOT_TOREAD
Файл должен быть открыт с флагом FILE_READ
5011
ERR_FILE_NOT_BIN
Файл должен быть открыт с флагом FILE_BIN
5012
ERR_FILE_NOT_TXT
Файл должен быть открыт с флагом FILE_TXT
5013
ERR_FILE_NOT_TXTORCSV
Файл должен быть открыт с флагом FILE_TXT или FILE_CSV
5014
ERR_FILE_NOT_CSV
Файл должен быть открыт с флагом FILE_CSV
5015
ERR_FILE_READ_ERROR
Ошибка чтения файла
5016
ERR_FILE_WRITE_ERROR
Ошибка записи файла
5017
ERR_FILE_BIN_STRINGSIZE
Размер строки должен быть указан для двоичных файлов
5018
ERR_FILE_INCOMPATIBLE
Неверный тип файла (для строковых массивов-TXT, для всех других-BIN)
5019
ERR_FILE_IS_DIRECTORY
Файл является директорией
5020
ERR_FILE_NOT_EXIST
Файл не существует
5021
ERR_FILE_CANNOT_REWRITE
Файл не может быть перезаписан
5022
ERR_FILE_WRONG_DIRECTORYNAME
Неверное имя директории
5023
ERR_FILE_DIRECTORY_NOT_EXIST
Директория не существует
5024
ERR_FILE_NOT_DIRECTORY
Указанный файл не является директорией
5025
ERR_FILE_CANNOT_DELETE_DIRECTORY
Ошибка удаления директории
5026
ERR_FILE_CANNOT_CLEAN_DIRECTORY
Ошибка очистки директории
5027
ERR_FILE_ARRAYRESIZE_ERROR
Ошибка изменения размера массива
5028
ERR_FILE_STRINGRESIZE_ERROR
Ошибка изменения размера строки
5029
ERR_FILE_STRUCT_WITH_OBJECTS
Структура содержит строки или динамические массивы
5200
ERR_WEBREQUEST_INVALID_ADDRESS
URL не прошел проверку
5201
ERR_WEBREQUEST_CONNECT_FAILED
Не удалось подключиться к указанному URL
5202
ERR_WEBREQUEST_TIMEOUT
Превышен таймаут получения данных
5203
ERR_WEBREQUEST_REQUEST_FAILED
Ошибка в результате выполнения HTTP запроса
Пользовательские ошибки
65536
ERR_USER_ERROR_FIRST
С этого кода начинаются ошибки, задаваемые пользователем
GetLastError() – функция, возвращающая код последней ошибки, которая хранится в предопределенной переменной _LastError. Значение этой переменной можно сбросить в ноль функцией ResetLastError().
0 |
ERR_NO_ERROR |
Нет ошибки |
1 |
ERR_NO_RESULT |
Нет ошибки, но результат неизвестен |
2 |
ERR_COMMON_ERROR |
Общая ошибка |
3 |
ERR_INVALID_TRADE_PARAMETERS |
Неправильные параметры |
4 |
ERR_SERVER_BUSY |
Торговый сервер занят |
5 |
ERR_OLD_VERSION |
Старая версия клиентского терминала |
6 |
ERR_NO_CONNECTION |
Нет связи с торговым сервером |
7 |
ERR_NOT_ENOUGH_RIGHTS |
Недостаточно прав |
8 |
ERR_TOO_FREQUENT_REQUESTS |
Слишком частые запросы |
9 |
ERR_MALFUNCTIONAL_TRADE |
Недопустимая операция, нарушающая функционирование сервера |
64 |
ERR_ACCOUNT_DISABLED |
Счет заблокирован |
65 |
ERR_INVALID_ACCOUNT |
Неправильный номер счета |
128 |
ERR_TRADE_TIMEOUT |
Истек срок ожидания совершения сделки |
129 |
ERR_INVALID_PRICE |
Неправильная цена |
130 |
ERR_INVALID_STOPS |
Неправильные стопы |
131 |
ERR_INVALID_TRADE_VOLUME |
Неправильный объем |
132 |
ERR_MARKET_CLOSED |
Рынок закрыт |
133 |
ERR_TRADE_DISABLED |
Торговля запрещена |
134 |
ERR_NOT_ENOUGH_MONEY |
Недостаточно денег для совершения операции |
135 |
ERR_PRICE_CHANGED |
Цена изменилась |
136 |
ERR_OFF_QUOTES |
Нет цен |
137 |
ERR_BROKER_BUSY |
Брокер занят |
138 |
ERR_REQUOTE |
Новые цены |
139 |
ERR_ORDER_LOCKED |
Ордер заблокирован и уже обрабатывается |
140 |
ERR_LONG_POSITIONS_ONLY_ALLOWED |
Разрешена только покупка |
141 |
ERR_TOO_MANY_REQUESTS |
Слишком много запросов |
145 |
ERR_TRADE_MODIFY_DENIED |
Модификация запрещена, так как ордер слишком близок к рынку |
146 |
ERR_TRADE_CONTEXT_BUSY |
Подсистема торговли занята |
147 |
ERR_TRADE_EXPIRATION_DENIED |
Использование даты истечения ордера запрещено брокером |
148 |
ERR_TRADE_TOO_MANY_ORDERS |
Количество открытых и отложенных ордеров достигло предела, установленного брокером |
149 |
ERR_TRADE_HEDGE_PROHIBITED |
Попытка открыть противоположный ордер в случае, если хеджирование запрещено |
150 |
ERR_TRADE_PROHIBITED_BY_FIFO |
Попытка закрыть позицию по инструменту в противоречии с правилом FIFO |
4000 |
ERR_NO_MQLERROR |
Нет ошибки |
4001 |
ERR_WRONG_FUNCTION_POINTER |
Неправильный указатель функции |
4002 |
ERR_ARRAY_INDEX_OUT_OF_RANGE |
Индекс массива — вне диапазона |
4003 |
ERR_NO_MEMORY_FOR_CALL_STACK |
Нет памяти для стека функций |
4004 |
ERR_RECURSIVE_STACK_OVERFLOW |
Переполнение стека после рекурсивного вызова |
4005 |
ERR_NOT_ENOUGH_STACK_FOR_PARAM |
На стеке нет памяти для передачи параметров |
4006 |
ERR_NO_MEMORY_FOR_PARAM_STRING |
Нет памяти для строкового параметра |
4007 |
ERR_NO_MEMORY_FOR_TEMP_STRING |
Нет памяти для временной строки |
4008 |
ERR_NOT_INITIALIZED_STRING |
Неинициализированная строка |
4009 |
ERR_NOT_INITIALIZED_ARRAYSTRING |
Неинициализированная строка в массиве |
4010 |
ERR_NO_MEMORY_FOR_ARRAYSTRING |
Нет памяти для строкового массива |
4011 |
ERR_TOO_LONG_STRING |
Слишком длинная строка |
4012 |
ERR_REMAINDER_FROM_ZERO_DIVIDE |
Остаток от деления на ноль |
4013 |
ERR_ZERO_DIVIDE |
Деление на ноль |
4014 |
ERR_UNKNOWN_COMMAND |
Неизвестная команда |
4015 |
ERR_WRONG_JUMP |
Неправильный переход |
4016 |
ERR_NOT_INITIALIZED_ARRAY |
Неинициализированный массив |
4017 |
ERR_DLL_CALLS_NOT_ALLOWED |
Вызовы DLL не разрешены |
4018 |
ERR_CANNOT_LOAD_LIBRARY |
Невозможно загрузить библиотеку |
4019 |
ERR_CANNOT_CALL_FUNCTION |
Невозможно вызвать функцию |
4020 |
ERR_EXTERNAL_CALLS_NOT_ALLOWED |
Вызовы внешних библиотечных функций не разрешены |
4021 |
ERR_NO_MEMORY_FOR_RETURNED_STR |
Недостаточно памяти для строки, возвращаемой из функции |
4022 |
ERR_SYSTEM_BUSY |
Система занята |
4023 |
ERR_DLLFUNC_CRITICALERROR |
Критическая ошибка вызова DLL-функции |
4024 |
ERR_INTERNAL_ERROR |
Внутренняя ошибка |
4025 |
ERR_OUT_OF_MEMORY |
Нет памяти |
4026 |
ERR_INVALID_POINTER |
Неверный указатель |
4027 |
ERR_FORMAT_TOO_MANY_FORMATTERS |
Слишком много параметров форматирования строки |
4028 |
ERR_FORMAT_TOO_MANY_PARAMETERS |
Число параметров превышает число параметров форматирования строки |
4029 |
ERR_ARRAY_INVALID |
Неверный массив |
4030 |
ERR_CHART_NOREPLY |
График не отвечает |
4050 |
ERR_INVALID_FUNCTION_PARAMSCNT |
Неправильное количество параметров функции |
4051 |
ERR_INVALID_FUNCTION_PARAMVALUE |
Недопустимое значение параметра функции |
4052 |
ERR_STRING_FUNCTION_INTERNAL |
Внутренняя ошибка строковой функции |
4053 |
ERR_SOME_ARRAY_ERROR |
Ошибка массива |
4054 |
ERR_INCORRECT_SERIESARRAY_USING |
Неправильное использование массива-таймсерии |
4055 |
ERR_CUSTOM_INDICATOR_ERROR |
Ошибка пользовательского индикатора |
4056 |
ERR_INCOMPATIBLE_ARRAYS |
Массивы несовместимы |
4057 |
ERR_GLOBAL_VARIABLES_PROCESSING |
Ошибка обработки глобальных переменных |
4058 |
ERR_GLOBAL_VARIABLE_NOT_FOUND |
Глобальная переменная не обнаружена |
4059 |
ERR_FUNC_NOT_ALLOWED_IN_TESTING |
Функция не разрешена в тестовом режиме |
4060 |
ERR_FUNCTION_NOT_CONFIRMED |
Функция не разрешена |
4061 |
ERR_SEND_MAIL_ERROR |
Ошибка отправки почты |
4062 |
ERR_STRING_PARAMETER_EXPECTED |
Ожидается параметр типа string |
4063 |
ERR_INTEGER_PARAMETER_EXPECTED |
Ожидается параметр типа integer |
4064 |
ERR_DOUBLE_PARAMETER_EXPECTED |
Ожидается параметр типа double |
4065 |
ERR_ARRAY_AS_PARAMETER_EXPECTED |
В качестве параметра ожидается массив |
4066 |
ERR_HISTORY_WILL_UPDATED |
Запрошенные исторические данные в состоянии обновления |
4067 |
ERR_TRADE_ERROR |
Ошибка при выполнении торговой операции |
4068 |
ERR_RESOURCE_NOT_FOUND |
Ресурс не найден |
4069 |
ERR_RESOURCE_NOT_SUPPORTED |
Ресурс не поддерживается |
4070 |
ERR_RESOURCE_DUPLICATED |
Дубликат ресурса |
4071 |
ERR_INDICATOR_CANNOT_INIT |
Ошибка инициализации пользовательского индикатора |
4072 |
ERR_INDICATOR_CANNOT_LOAD |
Ошибка загрузки пользовательского индикатора |
4073 |
ERR_NO_HISTORY_DATA |
Нет исторических данных |
4074 |
ERR_NO_MEMORY_FOR_HISTORY |
Не хватает памяти для исторических данных |
4075 |
ERR_NO_MEMORY_FOR_INDICATOR |
Не хватает памяти для расчёта индикатора |
4099 |
ERR_END_OF_FILE |
Конец файла |
4100 |
ERR_SOME_FILE_ERROR |
Ошибка при работе с файлом |
4101 |
ERR_WRONG_FILE_NAME |
Неправильное имя файла |
4102 |
ERR_TOO_MANY_OPENED_FILES |
Слишком много открытых файлов |
4103 |
ERR_CANNOT_OPEN_FILE |
Невозможно открыть файл |
4104 |
ERR_INCOMPATIBLE_FILEACCESS |
Несовместимый режим доступа к файлу |
4105 |
ERR_NO_ORDER_SELECTED |
Ни один ордер не выбран |
4106 |
ERR_UNKNOWN_SYMBOL |
Неизвестный символ |
4107 |
ERR_INVALID_PRICE_PARAM |
Неправильный параметр цены для торговой функции |
4108 |
ERR_INVALID_TICKET |
Неверный номер тикета |
4109 |
ERR_TRADE_NOT_ALLOWED |
Торговля не разрешена. Необходимо включить опцию «Разрешить советнику торговать» в свойствах эксперта |
4110 |
ERR_LONGS_NOT_ALLOWED |
Ордера на покупку не разрешены. Необходимо проверить свойства эксперта |
4111 |
ERR_SHORTS_NOT_ALLOWED |
Ордера на продажу не разрешены. Необходимо проверить свойства эксперта |
4112 |
ERR_TRADE_EXPERT_DISABLED_BY_SERVER |
Автоматическая торговля с помощью экспертов/скриптов запрещена на стороне сервера |
4200 |
ERR_OBJECT_ALREADY_EXISTS |
Объект уже существует |
4201 |
ERR_UNKNOWN_OBJECT_PROPERTY |
Запрошено неизвестное свойство объекта |
4202 |
ERR_OBJECT_DOES_NOT_EXIST |
Объект не существует |
4203 |
ERR_UNKNOWN_OBJECT_TYPE |
Неизвестный тип объекта |
4204 |
ERR_NO_OBJECT_NAME |
Нет имени объекта |
4205 |
ERR_OBJECT_COORDINATES_ERROR |
Ошибка координат объекта |
4206 |
ERR_NO_SPECIFIED_SUBWINDOW |
Не найдено указанное подокно |
4207 |
ERR_SOME_OBJECT_ERROR |
Ошибка при работе с объектом |
4210 |
ERR_CHART_PROP_INVALID |
Неизвестное свойство графика |
4211 |
ERR_CHART_NOT_FOUND |
График не найден |
4212 |
ERR_CHARTWINDOW_NOT_FOUND |
Не найдено подокно графика |
4213 |
ERR_CHARTINDICATOR_NOT_FOUND |
Индикатор не найден |
4220 |
ERR_SYMBOL_SELECT |
Ошибка выбора инструмента |
4250 |
ERR_NOTIFICATION_ERROR |
Ошибка отправки push-уведомления |
4251 |
ERR_NOTIFICATION_PARAMETER |
Ошибка параметров push-уведомления |
4252 |
ERR_NOTIFICATION_SETTINGS |
Уведомления запрещены |
4253 |
ERR_NOTIFICATION_TOO_FREQUENT |
Слишком частые запросы отсылки push-уведомлений |
4260 |
ERR_FTP_NOSERVER |
Не указан FTP сервер |
4261 |
ERR_FTP_NOLOGIN |
Не указан FTP логин |
4262 |
ERR_FTP_CONNECT_FAILED |
Ошибка при подключении к FTP серверу |
4263 |
ERR_FTP_CLOSED |
Подключение к FTP серверу закрыто |
4264 |
ERR_FTP_CHANGEDIR |
На FTP сервере не найдена директория для выгрузки файла |
4265 |
ERR_FTP_FILE_ERROR |
Не найден файл в директории MQL4Files для отправки на FTP сервер |
4266 |
ERR_FTP_ERROR |
Ошибка при передаче файла на FTP сервер |
5001 |
ERR_FILE_TOO_MANY_OPENED |
Слишком много открытых файлов |
5002 |
ERR_FILE_WRONG_FILENAME |
Неверное имя файла |
5003 |
ERR_FILE_TOO_LONG_FILENAME |
Слишком длинное имя файла |
5004 |
ERR_FILE_CANNOT_OPEN |
Ошибка открытия файла |
5005 |
ERR_FILE_BUFFER_ALLOCATION_ERROR |
Ошибка размещения буфера текстового файла |
5006 |
ERR_FILE_CANNOT_DELETE |
Ошибка удаления файла |
5007 |
ERR_FILE_INVALID_HANDLE |
Неверный хендл файла (файл закрыт или не был открыт) |
5008 |
ERR_FILE_WRONG_HANDLE |
Неверный хендл файла (индекс хендла отсутствует в таблице) |
5009 |
ERR_FILE_NOT_TOWRITE |
Файл должен быть открыт с флагом FILE_WRITE |
5010 |
ERR_FILE_NOT_TOREAD |
Файл должен быть открыт с флагом FILE_READ |
5011 |
ERR_FILE_NOT_BIN |
Файл должен быть открыт с флагом FILE_BIN |
5012 |
ERR_FILE_NOT_TXT |
Файл должен быть открыт с флагом FILE_TXT |
5013 |
ERR_FILE_NOT_TXTORCSV |
Файл должен быть открыт с флагом FILE_TXT или FILE_CSV |
5014 |
ERR_FILE_NOT_CSV |
Файл должен быть открыт с флагом FILE_CSV |
5015 |
ERR_FILE_READ_ERROR |
Ошибка чтения файла |
5016 |
ERR_FILE_WRITE_ERROR |
Ошибка записи файла |
5017 |
ERR_FILE_BIN_STRINGSIZE |
Размер строки должен быть указан для двоичных файлов |
5018 |
ERR_FILE_INCOMPATIBLE |
Неверный тип файла (для строковых массивов-TXT, для всех других-BIN) |
5019 |
ERR_FILE_IS_DIRECTORY |
Файл является директорией |
5020 |
ERR_FILE_NOT_EXIST |
Файл не существует |
5021 |
ERR_FILE_CANNOT_REWRITE |
Файл не может быть перезаписан |
5022 |
ERR_FILE_WRONG_DIRECTORYNAME |
Неверное имя директории |
5023 |
ERR_FILE_DIRECTORY_NOT_EXIST |
Директория не существует |
5024 |
ERR_FILE_NOT_DIRECTORY |
Указанный файл не является директорией |
5025 |
ERR_FILE_CANNOT_DELETE_DIRECTORY |
Ошибка удаления директории |
5026 |
ERR_FILE_CANNOT_CLEAN_DIRECTORY |
Ошибка очистки директории |
5027 |
ERR_FILE_ARRAYRESIZE_ERROR |
Ошибка изменения размера массива |
5028 |
ERR_FILE_STRINGRESIZE_ERROR |
Ошибка изменения размера строки |
5029 |
ERR_FILE_STRUCT_WITH_OBJECTS |
Структура содержит строки или динамические массивы |
5200 |
ERR_WEBREQUEST_INVALID_ADDRESS |
URL не прошел проверку |
5201 |
ERR_WEBREQUEST_CONNECT_FAILED |
Не удалось подключиться к указанному URL |
5202 |
ERR_WEBREQUEST_TIMEOUT |
Превышен таймаут получения данных |
5203 |
ERR_WEBREQUEST_REQUEST_FAILED |
Ошибка в результате выполнения HTTP запроса |
Пользовательские ошибки |
||
65536 |
ERR_USER_ERROR_FIRST |
С этого кода начинаются ошибки, задаваемые пользователем |
Introduction
Some older programs can return errors in the new version of the MQL4 of compiler.
To avoid critical completion of programs, the previous version compiler handled many errors in the runtime environment. For example, division by zero or array out of range are critical errors and usually lead to application crash. Such errors occur only in some states for certain values of variables. Read this article to know how to handle such cases.
The new compiler can detect actual or potential sources of errors and improve code quality.
In this article, we discuss possible errors that can be detected during compilation of old programs and ways to fix them.
- Compilation Errors
- 1.1. Identifier coincides with a reserved word
- 1.2. Special characters in the names of variables and functions
- 1.3. Errors using the switch operator
- 1.4. Function return values
- 1.5. Arrays in function arguments
- Runtime Errors
- 2.1. Array out of range
- 2.2. Zero divide
- 2.3. Use of 0 instead of NULL for the current character
- 2.4. Unicode format strings and their use in a DLL
- 2.5. File sharing
- 2.6. Datetime conversion
- Compiler Warnings
- 3.1. Names of global and local variables coincide
- 3.2. Mismatch of types
- 3.3. Unused variables
1 Compilation Errors
If a program code contains errors, it cannot be compiled.
To fully control all errors, it is recommended to use strict compilation mode, which is set by the following directive:
#property strict
This mode greatly simplifies troubleshooting.
1.1. Identifier coincides with a reserved word
If the name of a variable or function coincides with one of the reserved words
int char[]; int char1[]; int char() { return(0); }
the compiler returns an error messages:
Figure 1. Errors «unexpected token» and «name expected»
To fix this error, you need to use the correct name of the variable or function.
1.2. Special characters in the names of variables and functions
If names of variables or functions contain special characters ($, @, point):
int $var1; int @var2; int var.3; void f@() { return; }
the compiler returns an error messages:
Figure 2. Errors «unknown symbol» and «semicolon expected»
To fix this error, you need to use correct function or variable names.
1.3. Errors using the switch operator
In the old version of the compiler you could use any values in expressions and constants of the switch operator:
void start() { double n=3.14; switch(n) { case 3.14: Print("Pi");break; case 2.7: Print("E");break; } }
In the new compiler, constants and expressions of the switch operator must be integers, so errors occur when you try to use such constructions:
Figure 3. Errors «illegal switch expression type» and «constant expression is not integral»
In such cases, you can use explicit comparison of numerical values, for example:
void start() { double n=3.14; if(n==3.14) Print("Pi"); else if(n==2.7) Print("E"); }
1.4. Return values of functions
All functions except void should return the declared type value. For example:
int function()
{
}
In strict compilation mode an error occurs:
Figure 4. Error «not all control paths return a value»
In default compilation mode, the compiler returns a warning:
Figure 5. Warning «not all control paths return a value»
If the return value of the function does not match the declared one:
int init() { return; }
an error is detected during strict compilation:
Figure 6. Error «function must return a value»
In default compilation mode, the compiler returns a warning:
Figure 7. Warning ‘return — function must return a value»
To fix such errors, add the return operator with the return value of the corresponding type to the function code.
1.5. Arrays in function arguments
In function arguments, arrays are now passed by reference only.
double ArrayAverage(double a[]) { return(0); }
In strict compilation mode, this code will cause an error:
Figure 8. Compiler error «arrays passed by reference only»
In default compilation mode, the compiler returns a warning:
Figure 9. Compiler warning «arrays passed by reference only»
To fix this error, you must explicitly specify that the array is passed by reference by adding the prefix & before the name of the array:
double ArrayAverage(double &a[]) { return(0); }
It should be noted that now constant arrays (Time[], Open[], High[], Low[], Close[], Volume[]) cannot be passed by reference. For example, the following call:
ArrayAverage(Open);
regardless of the compilation mode leads to an error:
Figure 10. Error ‘Open’ — constant variable cannot be passed as reference
To avoid these errors, copy the required data from the constant array:
double OpenPrices[]; ArrayCopy(OpenPrices,Open,0,0,WHOLE_ARRAY); ArrayAverage(OpenPrices);
2. Runtime Errors
Errors that occur during the execution of the program code are called runtime errors. Such errors usually depend on the state of a program and are associated with incorrect values of the variables.
For example, if a variable is used as an index of array elements, its negative values will inevitably lead to the Array out of Range error.
2.1. Array out of Range
This error often occurs in indicators when accessing indicator buffers. The IndicatorCounted() function returns the number of bars unchanged since the last indicator call. Indicator values on previously calculated bars do not need recalculation, so for faster calculations you only need to process the last few bars.
Most indicators that use this method of calculation optimization look like this:
int start() { if (Bars<100) return(-1); int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); int limit=Bars-counted_bars; if(counted_bars==0) { limit--; limit-=10; } else { limit++; } for (int i=limit; i>0; i--) { Buff1[i]=0.5*(Open[i+5]+Close[i+10]) } }
Often the case of counted_bars==0 is handled incorrectly (the initial limit position should be reduced by the value equal to 1 + maximum index relative to the loop variable).
Also, remember that at the time of the start() function execution we can access elements of arrays of indicator buffers from 0 to Bars ()-1. If you need to work with the arrays that are not indicator buffers, increase their size using the ArrayResize() function in accordance with the current size of indicator buffers. The maximum index of the element to address can also be obtained by calling ArraySize() with one of the indicator buffers used as an argument.
2.2. Zero Divide
The Zero Divide error occurs when a divisor in a division operation is equal to zero:
void OnStart() { int a=0, b=0,c; c=a/b; Print("c=",c); }
When you run this script, an error message appears in the Experts tab and the program shuts down:
Figure 11. Error message «zero divide»
Usually this error occurs when the value of the divisor is determined by the values of any external data. For example, if trade parameters are analyzed, the value of the used margin is equal to 0 if there are no open orders. Another example: if the analyzed data are read from a file, we can not guarantee correct operation if the file is not available. So you should take into account such cases and process them correctly.
The easiest way is to check the divisor before the division operation and report an incorrect parameter value:
void OnStart() { int a=0, b=0,c; if(b!=0) {c=a/b; Print(c);} else {Print("Error: b=0"); return; }; }
This does not cause a critical error, but a message about an incorrect parameter value appears and program shuts down:
Figure 12. Incorrect divider message
2.3. Use of 0 instead of NULL for the current character
In the old version of the compiler 0 (zero) could be used as an argument in functions that require specification of a financial instrument.
For example, the value of the Moving Average technical indicator for the current symbol could be requested as follows:
AlligatorJawsBuffer[i]=iMA(0,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
In the new compiler you should explicitly specify NULL to specify the current symbol:
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
In addition, the current symbol and chart period can be specified using the Symbol() and Period() functions.
AlligatorJawsBuffer[i]=iMA(Symbol(),Period(),13,8,MODE_SMMA,PRICE_MEDIAN,i);
2.4. Unicode strings and their use in a DLL
Strings are now represented as a sequence of Unicode characters.
Remember this and use appropriate Windows functions. For example, when using the wininet.dll library instead InternetOpenA() and InternetOpenUrlA(), you should call InternetOpenW() and InternetOpenUrlW().
The internal structure of strings has changed in MQL4 (now it takes 12 bytes), and the MqlString structure should be used when passing strings to DLL:
#pragma pack(push,1) struct MqlString { int size; LPWSTR buffer; int reserved; }; #pragma pack(pop,1)
2.5. File sharing
In the new MQL4, FILE_SHARE_WRITE and FILE_SHARE_READ flags should explicitly be specified for shared use when opening files.
If the flags are absent, the file is opened in exclusive mode and cannot be opened by anyone else till it is closed by the user who opened it.
For example, when working with offline charts share flags should be explicitly specified:
ExtHandle=FileOpenHistory(c_symbol+i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);
For more details please read Offline Charts in the New MQL4.
2.6. Datetime Conversion
Conversion of datetime to a string now depends on the compilation mode:
datetime date=D'2014.03.05 15:46:58'; string str="mydate="+date;
For example, trying to work with files whose name contains a colon causes an error.
3. Compiler Warnings
Compiler Warnings are informative and are not error messages, but they indicate possible error sources.
A clear code should not contain warnings.
3.1. Names of global and local variables coincide
If variables on the global and local levels have similar names:
int i; void OnStart() { int i=0,j=0; for (i=0; i<5; i++) {j+=i;} PrintFormat("i=%d, j=%d",i,j); }
the compiler displays a warning showing the line number on which the global variable is declared:
Figure 13. Warning «declaration of ‘%’ hides global declaration at line %»
To fix such warnings correct names of global variables.
3.2. Mismatch of Types
The new compiler has a new typecasting operation.
#property strict void OnStart() { double a=7; float b=a; int c=b; string str=c; Print(c); }
In strict compilation mode the compiler shows warnings if types mismatch:
Figure 14. Warnings «possible loss of data due to type conversion» and «implicit conversion from ‘number’ to ‘string’
In this example, the compiler warns about the possible loss of accuracy for different data types assigned and implicit conversion from int to string.
To fix the warning use explicit typecasting:
#property strict void OnStart() { double a=7; float b=(float)a; int c=(int)b; string str=(string)c; Print(c); }
3.3. Unused Variables
The presence of variables that are not used in the program code (superfluous entities) is not a good habit.
void OnStart() { int i,j=10,k,l,m,n2=1; for(i=0; i<5; i++) {j+=i;} }
Reports of such variables are displayed regardless of the compilation mode:
Figure 15. Warning «variable ‘%’ not used’
To fix it, remove unused variables from your code.
Conclusions
The article describes common problems that may occur during compilation of old programs that contain errors.
In all cases it is recommended to use strict compilation mode for program debugging.
В исполняющей подсистеме клиентского терминала имеется возможность сохранения кода ошибки в случае ее возникновения при выполнении 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.