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

 
George Merts:

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

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

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

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

Можно пример ASSERT в MQL? Всегда думал, их тут нет, сейчас спецом посмотрел в справке - нет.

Ну, на качество кода в КБ ориентироваться не стоит. 

 
George Merts:

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

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

Я так понимаю, в Matlab для быстродействия проверки строк отключены и вся обработка возложена на эксепшены. На картинке во второй строке возникает ошибка, в реале валится программа, если не обернуть в try - catch.

1 

Вот вся функция + справка

2 

 
Dr.Trader:

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

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

Таки да, было бы полезно.
 
Dr.Trader:

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

Почему не делают в самолётах стоп-кран? Потому что бесполезно пить боржоми и всё такое... Т.е. не нужно пытаться спасти положение изнутри падающей программы.

Если нужна железобетонная гарантия, что все позиции будут закрыты нормально при падении эксперта - делаем отдельный следящий эксперт. Такой эксперт может следить за всеми позициями по всем инструментам на торговом счете, отслеживая нормальность работы "хозяина" по транслируемым в пользовательское событие маджику. Так если в течении заданного промежутка времени не приходило сообщений с маджиком от "хозяина" и присутствует открытая с таким маджиком позиция, значит это бесхозная позиция и за ней никто не смотрит - её нужно закрыть. Такой следящий эксперт очень прост в логике и там просто нечему ломаться. 
 
Andrey Dik:
Почему не делают в самолётах стоп-кран? Потому что бесполезно пить боржоми и всё такое... Т.е. не нужно пытаться спасти положение изнутри падающей программы.

Если нужна железобетонная гарантия, что все позиции будут закрыты нормально при падении эксперта - делаем отдельный следящий эксперт. Такой эксперт может следить за всеми позициями по всем инструментам на торговом счете, отслеживая нормальность работы "хозяина" по транслируемым в пользовательское событие маджику. Так если в течении заданного промежутка времени не приходило сообщений с маджиком от "хозяина" и присутствует открытая с таким маджиком позиция, значит это бесхозная позиция и за ней никто не смотрит - её нужно закрыть. Такой следящий эксперт очень прост в логике и там просто нечему ломаться. 

Но делают же надувные трапы , и маски кислородные в салоне есть и  спасательные жилеты  под креслом, и даже в истории авиации эти предметы не раз  спасали жизни.


>>>Т.е. не нужно пытаться спасти положение изнутри падающей программы.

что значит не нужно ,  вообще то обработка исключительной ситуации , это нормальное явление.

 
Yuriy Zaytsev:

Но делают же надувные трапы , и маски кислородные в салоне есть и  спасательные жилеты  под креслом, и даже в истории авиации эти предметы не раз  спасали жизни.

>>>Т.е. не нужно пытаться спасти положение изнутри падающей программы.

что значит не нужно ,  вообще то обработка исключительной ситуации , это нормальное явление.

Надувные трапы и желеты - это уже инструменты ликвидации последствия крушения, а не средство предотвращения крушения. Если крыло отвалилось - остается надеяться только на жилет и противоакулий свисток, это я и предложил делать - следящий эксперт, который и будет заниматься ликвидацией последствия.

Я не говорю, что исключения вовсе не нужны, нужны. Но Алексей привел пример, когда игнорируются битые данные, это значит он не хочет анализировать все данные, а просто игнорировать их, если машина не сможет их "переварить". За это я же и говорю - что всё что касается торговой логики, исключения противопоказаны. А для всего остального - полезная вешь, я не отрицаю этого.
 
Andrey Dik:
Почему не делают в самолётах стоп-кран?

Делают, на уровне софта. В современных самолётах уже давно нету прямой механической связи между кнопками, штурвалами к двигателям и крыльям. Если пилот решит сделать петельку и резко дёрнет штурвалом куда-то не туда - умная система заранее определит что это действие очень плохо, и не передаст действия штурвала к крыльям, и включит автопилот пока сам пилот не вернётся к адекватности.
Т.е. если управляющая логика (пилот) сделает недопустимое действие, то специальный хэндлер включит аварийный режим и постарается организовать всё без последствий.

 

Andrey Dik:
Если нужна железобетонная гарантия, что все позиции будут закрыты нормально при падении эксперта - делаем отдельный следящий эксперт.

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

 
Alexey Volchanskiy:

Кстати, исключения есть не только в С++/C#, но даже в Matlab! (Привет Сан Санычу :) )

 

Всегда рад людям, которые передают мне привет - Вам привет

try также имеется в R.

На счет деления на ноль не знаю, но сам пользуюсь try в такой трактовкt

        fm1 <-  try(lm(hp1$cycle ~
                        .....
                                 

    #   Класс не lm - значит при подгонке была ошибка                                

    if(class(fm1)            !=  "lm")                            

   {

.......




 
Andrey Dik:
Надувные трапы и желеты - это уже инструменты ликвидации последствия крушения, а не средство предотвращения крушения. Если крыло отвалилось - остается надеяться только на жилет и противоакулий свисток, это я и предложил делать - следящий эксперт, который и будет заниматься ликвидацией последствия.

Я не говорю, что исключения вовсе не нужны, нужны. Но Алексей привел пример, когда игнорируются битые данные, это значит он не хочет анализировать все данные, а просто игнорировать их, если машина не сможет их "переварить". За это я же и говорю - что всё что касается торговой логики, исключения противопоказаны. А для всего остального - полезная вешь, я не отрицаю этого.

Андрей, ну сколько можно повторять одно и то же? Вы ведь не глупый человек, но уперлись и ни с места.

Да, я могу их анализировать, но тогда конвертация данных за год будет занимать не 10 мин, а 10000. Мне выгоднее пропустить битую строчку, это всего один тик, которых обычно несколько в 1 сек. От пропуска я абсолютно ничего не теряю.

Все, больше я к этому занудному вопросу не возвращаюсь. Если опять непонятно....ну значит такова судьба ))   

 
СанСаныч Фоменко:

Всегда рад людям, которые передают мне привет - Вам привет

try также имеется в R.

На счет деления на ноль не знаю, но сам пользуюсь try в такой трактовкt

        fm1 <-  try(lm(hp1$cycle ~
                        .....
                                 

    #   Класс не lm - значит при подгонке была ошибка                                

    if(class(fm1)            !=  "lm")                            

   {

.......




Вот, лишнее подтверждение, и в R есть эксепшены. Труднее найти язык, где бы их не было )
Причина обращения: