Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 601

 

Всем привет!

Дайте совет, решение или ткните где,что читать.

Решаю задачу: обработка ошибки при вызове iCustom()...

// MQL4
void OnTick()
{
....
   ResetLastError();
   double val=iCustom(NULL,0,INDUK_NAME,..., i);
   if ((nErr=GetLastError())>0)
   {
      Print("Error in ",__FUNCTION__," code=",nErr);
      ExpertRemove();
      return;
   }
...
}

 Эта конструкция кода не отрабатывает завершение работы советника, если "индюк" грохнулся с сообщением "array out of range" при отладке советника в тестере.

 
Выход за пределы массива - это критическая ошибка, после неё выполнение программы останавливается и дальнейший код не выполняется. Потому этот ваш обработчик ошибок и не отрабатывает. Да и не нужен в этом случае код ошибки - в журнале же чёрным по белому на писано, в чём причина вылета. И даже указаны строка и позиция, где это произошло.
 
Sergei Vladimirov:
Выход за пределы массива - это критическая ошибка, после неё выполнение программы останавливается и дальнейший код не выполняется. Потому этот ваш обработчик ошибок и не отрабатывает. Да и не нужен в этом случае код ошибки - в журнале же чёрным по белому на писано, в чём причина вылета. И даже указаны строка и позиция, где это произошло.

1. Я знаю, что ошибка в журнале и что она критическая

2. Я не понимаю, почему тестер не останавливает работу советника и нужно принудительно нажимать "стоп"?

3. Есть ли какие-либо языковые конструкции для обработки исключений(exception), чтобы организовать удобным способом работу советника и его взаимодействие с пользователем в случаем критических ошибок?

 
fromme2you:

1. Я знаю, что ошибка в журнале и что она критическая

2. Я не понимаю, почему тестер не останавливает работу советника и нужно принудительно нажимать "стоп"?

3. Есть ли какие-либо языковые конструкции для обработки исключений(exception), чтобы организовать удобным способом работу советника и его взаимодействие с пользователем в случаем критических ошибок?

Тестер останавливается если критическая ошибка (например деление на 0 или выход за пределы массива) произошла в коде самого советника.

Избежать остановки работы кода в тестере или в реале можно , думаю, только введя в код соответствующие проверки. Что не всегда осуществимо. Особенно это актуально если пользуешься чужим кодом, или вставляешь чужой код как подпрограмму в свой продукт. 

Ещё один сложный способ - это читать программно логи журнала.

 
Yuri Evseenkov:

Тестер останавливается если критическая ошибка (например деление на 0 или выход за пределы массива) произошла в коде самого советника.... 

Ещё один сложный способ - это читать программно логи журнала.

Ясно. Спасибо за ответ.

Еще вопрос: как напрячь разработчика МТ4 и среды исполнения MQL кода, чтобы он(они) приложил ум и руки в развитии языка для обработки исключений, такие как в моем примере или сходные по смыслу?

 
fromme2you:

Ясно. Спасибо за ответ.

Еще вопрос: как напрячь разработчика МТ4 и среды исполнения MQL кода, чтобы он(они) приложил ум и руки в развитии языка для обработки исключений, такие как в моем примере или сходные по смыслу?

Обращатся в сервесдеск, создать тему/опрос на форуме.

Не так давно МТ4 вообще хоронили. Сейчас тренд если не развернулся , то по крайней мере в последнее время платформу и язык стали значительно модернизировать.

 
Yuri Evseenkov:

Обращатся в сервесдеск, создать тему/опрос на форуме.

Не так давно МТ4 вообще хоронили. Сейчас тренд если не развернулся , то по крайней мере в последнее время платформу и язык стали значительно модернизировать.

в 2009   его хоронили первый раз

 

Здравствуйте. Не могли бы знающие люди подсказать в какую сторону решить данную задачу. Нужно найти цены открытия баров в определенное время, например в 01:00, анализируя  к примеру 50 последних баров. Не знаю каким образом подойти лучше к задаче на mql5.


То ли через вычисление текущей даты+добавление к ней времени требуемого, и далее уже плюсовать сутками,  этот способ работал на mql4.

На mql5 я так понял есть специальные структуры с выводом времени, но почему то не получается через них.

Заранее спасибо за ответ.

Буду очень благодарен , если кто-нибудь накидает кусочек кода для понимания направления  размышления.
 
Alex:

Здравствуйте. Не могли бы знающие люди подсказать в какую сторону решить данную задачу. Нужно найти цены открытия баров в определенное время, например в 01:00, анализируя  к примеру 50 последних баров. Не знаю каким образом подойти лучше к задаче на mql5.


То ли через вычисление текущей даты+добавление к ней времени требуемого, и далее уже плюсовать сутками,  этот способ работал на mql4.

На mql5 я так понял есть специальные структуры с выводом времени, но почему то не получается через них.

Заранее спасибо за ответ.

Буду очень благодарен , если кто-нибудь накидает кусочек кода для понимания направления  размышления.
В индикаторе или в советнике/скрипте?
 
здравствуйте. такой вопрос: еслии  использовать функциию ordersendasync  в mt5 для отложеного ордера как оно будет срабатывать?  например будет  ли  отсылать бай стоп  без ожидания ответа но при срабатывании  ордера будет ждать ответа сервера  по ордеру  бай?