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 | Ошибка при работе с объектом |
Собственно, сначала кусок кода:
//Сформируем приказ на вход в рынок***************************************************************************************************
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);
Всем спасибо за внимание.
При работе торгового терминала 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 — Ошибка при работе с объектом.
Разбор полетов! Коды ошибок, их значения и способы устранения.
Разбор полетов! Коды ошибок, их значения и способы устранения.
Ввиду частых обращений ко мне, как специалисту в области программирования советников на мт4, с вопросами об ошибках, я попытаюсь Вам рассказать наиболее частые ошибки трейдера, и ошибки советников, способы их устранения и причины их возникновения.
Каждый советник имеет свой функциональный режим, но будем исходить из стандартного набора проблем и распространенных ошибок советников.
Итак начнем.
Краткая справка по ошибкам изложена в Коды Ошибок, а также в самом терминале MetaTrader4
Исходя из них — мы попробуем в стиле Руководства по ошибкам электронной техники описать проблему и способ ее решения.
Если Вашей ошибки нет в данной таблице, или способы решения не помогли, обратитесь к автору Вашего советника, но перед этим воспользуйтесь статьей Log файлы для детального рассмотрения проблемы с роботами* (Expforex Прибыльные советники — — Стратегии Форекс —)
ошибка 4, 146
Торговый сервер занят
1. Советник подал слишком много приказов одновременно
2. Не дождавшись ответа от сервера, при выполнении операции — советник пытается отправить новый приказ, Сервер перегружен
1. Перезагрузка терминала
2. Оптимизация кода советника с помощью функций обработки ошибок.
ошибка8, 141
Слишком частые запросы
1. Предыдущие причины ошибки, в сильно частом запросе.
ошибка129
Неправильная цена
1. Цена по которой Вы пытаетесь открыть позицию (BUY SELL)- неправильная
1. Золотое правило: BUY нужно открывать по Ask а закрывать по BID
SELL нужно открывать по BID а закрывать по ASK
ошибка130,145
Неправильные стопы
1. Стопы= Стоплосс, тейкпрофит или уровень открытия отложенника или лимитника.
2. Стопы расположены слишком близко к цене
3. Ваш счет открыт в группе ECN (ЕЦН) или NDD (НДД)
4. Ваш брокер использует Рыночное исполнение позиций
1. Проверьте значения Ваших стоплосс, тейпрофитов
2. Уточните минимальный стоп уровень по Вашему инструменту у брокера, при выставлении стопов — соблюдайте уровень минимальной дистанции
3. В хорошо написанном советнике должны быть функции работы на счетах ECN и NDD
ошибка131
Неправильный объем
1. Неправильный лот при открытии сделки
2. Лот, который вы пытаетесь открыть, меньше минимального
3. Лот, который вы пытаетесь открыть больше максимального
4. Разрядность лота отличается от разрядности брокера.
1. Проверьте правильность открытия лота, изучите спецификацию контракта и прочтите условия торговли в Вашем ДЦ
2.3. Проверьте, Минимальный и Максимальный лот в Вашем ДЦ и на Вашем счете. На некоторых типах счетов, минимальный лот может быть 0.01 а также 0.1 и даже 3. Максимальный лот может быть 5 лотов и 999 лотов и другие.
4. Уточните разрядность лотов на Вашем сервере. Если например разрядность лотов=1, то можно открыть лот 0.1 или 0.5 или 1.2 и так далее, с 1 знаком после запятой, если разрядность лота 2 знака, то исходя из минимального лота, лот может быть 0.01, 0.06, 0.17, 1.48. Также в некоторых ДЦ существует порядок степени лотов, например можно открыть 0.5 и 1 и 1.5 и так далее, а например 0.6 открыть нельзя. Уточните у своего брокера порядок установки лотов.
ошибка132
Рынок закрыт
1. Рынок закрыт в Выходные дни
1.Пробуйтесвязаться с рынком после выходных
ошибка133
Торговля запрещена
1. В данный момент торговля запрещена
2. По данной валютной паре запрещено торговать
1. Попробуйте торговать после выходных
ошибка134
Недостаточно денег для совершения операции
1. Лот, который Вы пытаетесь открыть, слишком большой, на него не хватает маржи
1. Проверьте уровень свободных средств, ирассчитайтесредства, которые Вам нужны, для открытия лота
2. Следите за уровнем Ваших свободных средств
ошибка135..138
Цена изменилась
1. Реквот
2. Слишком быстрый рынок
3. Брокер или ДЦ не дает Вам поставить позицию по заявленной цене
1. Не торгуйте в такие моменты
2. Увеличьте уровеньпроскальзывания, но помните что это влечет за собой открытие позиций не по заявленной Вами цене.
3. Сделайте в советнике функцию обработки ошибок и количество попыток открытия позиций
ошибка 147
Использование даты истечения ордера запрещено брокером
1. Ваш советник или Вы пытаетесь установить срок истечения отложенного ордера
1. В советнике, в функции OrderSend в параметре срок истечения поставьте=0
2. Не устанавливайте срок истечения ордера.
ошибка 148
Количество открытых и отложенных ордеров достигло предела, установленного брокером.
1. Максимальноеколичествооткрытых ордеров и позиций достигнут предела, установленного брокером.
1. Удалите или закройте часть позиций
2. Остановите процесс открытия новых позиций
3. Соблюдайте иерархию сделок, лучше открыть 1 позицию лото 0.1 одновременно, чем 10 позиций лотом 0.01 с потерей спреда.
ошибка 4012, 4013
zero devide
Остаток от деления на ноль
- Вы пытаетесь поделить число на 0.
- Проверьте Весь код советника на наличие такой грубой ошибки, или же проверьте все значения из MarketInfo функций на момент возвращения 0, иногда при MarketInfo(Symbol(),MODE_SPREAD) возвращается не спред а 0 (у брокеров с плавающим спредом)
ошибка 4017
Вызовы DLL не разрешены
- В Вашем терминале запрещен вызов DLL
- Разрешите вызов DLL через Меню – сервис – Настройки – Советник – Разрешить вызов DLL, но помните, разрешайте данную опцию только для советников, в которых Вы уверены, и уверены что в ДЛЛ не сидит какой-нибудь троян. Проверьте ДЛЛ на наличие троянов с помощью антивируса.
Ошибка 4018 , 4019
Невозможно загрузить библиотеку
- Библиотека повреждена
- Вызов библиотеки осуществляется с ошибкой
- Проверьте библиотеку DLL
- Обратитесь к разработчику данной библиотеки
Ошибка 4020
Вызовы внешних библиотечных функций не разрешены
- В Вашем терминале запрещен вызов функций из внешних экспертов
- Разрешите вызов функций через Меню – сервис – Настройки – Советник – Разрешить вызов внешних экспертов,
Ошибка 4103
Невозможно открыть файл
- Данный файл не существует
- Данный файл заблокирован
- Проверьте наличие указанного файла в папке experts – files
Tester – files
- Проверьте не заблокирован ли файл системой антивируса. Разрешен ли режим записичтения файла
Ошибка 4106
Неизвестный символ
- Символа нет в обзоре рынка
- В обзоре рынка – правой кнопкой мыши – показать все символы
- Проверить названия символа в советнике и наличие его в обзоре рынка
- Некоторые советники используют четкие названия без суфиксов, а брокеры намеренно ставят суфиксы, например EURUSDx где х – суфикс.
Ошибка 4108
Неверный номер тикета
- Тикет ордера, который выбирает эксперт – не существует
- Эксперт пытается выбрать тикет, но данный ордер был закрыт другим советником или руками.
- При попытке осуществления приказа над ордером, тикет был исполнен и закрыт брокером.
- Если данная ошибка появляется очень часто, 100-1000 раз за минуту, проверьте функции Вашего советника
- Отключите другие советники, или настройте их так, чтобы они не конфликтовали, не закрывайте ордер руками, когда эксперт выполняет операцию
Ошибка 4109
Торговля не разрешена
- Советнику запрещено торговать, на графике грустный смайл или крестик
- Включите галочку «Разрешить советнику торговать» в вкладе при установке советника, либо в меню- сервис – настройки – советники.
Ошибка 4110, 4111
Длинные позиции не разрешены
Короткие позиции не разрешены
- В настройках советника, в вкладке Общие не разрешен тип позиций
- В Вкладке Общие, при установке советника есть выбор позиций:
Long Short – Разрешены BUY SELL
Only Long– Разрешен BUY
Only Short – Разрешен SELL
НЕ ЗАБЫВАЕМ ГОВОРИТЬ СПАСИБО И НАЖИМАТЬ КНОПКУ
Некоторые наиболее часто возникающие проблемы- ошибки в работе форекс — советников и возможные способы их решения. Коды ошибок можно узнать, посмотрев папки «Эксперты» и «Журнал» панели «Терминал», или папку «Журнал» панели «Тестер», если ошибки происходят в процессе тестирования.
Ошибки в процессе тестирования советника
Если проблема остаётся или кода вашей ошибки нет в этом перечне, необходимо обращаться к разработчику советника.
Все коды ошибок.
ошибка 4, 146
Торговый сервер занят
1. Советник подал слишком много приказов одновременно
2. Не дождавшись ответа от сервера, при выполнении операции — советник пытается отправить новый приказ, Сервер перегружен
Способы решения:
1. Перезагрузка терминала
2. Оптимизация кода советника с помощью функций обработки ошибок.
ошибка 8, 141
Слишком частые запросы
1. Предыдущие причины ошибки, в сильно частом запросе.
ошибка129
Неправильная цена
1. Цена по которой Вы пытаетесь открыть позицию (BUY SELL)- неправильная
Способы решения:
1. Золотое правило: BUY нужно открывать по Ask а закрывать по BID, SELL нужно открывать по BID а закрывать по ASK
ошибка 130,145
Неправильные стопы
1. Стопы= Стоплосс, тейкпрофит или уровень открытия отложенника или лимитника.
2. Стопы расположены слишком близко к цене
3. Ваш счет открыт в группе ECN или NDD
4. Ваш брокер использует Рыночное исполнение позиций
Способы решения:
1. Проверьте значения Ваших стоплосс, тейпрофитов
2. Уточните минимальный стоп уровень по Вашему инструменту у брокера, при выставлении стопов — соблюдайте уровень минимальной дистанции
3. В хорошо написанном советнике должны быть функции работы на счетах ECN и NDD
ошибка 131
Неправильный объем
1. Неправильный лот при открытии сделки
2. Лот, который вы пытаетесь открыть, меньше минимального
3. Лот, который вы пытаетесь открыть больше максимального
4. Разрядность лота отличается от разрядности брокера.
Способы решения:
1. Проверьте правильность открытия лота, изучите спецификацию контракта и прочтите условия торговли в Вашем ДЦ
2. Проверьте, Минимальный и Максимальный лот в Вашем ДЦ и на Вашем счете. На некоторых типах счетов, минимальный лот может быть 0.01 а также 0.1 и даже 3. Максимальный лот может быть 5 лотов и 999 лотов и другие.
3. Уточните разрядность лотов на Вашем сервере. Если например разрядность лотов=1, то можно открыть лот 0.1 или 0.5 или 1.2 и так далее, с 1 знаком после запятой, если разрядность лота 2 знака, то исходя из минимального лота, лот может быть 0.01, 0.06, 0.17, 1.48. Также в некоторых ДЦ существует порядок степени лотов, например можно открыть 0.5 и 1 и 1.5 и так далее, а например 0.6 открыть нельзя. Уточните у своего брокера порядок установки лотов.
ошибка 132
Рынок закрыт
1. Рынок закрыт в Выходные дни
Способы решения:
1. Пробуйте связаться с рынком после выходных
ошибка 133
Торговля запрещена
1. В данный момент торговля запрещена
2. По данной валютной паре запрещено торговать
Способы решения:
1. Попробуйте торговать после выходных
ошибка134
Недостаточно денег для совершения операции
1. Лот, который Вы пытаетесь открыть, слишком большой, на него не хватает маржи
Способы решения:
1. Проверьте уровень свободных средств, и рассчитайте средства, которые Вам нужны, для открытия лота
2. Следите за уровнем Ваших свободных средств
ошибка135..138
Цена изменилась
1. Реквот
2. Слишком быстрый рынок
3. Брокер или ДЦ не дает Вам поставить позицию по заявленной цене
Способы решения:
1. Не торгуйте в такие моменты
2. Увеличьте уровень проскальзывания, но помните что это влечет за собой открытие позиций не по заявленной Вами цене.
3. Сделайте в советнике функцию обработки ошибок и количество попыток открытия позиций
ошибка 147
Использование даты истечения ордера запрещено брокером
1. Ваш советник или Вы пытаетесь установить срок истечения отложенного ордера
Способы решения:
1. В советнике, в функции OrderSend в параметре срок истечения поставьте=0
2. Не устанавливайте срок истечения ордера.
ошибка 148
Количество открытых и отложенных ордеров достигло предела, установленного брокером.
1. Максимальное количествоотк рытых ордеров и позиций достигнут предела, установленного брокером.
Способы решения:
1. Удалите или закройте часть позиций
2. Остановите процесс открытия новых позиций
3. Соблюдайте иерархию сделок, лучше открыть 1 позицию лото 0.1 одновременно, чем 10 позиций лотом 0.01 с потерей спреда.
ошибка 4012, 4013
zero devide
Остаток от деления на ноль
1. Вы пытаетесь поделить число на 0.
Способы решения:
1. Проверьте Весь код советника на наличие такой грубой ошибки, или же проверьте все значения из MarketInfo функций на момент возвращения 0, иногда при MarketInfo(Symbol(),MODE_SPREAD) возвращается не спред а 0 (у брокеров с плавающим спредом)
ошибка 4017
Вызовы DLL не разрешены
1. В Вашем терминале запрещен вызов DLL
Способы решения:
1. Разрешите вызов DLL через Меню – сервис – Настройки – Советник – Разрешить вызов DLL, но помните, разрешайте данную опцию только для советников, в которых Вы уверены, и уверены что в ДЛЛ не сидит какой-нибудь троян. Проверьте ДЛЛ на наличие троянов с помощью антивируса.
ошибка 4018 , 4019
Невозможно загрузить библиотеку
1. Библиотека повреждена
2. Вызов библиотеки осуществляется с ошибкой
Способы решения:
1. Проверьте библиотеку DLL
2. Обратитесь к разработчику данной библиотеки
ошибка 4020
Вызовы внешних библиотечных функций не разрешены
1. В Вашем терминале запрещен вызов функций из внешних экспертов
Способы решения:
1. Разрешите вызов функций через Меню – сервис – Настройки – Советник – Разрешить вызов внешних экспертов,
ошибка 4103
Невозможно открыть файл
1. Данный файл не существует
2. Данный файл заблокирован
Способы решения:
1. Проверьте наличие указанного файла в папке experts – files Тester – files
2. Проверьте не заблокирован ли файл системой антивируса. Разрешен ли режим записичтения файла
ошибка 4106
Неизвестный символ
1. Символа нет в обзоре рынка
Способы решения:
1. В обзоре рынка – правой кнопкой мыши – показать все символы
2. Проверить названия символа в советнике и наличие его в обзоре рынка
3. Некоторые советники используют четкие названия без суфиксов, а брокеры намеренно ставят суфиксы, например EURUSDx где х – суфикс.
ошибка 4108
Неверный номер тикета
1. Тикет ордера, который выбирает эксперт – не существует
2. Эксперт пытается выбрать тикет, но данный ордер был закрыт другим советником или руками.
3. При попытке осуществления приказа над ордером, тикет был исполнен и закрыт брокером.
Способы решения:
1. Если данная ошибка появляется очень часто, 100-1000 раз за минуту, проверьте функции Вашего советника
2. Отключите другие советники, или настройте их так, чтобы они не конфликтовали, не закрывайте ордер руками, когда эксперт выполняет операцию
ошибка 4109
Торговля не разрешена
1. Советнику запрещено торговать, на графике грустный смайл или крестик
Способы решения:
1. Включите галочку «Разрешить советнику торговать» в вкладе при установке советника, либо в меню- сервис – настройки – советники.
ошибка 4110, 4111
1. Длинные позиции не разрешены
2. Короткие позиции не разрешены
Способы решения:
1. В настройках советника, в вкладке Общие не разрешен тип позиций
2. В Вкладке Общие, при установке советника есть выбор позиций:
Long Short – Разрешены BUY SELL
Only Long– Разрешен BUY
Only Short – Разрешен SELL
Другие статьи по теме:
Устранение ошибок в работе эксперта
Коды ошибок в работе советников форекс (константы MQL4)
Тонкости работы торгового терминала MetaTrader4
Очистка терминала МТ4
if(NewBar() && CheckIfOpenOrdersByMagicNumber(MagicNumber)) { double lots = OrderLots(); RefreshRates(); //double trailingStop = Stoploss_Multiplier*ATR(); if(OrderSelect(ticket,SELECT_BY_TICKET)) { //+--------------------------------------------------------for BUY order--------------------------------------------------------------+ if(OrderSymbol() == Symbol() && OrderType()==OP_BUY) { //+--------------------------------------------------------Closing Order--------------------------------------------------------------+ if(CheckClosePosition(1)==1) { bool resCO = OrderClose(ticket,lots,Bid,slippage); Print("Buy order #",OrderTicket(), " closed"); if(!resCO) { Print("Error in Closing Order. Error code=",GetLastError()); return; } else Print("Closing Order successfully for ticket: #", OrderTicket()); } //+---------------------------------------------------trailing stop loss Plan---------------------------------------------------------+ double trailingStop = Bid-Stoploss_Multiplier*ATR(1); if(OrderStopLoss()<trailingStop) { bool resSL = OrderModify(ticket,OrderOpenPrice(),trailingStop,OrderTakeProfit(),0); if(!resSL) { Print("Error in Order Modify. Error code=",GetLastError()); return; } else Print("Order modify successfully for ticket: #", OrderTicket()); } else return; } //+----------------------------------------------------------for SELL order-------------------------------------------------------------+ if(OrderSymbol() == Symbol() && OrderType()==OP_SELL) { //+--------------------------------------------------------Closing Order-------------------------------------------------------------+ if(CheckClosePosition(1)==2) { bool resCO = OrderClose(ticket,lots,Ask,slippage); Print("Sell order #",OrderTicket(), " closed"); if(!resCO) { Print("Error in Closing Order. Error code=",GetLastError()); return; } else Print("Closing Order successfully for ticket: #", OrderTicket()); } //+-----------------------------------------------------trailing stop loss Plan---------------------------------------------------------+ double trailingStop = Ask+Stoploss_Multiplier*ATR(1); if(OrderStopLoss()>trailingStop) { bool resSL = OrderModify(ticket,OrderOpenPrice(),trailingStop,OrderTakeProfit(),0); if(!resSL) { Print("Error in OrderModify. Error code=",GetLastError()); return; } else Print("Order modify successfully for ticket: #", OrderTicket()); } else return; } } }
Содержание
- 1 Коды ошибок:
- 1.1 Коды ошибок выполнения MQL4 программы:
- 1.2 Похожие статьи:
Очень часто в торговом терминале возникают ошибки при тестировании или оптимизации советников форекс, все ошибки можно увидеть в лог-файлах МТ4, а вот что означают коды ошибок, мы рассмотрим в этой статье:
Ниже представлена таблица кодов ошибок и их описание, поэтому просмотрев таблицу вы сразу поймете что не так с советником или его параметрами и на какой параметр нужно обратить внимание при тестировании, чтоб исправить ошибку.
Так, например, если при тесте возникает ошибка error 130, то становится понятно, что функция советника пытается изменить или установить стоп-лосс или тейк-профит слишком близко к текущей цене на рынке, ближе чем разрешает ваш БРОКЕР ФОРЕКС.
Коды ошибок:
GetLastError() — функция, возвращающая коды ошибок при тесте. Кодовые константы ошибок определены в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию ErrorDescription(), определенную в файле stdlib.mqh.
Коды ошибок, возвращаемые торговым сервером или клиентским терминалом MetaTrader 4:
| Значение | Описание |
|---|---|
| 0 | Нет ошибки |
| 1 | Нет ошибки, но результат неизвестен |
| 2 | Общая ошибка |
| 3 | Неправильные параметры |
| 4 | Торговый сервер занят |
| 5 | Старая версия клиентского терминала |
| 6 | Нет связи с торговым сервером |
| 7 | Недостаточно прав |
| 8 | Слишком частые запросы |
| 9 | Недопустимая операция нарушающая функционирование сервера |
| 64 | Счет заблокирован |
| 65 | Неправильный номер счета |
| 128 | Истек срок ожидания совершения сделки |
| 129 | Неправильная цена |
| 130 | Неправильные стопы |
| 131 | Неправильный объем |
| 132 | Рынок закрыт |
| 133 | Торговля запрещена |
| 134 | Недостаточно денег для совершения операции |
| 135 | Цена изменилась |
| 136 | Нет цен |
| 137 | Брокер занят |
| 138 | Новые цены |
| 139 | Ордер заблокирован и уже обрабатывается |
| 140 | Разрешена только покупка |
| 141 | Слишком много запросов |
| 145 | Модификация запрещена, так как ордер слишком близок к рынку |
| 146 | Подсистема торговли занята |
| 147 | Использование даты истечения ордера запрещено брокером |
| 148 | Количество открытых и отложенных ордеров достигло предела, установленного брокером. |
Коды ошибок выполнения MQL4 программы:
| Значение | Описание |
|---|---|
| 4000 | Нет ошибки |
| 4001 | Неправильный указатель функции |
| 4002 | Индекс массива — вне диапазона |
| 4003 | Нет памяти для стека функций |
| 4004 | Переполнение стека после рекурсивного вызова |
| 4005 | На стеке нет памяти для передачи параметров |
| 4006 | Нет памяти для строкового параметра |
| 4007 | Нет памяти для временной строки |
| 4008 | Неинициализированная строка |
| 4009 | Неинициализированная строка в массиве |
| 4010 | Нет памяти для строкового массива |
| 4011 | Слишком длинная строка |
| 4012 | Остаток от деления на ноль |
| 4013 | Деление на ноль |
| 4014 | Неизвестная команда |
| 4015 | Неправильный переход |
| 4016 | Неинициализированный массив |
| 4017 | Вызовы DLL не разрешены |
| 4018 | Невозможно загрузить библиотеку |
| 4019 | Невозможно вызвать функцию |
| 4020 | Вызовы внешних библиотечных функций не разрешены |
| 4021 | Недостаточно памяти для строки, возвращаемой из функции |
| 4022 | Система занята |
| 4050 | Неправильное количество параметров функции |
| 4051 | Недопустимое значение параметра функции |
| 4052 | Внутренняя ошибка строковой функции |
| 4053 | Ошибка массива |
| 4054 | Неправильное использование массива-таймсерии |
| 4055 | Ошибка пользовательского индикатора |
| 4056 | Массивы несовместимы |
| 4057 | Ошибка обработки глобальныех переменных |
| 4058 | Глобальная переменная не обнаружена |
| 4059 | Функция не разрешена в тестовом режиме |
| 4060 | Функция не подтверждена |
| 4061 | Ошибка отправки почты |
| 4062 | Ожидается параметр типа string |
| 4063 | Ожидается параметр типа integer |
| 4064 | Ожидается параметр типа double |
| 4065 | В качестве параметра ожидается массив |
| 4066 | Запрошенные исторические данные в состоянии обновления |
| 4067 | Ошибка при выполнении торговой операции |
| 4099 | Конец файла |
| 4100 | Ошибка при работе с файлом |
| 4101 | Неправильное имя файла |
| 4102 | Слишком много открытых файлов |
| 4103 | Невозможно открыть файл |
| 4104 | Несовместимый режим доступа к файлу |
| 4105 | Ни один ордер не выбран |
| 4106 | Неизвестный символ |
| 4107 | Неправильный параметр цены для торговой функции |
| 4108 | Неверный номер тикета |
| 4109 | Торговля не разрешена |
| 4110 | Длинные позиции не разрешены |
| 4111 | Короткие позиции не разрешены |
| 4200 | Объект уже существует |
| 4201 | Запрошено неизвестное свойство объекта |
| 4202 | Объект не существует |
| 4203 | Неизвестный тип объекта |
| 4204 | Нет имени объекта |
| 4205 | Ошибка координат объекта |
| 4206 | Не найдено указанное подокно |
| 4207 | Ошибка при работе с объектом |
Надеюсь данная таблица поможет вам побыстрее решить вопросы с ошибками в тестировании ПЛАТНЫХ и БЕСПЛАТНЫХ советников форекс!
Спасибо А. Парнюку за предоставление списка ошибок.


