Почему в MQL5 нет исключений? - страница 12

 
Alexey Volchanskiy:
Не понял, как вы реализуете самостоятельно обработку краша советника? Там же никакие деструкторы не вызываются, просто рантайм его прибивает.
Вот тут можно держать второго робота в помощниках. А у второго - третьего...

Насколько помню, 100 графиков может быть открыто в терминале, а-а-а-а-а-а...
 

Кто-нибудь признается, что OnError и аналогичное в 99% случаев будет использоваться слабовольными и непрофессиональными программистами для маскировки своих ошибок?

Какой прекрасный подарок будет трейдерам, которые получат программы с замаскированными косяками. Как будут хвалить Метаквотс за поддержку заведомо ошибочных программ.

Как тут уже заявляли, try/catch хотят использовать как глобальный "перехватить и скрыть косяк". Да, подавляющее большинство кода в мире так и пишется - (полу)глобально ловим и маскируемся. Вы просто об этом не знаете или делаете вид, что "это не так, программисты - ответственны и все в мире идеально".

Вы как потребители, хотите программ с замаскированными ошибками? Особенно в области финансов?

Программисты - хотят. Как хотят меньше напрягаться, плюют на контроль качества и поголовно забывают проверять результаты критических операций.

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

 
Dennis Kirichenko:
Вот тут можно держать второго робота в помощниках. А у второго - третьего...

Насколько помню, 100 графиков может быть открыто в терминале, а-а-а-а-а-а...
А еще можно нанять какую-нибудь девушку за небольшие денежки. Мне больше нравиться вариант с девушкой )) С красивой-то и барыш делить приятнее (Г. Жеглов)
 
Alexey Volchanskiy:

При делении на ноль советник отключается с сообщением в терминале. Да, терминал не падает. Что делать с открытыми ордерами?

int OnInit()
  {
  int a = 20, b = 21, c = 80, d = 0;
  d = c/(a - --b);
   return(INIT_SUCCEEDED);
  }

 2017.01.31 12:38:26.495 TestException (EURUSD,M1) zero divide in 'TestException.mq5' (15,12)


Бить по голове программиста, который написал этот код.

Иначе он такого наговнокодит и вы даже знать об ошибках не будете. Он ведь их все замаскирует и даже ни секунды не будет сомневаться о "правильности" своего решения.

 
Alexey Volchanskiy:
Yuriy Zaytsev:
 
Понимаешь , я о той ситуации  при которой достаточно добиться того, что бы программа не вылетала а продолжала работать. 
я тебе опять повторяю , в любом серьезном процессоре  есть аппаратная поддержка прерывания при делении на ноль( Вот Леша меня явно понимает, ибо он разработчик железа в прошлом )

Это уже из области фантастики.

Вопрос об исключениях уже неоднократно подымался и ответ всегда был однозначным - их в MQL не будет.

На мой взгляд вполне хватило бы 2 вещей, о реализации которых стоит подумать:

1. Добавить событие с обработкой ошибок, о нем уже выше писали - что-то вроде OnErrors();

2. Добавить в список причин деиницилизации торгового робота еще одну - критическая ошибка при выполнении программы.

Тогда все что не "фатально" для живучести торгового робота можно будет обработать в  OnErrors, а фатальное и представляющее собой непоправимое (по факту) можно будет выловить при деинициализации торгового робота. Исправить понятно уже ничего не сможем, так хоть будет возможность трейдера известить, при необходимости. 

 
Vladimir Batrudinov:

Это уже из области фантастики.

Вопрос об исключениях уже неоднократно подымался и ответ всегда был однозначным - их в MQL не будет.

На мой взгляд вполне хватило бы 2 вещей, о реализации которых стоит подумать:

1. Добавить событие с обработкой ошибок, о нем уже выше писали - что-то вроде OnErrors();

2. Добавить в список причин деиницилизации торгового робота еще одну - критическая ошибка при выполнении программы.

Тогда все что не "фатально" для живучести торгового робота можно будет обработать в  OnErrors, а фатальное и представляющее собой непоправимое (по факту) можно будет выловить при деинициализации торгового робота. Исправить понятно уже ничего не сможем, так хоть будет возможность трейдера известить, при необходимости. 

+++

Варианты с девушкой или следящим роботом ненадежны. 

 
Renat Fatkhullin:

Бить по голове программиста, который написал этот код.

Иначе он такого наговнокодит и вы даже знать об ошибках не будете. Он ведь их все замаскирует и даже ни секунды не будет сомневаться о "правильности" своего решения.

Программу из нескольких сот строчек можно написать без ошибок. Большую и сложную систему - нет. В доказательство - посмотрите количество баг-репортов по MT*/MQL*.

Да вы и сами все отлично понимаете, не вижу резонов спорить дальше.

Ответ насчет эксепшенов получен, спасибо, цель ветки выполнена, можно закрывать ))

 
Alexey Volchanskiy:
Не понял, как вы реализуете самостоятельно обработку краша советника? Там же никакие деструкторы не вызываются, просто рантайм его прибивает.

OnError() не может "фатальные ошибки" исправить, жа ему это и не нужно.

Главное чтобы при падении торгового робота это было возможно отловить в обработке деинициализации, отловить и сделать всего две возможные и очевидные вещи:

а) предупредить трейдера о проблеме (надежда на то что сам трейдер разберется что делать с ордерами);

б) передать "сообщение" другому роботу/эксперту или скрипту,задачей которого будет закрыть все позиции.

Ничего иного исходя из позиции разработчиков нам не остается. 

 
Vladimir Batrudinov:

OnError() не может "фатальные ошибки" исправить, жа ему это и не нужно.

Главное чтобы при падении торгового робота это было возможно отловить в обработке деинициализации, отловить и сделать всего две возможные и очевидные вещи:

а) предупредить трейдера о проблеме (надежда на то что сам трейдер разберется что делать с ордерами);

б) передать "сообщение" другому роботу/эксперту или скрипту,задачей которого будет закрыть все позиции.

Ничего иного исходя из позиции разработчиков нам не остается. 

Это ясно, этого пока нет. 

Я о настоящем - писали, что делаете это с 2011 года, вроде вы писали, лень искать. Так как? 

 
Alexey Volchanskiy:

Программу из нескольких сот строчек можно написать без ошибок. Большую и сложную систему - нет. В доказательство - посмотрите количество баг-репортов по MT*/MQL*.

Вышесказанное никакого отношения к эксепшенам не имеет.

Как раз багрепорты(падаем с отчетом, а не игнорируем/скрываем) дают возможность исправлять ошибки. А предлагаемые публикой эксепшены в подавляющем большинстве случаев использовались бы для маскировки ошибок.
Причина обращения: