Похоже, что при оптимизации компилятор вырезает "тупые" операторы.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { if(StopExecution("kill yourself") < 0) return; Print("I am still alive"); } // ----------------------------------------------------------------------------- // Аварийное завершение эксперта/скрипта // ----------------------------------------------------------------------------- int StopExecution(string message) { PrintFormat("%s / %s", __FUNCTION__, message); if (MQLInfoInteger(MQL_PROGRAM_TYPE) == PROGRAM_EXPERT) { ExpertRemove(); } else if(1/MathAbs(0) == 0){ return(-1); } return(0); }
void OnStart() { int i = 1; Print(1 / --i); //Zero divide, check divider for zero to avoid this error }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как известно, в MQL5 нет исключений и конструкций try...catch
У меня есть класс. При создании объекта, в конструкторе проверяется некое условие (например, наличие файла).
Хочу чтобы скрипт убился бы по моему приказу или сгенерировал ошибку. Тогда терминал прекратит его исполнение.
С экспертом понятно (ExpertRemove()). Деление на ноль не проходит. По дефолту терминал такие ошибки э... прощает.
Вот пример кода. Почему печатается "I am still alive"?
Вопрос: как гарантированно смоделировать ошибку?
Ответ создавать для каждого скрипта свой проект с настройками - не годится.