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

 
Alexey Volchanskiy:

Такого падучего ПО полно в Маркете. Я летом проводил исследования, был удивлен, сколько советников за сотни $ падают в тестере на 2-3-й день прогона.

Теперь про эксепшены. Вы пишете на чем-нибудь, кроме MQL? Вероятно нет, иначе не было бы написанного выше.

Вот живой недавний пример, правда на Матлабе, но не суть.

Надо было считать котировки в формате csv и преобразовать их в числовой формат Матлаб. Парсить надо строку в таком формате

2014.07.02 14:15:43.000,1.36480,1.36481

Время парсится встроенной матлабовской функцией, аналог StringToTime в MQL, числа double аналогом StringToDouble.

И все было бы замечательно, но в файле по неизвестным причинам очень-очень редко встречаются мелкие бяки типа

2014.$%.02 14:15:43.000%1.36480,1.364;1

 По одной бяке на 5000 строк. Если проверять строку на бяки, скорость работы программы падает в 1000 раз. Если не проверять, падает программа на матлабовской функции преобразования. В данном случае выгодно завернуть код в try и в случае исключения просто пропустить строку. Понятен смысл?

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

Хреново, что тут 98% кроме MQL ничего не знают и знать не хотят... 


 



 Проверяйте строку. Именно строку, пока она еще строка. После она превратится в структуру. 

 
Алексей Тарабанов:

 Проверяйте строку. Именно строку, пока она еще строка. После она превратится в структуру. 


Не, в тыкву )) Сегодня вечер юмора, что ли?

 
Alexey VolchanskiyНе, в тыкву )) Сегодня вечер юмора, что ли?

Сам завел, сам и расхлебывай. Try-catch ему подавай.)) А событий пользователя не хотите? Делегатов пришлем.

Вообще, вопрос решенный - пишите DLL, уходите (или не уходите) из нее в шарп и будет вам все, что душа пожелает. На Маркете не продашь, а для себя или на заказ вполне можно. 

ЗЫ Кстати, такое решение и Ренат предлагает. Недавно на его статью натыкался - типа, как написать DLL для МТ. Содержания не видел.

КАК ЗА 10 МИНУТ НАПИСАТЬ DLL БИБЛИОТЕКУ ДЛЯ MQL5 И ОБМЕНИВАТЬСЯ ДАННЫМИ?

 
Alexey Volchanskiy:
Деление на ноль - частный и самый простой пример.

Для отключения ошибки при делении на ноль, используйте параметр FpNoZeroCheckOnDivision=1 в разделе [Experts] файла metaeditor.ini

В высшей математике делить на ноль можно и нужно. 

 

Идею эксепшнов всячески поддерживаю! 

 
Yuriy Asaulenko:

Сам завел, сам и расхлебывай. Try-catch ему подавай.)) А событий пользователя не хотите? Делегатов пришлем.

Вообще, вопрос решенный - пишите DLL, уходите (или не уходите) из нее в шарп и будет вам все, что душа пожелает. На Маркете не продашь, а для себя или на заказ вполне можно. 

ЗЫ Кстати, такое решение и Ренат предлагает. Недавно на его статью натыкался - типа, как написать DLL для МТ. Содержания не видел.

КАК ЗА 10 МИНУТ НАПИСАТЬ DLL БИБЛИОТЕКУ ДЛЯ MQL5 И ОБМЕНИВАТЬСЯ ДАННЫМИ?

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

DLL я писать умею, зачем мне статьи. 

 
Dr.Trader:

Для отключения ошибки при делении на ноль, используйте параметр FpNoZeroCheckOnDivision=1 в разделе [Experts] файла metaeditor.ini

В высшей математике делить на ноль можно и нужно. 

 

Идею эксепшнов всячески поддерживаю! 

Интересно, надо посмотреть, не знал. 
 

В Дюкасе не может быть таких ошибок, там данные в бинарном виде лежат.

Тоже столкнулся в свое время со сторонней программой, пришлось свою скачивалку писать.

 
Alexey Volchanskiy:

Меня правда интересует, почему?

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

Алексей, ASSERT'ы и runtime проверки - наше все.

Народа, кому были бы нужны исключения - крайне немного.

Ты ж сам погляди на большую часть кода в КодоБазе - в 90% случаев возвращаемые значения не проверяются. Какие-такие "исключения" ???

Лично мне почти все равно. Будут исключения - буду ими пользоваться. Не будет - не буду. Количество кода по обработке нештатных ситуаций - в обоих случаях одинаково. Разница лишь в том, что с исключениями этот код "концентрируется", а без исключений - "размазывается", соответственно, поддержка вроде как с исключениями получше... Но, с исключениями приходится следить за тем, какие функции бросают исключения, а какие нет...

 
Alexey Volchanskiy:
 

По одной бяке на 5000 строк. Если проверять строку на бяки, скорость работы программы падает в 1000 раз. Если не проверять, падает программа на матлабовской функции преобразования. В данном случае выгодно завернуть код в try и в случае исключения просто пропустить строку. Понятен смысл? 

А разве в Матлабе при ошибке не возвращается никаких признаков ошибки ?

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

 
George Merts:

Алексей, ASSERT'ы и runtime проверки - наше все.

Народа, кому были бы нужны исключения - крайне немного.

Я на самом деле удивлён что у экспертов нету экстренного режима режима "ай-ай-ай, всё плохо, покинуть торговлю!" для выхода из всех сделок и завершения работы эксперта. Ведь все условия логики проверками не покроешь, всегда может произойти ошибка на практически пустом месте, и эксперт тупо вылетит и оставит все сделки висеть без сопровождения. А ведь это почти 100% означает потерю денег (кроме случаев с грамотным тейком и стопом и без мартина, но разве таких советников много?).

Мне бы хватило ещё одного ивента - OnError(), который срабатывал бы перед экстренным вылетом советника. В него можно бы напихать логики для закрытия сделок, или хотя бы захеджить всё что можно.

Причина обращения: