Собственно, сначала кусок кода:
//Сформируем приказ на вход в рынок***************************************************************************************************
if(Close[1]>Max20 && LongOpen==0 && ShortOpen==0)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)-StopLoss;
ticket[t]=OrderSend(Symbol(),OP_BUY,Lot,Ask,20,0,0,»Старт»,t,0,Green); LongOpen=true; OrderPrice=MarketInfo(Symbol(),MODE_BID);
if(ticket[t]<0)
{
Print(«Buy OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
if(Close[1]<Min20 && ShortOpen==0 && LongOpen==0)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)+StopLoss;
ticket[t]=OrderSend(Symbol(),OP_SELL,Lot,Bid,20,0,0,»Старт»,t,0,Green); ShortOpen=true; OrderPrice=MarketInfo(Symbol(),MODE_BID);
if(ticket[t]<0)
{
Print(«Sell OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
//Сформировали приказ на вход в рынок*************************************************************************************************
//Зададим алгоритм построения «пирамиды» для увеличения прибыльной позиции************************************************************************************************************
while(t<2)
{
if(MarketInfo(Symbol(),MODE_BID)>OrderPrice+2*N_vtor && LongOpen==1)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)-StopLoss;
ticket[t]=OrderSend(Symbol(),OP_BUY,Lot,Ask,20,0,0,»Пирамида»,t,0,Green); OrderPrice=MarketInfo(Symbol(),MODE_BID);//открытие доп. ордера в пирамиде
if(ticket[t]<0)
{
Print(«Buy OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
if(MarketInfo(Symbol(),MODE_BID)<OrderPrice-2*N_vtor && ShortOpen==1)
{
StopLoss=MarketInfo(Symbol(),MODE_BID)+StopLoss;
ticket[t]=OrderSend(Symbol(),OP_SELL,Lot,Bid,20,0,0,»Пирамида»,t,0,Green); OrderPrice=MarketInfo(Symbol(),MODE_BID);//открытие доп. ордера в пирамиде
if(ticket[t]<0)
{
Print(«Sell OrderSend failed with error #»,GetLastError());
return(0);
}
t++;
}
break;
}
//Задали алгоритм построения «пирамиды» для увеличения прибыльной
позиции************************************************************************************************************
//Приведение StopLoss’а для всех ордеров к уровню только что открытого (последнего)**************************************************************************************************
while(tt<t)//ордер модифицируется ТОЛЬКО когда открылся следующий ордер (tt<t, после модификации tt=t, после открытия нового ордера tt<t и т.д)
{
tt=0;
for(tt=0;tt<t;tt++)//Перебор всех ордеров начиная с 0го, заканчивая (t-1)’м
{
OrderSelect(ticket[tt], SELECT_BY_TICKET);
Print(«Модифицируется ордер «,OrderTicket());
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
}
}
Первая часть (вход на рынок) выполняется как нужно.
Вторая часть (пирамида) выполняется как нужно.
В третьей части проблема. Происходит следующее — советник открывает 0й ордер с тикетом ticket[0]=1 (это в первой части, номер тикета — в массиве), затем OrderSelect — выбрали этот ордер, OrderModify — модифицировали.
Далее, после срабатывания необходимых условий, советник открывает 1й ордер с тикетом ticket[1]=5 (все аналогично, ордер открывается как нужно, без проблем). Затем:
Должно быть так: 0: OrderSelect — выбирает предыдущий ордер с тикетом ticket[0], OrderModify- модифицирует его (подтягивает стоплосс)
1: OrderSelect — выбирает ордер с тикетом ticket[1], OrderModify- модифицирует его (задает стоплосс — такой же, какой теперь у предыдущего ордера)
Имеем следующее: 0: OrderSelect — выбирает предыдущий ордер с тикетом ticket[0], OrderModify- должен бы модифицировать его, но возвращает ошибку 4108 (Неверный номер тикета) — Unknown ticket 1 for OrderModify function (где ticket 1 — и есть ticket[0]).
1: OrderSelect — выбирает ордер с тикетом ticket[1], OrderModify-
модифицирует его (задает стоплосс — такой же, какой теперь у предыдущего
ордера) — все тип-топ.
Далее, при открытии 2го ордера с тикетом ticket[2]=16 повторяется та же история. Советник НЕ модифицирует 2 предыдущих ордера (дважды выдает ошибку 4108), модифицирует последний. При открытии последующих ордеров — модифицируется только последний из них, все предыдущие — «Unknown ticket». Хотя они открыты, я могу вытянуть любую информацию из них.
OrderSelect(ticket[tt], SELECT_BY_TICKET);
Print(«Модифицируется ордер «,OrderTicket());
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
Функция OrderSelect — исправно перебирает все ордеры, от 0-го до текущего, возвращая каждый раз TRUE. Функция OrderModify поочередно получает значение OrderTicket() выбранных ордеров. Но видит только последний. В чем может быть проблема? Собственно говоря, все работает исправно до строчки
OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Green);
Всем спасибо за внимание.
GetLastError() — функция, возвращающая коды ошибок. Кодовые константы ошибок определены
в файле stderror.mqh. Для вывода текстовых сообщений следует использовать функцию
ErrorDescription(), определенную в файле stdlib.mqh.
Константа | Значение | Описание |
---|---|---|
ERR_NO_ERROR | 0 | Нет ошибки |
ERR_NO_RESULT | 1 | Нет ошибки, но результат неизвестен |
ERR_COMMON_ERROR | 2 | Общая ошибка |
ERR_INVALID_TRADE_PARAMETERS | 3 | Неправильные параметры |
ERR_SERVER_BUSY | 4 | Торговый сервер занят |
ERR_OLD_VERSION | 5 | Старая версия клиентского терминала |
ERR_NO_CONNECTION | 6 | Нет связи с торговым сервером |
ERR_NOT_ENOUGH_RIGHTS | 7 | Недостаточно прав |
ERR_TOO_FREQUENT_REQUESTS | 8 | Слишком частые запросы |
ERR_MALFUNCTIONAL_TRADE | 9 | Недопустимая операция нарушающая функционирование сервера |
ERR_ACCOUNT_DISABLED | 64 | Счет заблокирован |
ERR_INVALID_ACCOUNT | 65 | Неправильный номер счета |
ERR_TRADE_TIMEOUT | 128 | Истек срок ожидания совершения сделки |
ERR_INVALID_PRICE | 129 | Неправильная цена |
ERR_INVALID_STOPS | 130 | Неправильные стопы |
ERR_INVALID_TRADE_VOLUME | 131 | Неправильный объем |
ERR_MARKET_CLOSED | 132 | Рынок закрыт |
ERR_TRADE_DISABLED | 133 | Торговля запрещена |
ERR_NOT_ENOUGH_MONEY | 134 | Недостаточно денег для совершения операции |
ERR_PRICE_CHANGED | 135 | Цена изменилась |
ERR_OFF_QUOTES | 136 | Нет цен |
ERR_BROKER_BUSY | 137 | Брокер занят |
ERR_REQUOTE | 138 | Новые цены |
ERR_ORDER_LOCKED | 139 | Ордер заблокирован и уже обрабатывается |
ERR_LONG_POSITIONS_ONLY_ALLOWED | 140 | Разрешена только покупка |
ERR_TOO_MANY_REQUESTS | 141 | Слишком много запросов |
ERR_TRADE_MODIFY_DENIED | 145 | Модификация запрещена, так как ордер слишком близок к рынку |
ERR_TRADE_CONTEXT_BUSY | 146 | Подсистема торговли занята |
ERR_TRADE_EXPIRATION_DENIED | 147 | Использование даты истечения ордера запрещено брокером |
ERR_TRADE_TOO_MANY_ORDERS | 148 | Количество открытых и отложенных ордеров достигло предела, установленного брокером. |
Константа | Значение | Описание |
---|---|---|
ERR_NO_MQLERROR | 4000 | Нет ошибки |
ERR_WRONG_FUNCTION_POINTER | 4001 | Неправильный указатель функции |
ERR_ARRAY_INDEX_OUT_OF_RANGE | 4002 | Индекс массива — вне диапазона |
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK | 4003 | Нет памяти для стека функций |
ERR_RECURSIVE_STACK_OVERFLOW | 4004 | Переполнение стека после рекурсивного вызова |
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER | 4005 | На стеке нет памяти для передачи параметров |
ERR_NO_MEMORY_FOR_PARAMETER_STRING | 4006 | Нет памяти для строкового параметра |
ERR_NO_MEMORY_FOR_TEMP_STRING | 4007 | Нет памяти для временной строки |
ERR_NOT_INITIALIZED_STRING | 4008 | Неинициализированная строка |
ERR_NOT_INITIALIZED_ARRAYSTRING | 4009 | Неинициализированная строка в массиве |
ERR_NO_MEMORY_FOR_ARRAYSTRING | 4010 | Нет памяти для строкового массива |
ERR_TOO_LONG_STRING | 4011 | Слишком длинная строка |
ERR_REMAINDER_FROM_ZERO_DIVIDE | 4012 | Остаток от деления на ноль |
ERR_ZERO_DIVIDE | 4013 | Деление на ноль |
ERR_UNKNOWN_COMMAND | 4014 | Неизвестная команда |
ERR_WRONG_JUMP | 4015 | Неправильный переход |
ERR_NOT_INITIALIZED_ARRAY | 4016 | Неинициализированный массив |
ERR_DLL_CALLS_NOT_ALLOWED | 4017 | Вызовы DLL не разрешены |
ERR_CANNOT_LOAD_LIBRARY | 4018 | Невозможно загрузить библиотеку |
ERR_CANNOT_CALL_FUNCTION | 4019 | Невозможно вызвать функцию |
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED | 4020 | Вызовы внешних библиотечных функций не разрешены |
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING | 4021 | Недостаточно памяти для строки, возвращаемой из функции |
ERR_SYSTEM_BUSY | 4022 | Система занята |
ERR_INVALID_FUNCTION_PARAMETERS_COUNT | 4050 | Неправильное количество параметров функции |
ERR_INVALID_FUNCTION_PARAMETER_VALUE | 4051 | Недопустимое значение параметра функции |
ERR_STRING_FUNCTION_INTERNAL_ERROR | 4052 | Внутренняя ошибка строковой функции |
ERR_SOME_ARRAY_ERROR | 4053 | Ошибка массива |
ERR_INCORRECT_SERIES_ARRAY_USING | 4054 | Неправильное использование массива-таймсерии |
ERR_CUSTOM_INDICATOR_ERROR | 4055 | Ошибка пользовательского индикатора |
ERR_INCOMPATIBLE_ARRAYS | 4056 | Массивы несовместимы |
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR | 4057 | Ошибка обработки глобальныех переменных |
ERR_GLOBAL_VARIABLE_NOT_FOUND | 4058 | Глобальная переменная не обнаружена |
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE | 4059 | Функция не разрешена в тестовом режиме |
ERR_FUNCTION_NOT_CONFIRMED | 4060 | Функция не подтверждена |
ERR_SEND_MAIL_ERROR | 4061 | Ошибка отправки почты |
ERR_STRING_PARAMETER_EXPECTED | 4062 | Ожидается параметр типа string |
ERR_INTEGER_PARAMETER_EXPECTED | 4063 | Ожидается параметр типа integer |
ERR_DOUBLE_PARAMETER_EXPECTED | 4064 | Ожидается параметр типа double |
ERR_ARRAY_AS_PARAMETER_EXPECTED | 4065 | В качестве параметра ожидается массив |
ERR_HISTORY_WILL_UPDATED | 4066 | Запрошенные исторические данные в состоянии обновления |
ERR_TRADE_ERROR | 4067 | Ошибка при выполнении торговой операции |
ERR_END_OF_FILE | 4099 | Конец файла |
ERR_SOME_FILE_ERROR | 4100 | Ошибка при работе с файлом |
ERR_WRONG_FILE_NAME | 4101 | Неправильное имя файла |
ERR_TOO_MANY_OPENED_FILES | 4102 | Слишком много открытых файлов |
ERR_CANNOT_OPEN_FILE | 4103 | Невозможно открыть файл |
ERR_INCOMPATIBLE_ACCESS_TO_FILE | 4104 | Несовместимый режим доступа к файлу |
ERR_NO_ORDER_SELECTED | 4105 | Ни один ордер не выбран |
ERR_UNKNOWN_SYMBOL | 4106 | Неизвестный символ |
ERR_INVALID_PRICE_PARAM | 4107 | Неправильный параметр цены для торговой функции |
ERR_INVALID_TICKET | 4108 | Неверный номер тикета |
ERR_TRADE_NOT_ALLOWED | 4109 | Торговля не разрешена |
ERR_LONGS_NOT_ALLOWED | 4110 | Длинные позиции не разрешены |
ERR_SHORTS_NOT_ALLOWED | 4111 | Короткие позиции не разрешены |
ERR_OBJECT_ALREADY_EXISTS | 4200 | Объект уже существует |
ERR_UNKNOWN_OBJECT_PROPERTY | 4201 | Запрошено неизвестное свойство объекта |
ERR_OBJECT_DOES_NOT_EXIST | 4202 | Объект не существует |
ERR_UNKNOWN_OBJECT_TYPE | 4203 | Неизвестный тип объекта |
ERR_NO_OBJECT_NAME | 4204 | Нет имени объекта |
ERR_OBJECT_COORDINATES_ERROR | 4205 | Ошибка координат объекта |
ERR_NO_SPECIFIED_SUBWINDOW | 4206 | Не найдено указанное подокно |
ERR_SOME_OBJECT_ERROR | 4207 | Ошибка при работе с объектом |
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 | Ошибка при работе с объектом |
With the code below the instructions are as follows :
After 10 bars it opens both a buy and sell pending orders each 200 points from the close price at 10th bar. Then, when price closes higher than one of the pending order price points it closes the opposite order.
// Input variables input int MagicNumber = 101; input int Slippage = 10; input double LotSize = 0.1; input int StopLoss = 200; input int TakeProfit = 200; // Global variables int gBuyTicket,gSellTicket; void OnTick() { // Current order counts int buyCount = 0, sellCount = 0; // sets object to 0 for(int order = 0; order <= OrdersTotal() - 1; order++) { bool select = OrderSelect(order,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && select == true) { if(OrderType() == OP_BUY) buyCount++; else if(OrderType() == OP_SELL) sellCount++; } } // Our bar count for our condition static int barCount = TimeMinute(TimeCurrent()); barCount++; // Our order condition if(barCount > 10 && buyCount == 0 && gBuyTicket == 0 && sellCount == 0 && gSellTicket == 0) // Maybe i can extract a value from barCount using getvalue() function { // Create pendingorder price points static int b = TimeMinute(TimeCurrent()); b++; double bar = Close[b]; // Here I use my bar counting code to hold the price at condition start double pendingBuyPrice = bar + (200 * _Point); double pendingSellPrice = bar - (200 * _Point); // Create stop and take profit values for our pendingorder parameters double buyStopLoss = 0, buyTakeProfit = 0, sellStopLoss = 0, sellTakeProfit = 0; if(StopLoss > 0) { buyStopLoss = pendingBuyPrice - (StopLoss * _Point); sellStopLoss = pendingSellPrice + (StopLoss * _Point); } if(TakeProfit > 0) { buyTakeProfit = pendingBuyPrice + (TakeProfit * _Point); sellTakeProfit = pendingSellPrice - (TakeProfit * _Point); } // Open Buy and Sell pending orders gBuyTicket = OrderSend(_Symbol,OP_BUYSTOP,LotSize,pendingBuyPrice,Slippage,buyStopLoss,buyTakeProfit,"BuyOrder",MagicNumber,0,clrGreen); gSellTicket = OrderSend(_Symbol,OP_SELLSTOP,LotSize,pendingSellPrice,Slippage,sellStopLoss,sellTakeProfit,"SellOrder",MagicNumber,0,clrRed); } // Close opposite order on buy/sell order open if(barCount > 10) { // Create pendingorder price points static int b = TimeMinute(TimeCurrent()); b++; double bar = Close[b]; // Here I use my bar counting code to hold the price at condition start double pendingBuyPrice = bar + (200 * _Point); double pendingSellPrice = bar - (200 * _Point); if(Close[1] > pendingBuyPrice) bool deleteSell = OrderDelete(gSellTicket,clrRed); if(Close[1] < pendingSellPrice) bool deleteBuy = OrderDelete(gBuyTicket,clrGreen); } }
It places trades like I want no problems and compiles with no warnings or errors. But I have noticed on the MT4 journal it says OrderDelete error 4108 and unknown ticket 1 for OrderDelete function.
I cant see why it says this.
В исполняющей подсистеме клиентского терминала имеется возможность сохранения кода ошибки в случае ее возникновения при выполнении 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.
Я специально добавил условие if(OrderType()>1) что бы удалял отложенные.
Рыночные ордера удалить невозможно, их надо закрывать.
for (int i=OrdersTotal()-1; i>=0; i—)
{
if(OrderSelect(i,SELECT_BY_POS)==true)//Если есть следующий
{
if(OrderType()>1)
{
if(!OrderDelete( OrderTicket())) Print(«Ордер не удалён, ошибка «, GetLastError());
}
if(OrderType()==0)
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),30,Blue)) Print(«Ордер не закрыт, ошибка «, GetLastError());
}
if(OrderType()==1)
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),30,Red)) Print(«Ордер не закрыт, ошибка «, GetLastError());
}
}
}
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; } } }
В исполняющей подсистеме клиентского терминала имеется возможность сохранения кода ошибки в случае ее возникновения при выполнении 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.
При работе торгового терминала 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 — Ошибка при работе с объектом.