Ошибка "zero divide"

 

Приветствую! 

Блок расчета риска по atr, ошибка Zero divide in ссылается на Point и возникает лишь при попытке торговли на центовых счетах, я так понимаю из-за 5 цифр после запятой.

double atr = iATR (Symbol (), PERIOD_D1, 14, 0);
   
      double Lots5     = (balance1 *(Risk5/100))/(atr/Point);
      double Lots15    = (balance1 *(Risk15/100))/(atr/Point);
      double Lots30    = (balance1 *(Risk30/100))/(atr/Point);
      double Lots60    = (balance1 *(Risk60/100))/(atr/Point);
      double Lots240   = (balance1 *(Risk240/100))/(atr/Point);

Помогите универсализировать код для любых видов счетов

 
PAVEL KARAKULOV:

Приветствую! 

Блок расчета риска по atr, ошибка Zero divide in ссылается на Point и возникает лишь при попытке торговли на центовых счетах, я так понимаю из-за 5 цифр после запятой.

Помогите универсализировать код для любых видов счетов

Не на Point ссылается, а на значение переменной atr. Значение iATR может быть равно нулю. Перед совершением операции деления всегда нужно проверять знаменатель на равенство нулю.

 
PAVEL KARAKULOV:

Приветствую! 

Блок расчета риска по atr, ошибка Zero divide in ссылается на Point и возникает лишь при попытке торговли на центовых счетах, я так понимаю из-за 5 цифр после запятой.

Помогите универсализировать код для любых видов счетов

сколько раз уже говорили что 100 и 100.0 это два разных типа числа - первое инт, второе дабл
 
atr может быть нулевым например в начале тестирования, на первых барах, когда их ещё мало для вычисления ATR. Пока он нулевой, пропускать тики. 
 
Edgar Akhmadeev:
atr может быть нулевым например в начале тестирования, на первых барах, когда их ещё мало для вычисления ATR. Пока он нулевой, пропускать тики. 

Да, проблема решилась, когда историю на дневке подгрузил 

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