zero divide

 

Привет всем!

Давно не помню, чтобы появлялась ошибка ERR_ZERO_DIVIDE  4013 (Деление на ноль).

Для отлова понавставлял везде где можно такой код:

nErr=0; nErr=GetLastError(); if (nErr!=0) { sErr="MyFuncName() ERR="+nErr+" "+fsErrId(nErr)+" dt="+fsDT(TimeCurrent()); Print(sErr); fbWriteToFileErrs(sErr);  } 

Не помогает! Нет ошибок! Может билд виноват? Встречается редко, в тестере, не при оптимизации (хотя там ее вообще не заметишь, имхо).  

Когда она случается, тестер дает сообщение об ошибке, закрывает все ордера и все.

Что можно сделать?? 

 
Код где?
 
Zhunko:
Код где?
Код советника не предполагается выкладывать. :) Я пытаюсь отследить появление ошибки приведенным выше кодом, вставляя его после основных функций эксперта (т.е. во многих местах, штук 20 вставок).
 
mt4trade:

Привет всем!

Давно не помню, чтобы появлялась ошибка ERR_ZERO_DIVIDE  4013 (Деление на ноль).



Ищите в своем коде деления "/".
Для всех переменных в знаменателе, которые могут принимать "0" необходимо перед
делением проводить проверку "if(xyz!=0) { ...".
 

Если в тестере, то скорее всего дыра в котирах, и на запрос цены получаете ноль. 

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

большой это сколько - больше мегабайта кода ;) ? 

 
chief2000:

Ищите в своем коде деления "/".
Для всех переменных в знаменателе, которые могут принимать "0" необходимо перед
делением проводить проверку "if(xyz!=0) { ...".


  может быть и при умножении на  EMPTY_VALUE
 
FAQ:

Если в тестере, то скорее всего дыра в котирах, и на запрос цены получаете ноль. 

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

большой это сколько - больше мегабайта кода ;) ? 

Смотреть все деления это понятно. Но вот приведенный мной код должен ведь отловить ошибку? Или нет??
 
mt4trade:
Смотреть все деления это понятно. Но вот приведенный мной код должен ведь отловить ошибку? Или нет??

Нет
 

Не обязательно деление на ноль.

У меня была сборка с несколькими #include <***.mqh>  и, когда в тексте основного модуля я неправильно обратился к одной функции,

то компиляция прошла нормально, а при работе эксперта, в журнале стала проскакивать эта ошибка.

Подробностей уже не помню, давно было, но причину нашел с большим трудом. 

 
Integer: Нет
Почему?
 

Потому, что при делении на ноль выполнение программы немедленно прерывается.

https://docs.mql4.com/ru/runtime/errors

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