Скачать MetaTrader 5

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

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

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

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

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

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

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

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

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

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

Насколько помню, 100 графиков может быть открыто в терминале, а-а-а-а-а-а...
А еще можно нанять какую-нибудь девушку за небольшие денежки. Мне больше нравиться вариант с девушкой )) С красивой-то и барыш делить приятнее (Г. Жеглов)
MetaQuotes
Админ
26090
Renat Fatkhullin  
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)


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

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

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

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

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

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

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

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

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

Alexey Volchanskiy
24832
Alexey Volchanskiy  
Vladimir Batrudinov:

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

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

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

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

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

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

+++

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

Alexey Volchanskiy
24832
Alexey Volchanskiy  
Renat Fatkhullin:

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

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

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

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

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

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

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

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

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

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

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

Alexey Volchanskiy
24832
Alexey Volchanskiy  
Vladimir Batrudinov:

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

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

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

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

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

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

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

MetaQuotes
Админ
26090
Renat Fatkhullin  
Alexey Volchanskiy:

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

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

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