Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ваш брокер не поддерживает мобильные MetaTrader 5? Попроси приобрести их!
SemaFOR
34
SemaFOR 2013.01.17 22:31 

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

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

Dmitry Fedoseev
42919
Dmitry Fedoseev 2013.01.17 22:35  

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

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 2013.01.17 22:36  
Val[j]=((Close[i+j]-Open[i+j])/(High[i+j]-Low[i+j]));
Если High[i+j] равно Low[i+j] , вот тебе и деление на ноль
Алексей Тарабанов
7214
Алексей Тарабанов 2013.01.17 22:37  

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

 Замените на: 

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

SemaFOR
34
SemaFOR 2013.01.17 22:37  
Спасибо, очень оперативно ответили! Попробую сделать.
Dmitry Fedoseev
42919
Dmitry Fedoseev 2013.01.17 22:38  
tara:

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

 Замените на: 

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



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

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

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


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

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

 



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


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

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

 

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

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