Скачать MetaTrader 5

Ошибка в коде, деление на ноль, нужна помощь спецов.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
SemaFOR
33
SemaFOR  

Приветствую всех уделивших внимание. При использовании данного индикатора в советнике, выдаётся сообщение о делении на ноль (zero divide) Индикатор писал сам, имея поверхностное знание предмета. Буду очень признателен за конструктивную критику по оптимизации кода и указание на ошибки. О практической ценности индикатора речи не идёт. =)

Выглядит он так:

Dmitry Fedoseev
47909
Dmitry Fedoseev  

Единственная строка где может быть деление:

Val[j]=((Close[i+j]-Open[i+j])/(High[i+j]-Low[i+j])); 

Сделайте проверку, что (High[i+j]-Low[i+j]) не равно нулю, если равно нулю к Val[j] нчего не прибавлять.

MikeM
289
MikeM  
Val[j]=((Close[i+j]-Open[i+j])/(High[i+j]-Low[i+j]));
Если High[i+j] равно Low[i+j] , вот тебе и деление на ноль
Алексей Тарабанов
7399
Алексей Тарабанов  

for(i=0;i<=Bars;i++) 

 Замените на: 

for(i=0;i<Bars-Per;i++) { 

SemaFOR
33
SemaFOR  
Спасибо, очень оперативно ответили! Попробую сделать.
Dmitry Fedoseev
47909
Dmitry Fedoseev  
tara:

for(i=0;i<=Bars;i++) 

 Замените на: 

for(i=0;i<Bars-Per;i++) { 



Неа, не айс. Посреди истории тоже могут быть бары с равными хай и ло. 
Алексей Тарабанов
7399
Алексей Тарабанов  

Тогда сделать и то и это:) 

Dmitry Fedoseev
47909
Dmitry Fedoseev  
MikeM:
Если High[i+j] равно Low[i+j] , вот тебе и деление на ноль


Надо проверять не равенство хай и ло, а значение вычисленного знаменателя. Тут вот переменные double... проблемы нормализации... 
Dmitry Fedoseev
47909
Dmitry Fedoseev  
tara:

Тогда сделать и то и это:) 

 



Не помешает.
Алексей Тарабанов
7399
Алексей Тарабанов  
Кстати, неопределенность при High=Low я бы раскрыл в единицу, поскольку при этом  High=Low=Open=Close.  
Dmitry Fedoseev
47909
Dmitry Fedoseev  
tara:
Кстати, неопределенность при High=Low я бы раскрыл в единицу, поскольку при этом  High=Low=Open=Close.  


Чисто философская тема) И там ноль и там ноль... Числитель равен нулю, значит результат ноль, или равенство числителя и знаменателя - значит 1. Надо исходить из условий и требования задачи.

Здесь 1 получается если бар вверх, а если бар в низ, то -1. Когда открытие равно закрытию, неизвестно куда бар направлен, значит 0. 

 

Кругом грабли:) 

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий