Единственная строка где может быть деление:
Val[j]=((Close[i+j]-Open[i+j])/(High[i+j]-Low[i+j]));
Сделайте проверку, что (High[i+j]-Low[i+j]) не равно нулю, если равно нулю к Val[j] нчего не прибавлять.
Val[j]=((Close[i+j]-Open[i+j])/(High[i+j]-Low[i+j]));Если High[i+j] равно Low[i+j] , вот тебе и деление на ноль
for(i=0;i<=Bars;i++)
Замените на:
for(i=0;i<Bars-Per;i++) {
for(i=0;i<=Bars;i++)
Замените на:
for(i=0;i<Bars-Per;i++) {
Неа, не айс. Посреди истории тоже могут быть бары с равными хай и ло.
Тогда сделать и то и это:)
Если High[i+j] равно Low[i+j] , вот тебе и деление на ноль
Надо проверять не равенство хай и ло, а значение вычисленного знаменателя. Тут вот переменные double... проблемы нормализации...
Тогда сделать и то и это:)
Не помешает.
Кстати, неопределенность при High=Low я бы раскрыл в единицу, поскольку при этом High=Low=Open=Close.
Чисто философская тема) И там ноль и там ноль... Числитель равен нулю, значит результат ноль, или равенство числителя и знаменателя - значит 1. Надо исходить из условий и требования задачи.
Здесь 1 получается если бар вверх, а если бар в низ, то -1. Когда открытие равно закрытию, неизвестно куда бар направлен, значит 0.
Кругом грабли:)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую всех уделивших внимание. При использовании данного индикатора в советнике, выдаётся сообщение о делении на ноль (zero divide) Индикатор писал сам, имея поверхностное знание предмета. Буду очень признателен за конструктивную критику по оптимизации кода и указание на ошибки. О практической ценности индикатора речи не идёт. =)
Выглядит он так: