MaksSkam:
Вот такой индикаторик. Работает каласо, но единственное, в чем его глюк - так это в том, что график этого индикатора недорисовывает первые IBSPeriod точек (в данном случае 5). Т.е. как бы отстает на 5 значений... Не понимаю где загвоздка...
На первый взгляд:Вот такой индикаторик. Работает каласо, но единственное, в чем его глюк - так это в том, что график этого индикатора недорисовывает первые IBSPeriod точек (в данном случае 5). Т.е. как бы отстает на 5 значений... Не понимаю где загвоздка...
while(i>=0) { //********МАТЕМАТИКА СИЛЫ БАРА ************************ BS = 0; for(int k=0; k < IBSPeriod; k++) if(!bCompareDouble(High[i+k] - Low[i+k],0.0)) BS += MathAbs(Low[i+k]-Close[i+k])/(High[i+k] - Low[i+k]); IBSBuffer[i]=BS*100/IBSPeriod; //*************************************************** i--; } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool bCompareDouble (double dNumber1, double dNumber2) { bool bCompare= NormalizeDouble(dNumber1 - dNumber2,8) == 0; return(bCompare); }
Editor:
Т.е., по сути, необходимо обрабатывать ситауцию нуль-бара, т.е.
когда High = Low (=Open=Close) ?
MaksSkam:
Вот такой индикаторик. Работает каласо, но единственное, в чем его глюк - так это в том, что график этого индикатора недорисовывает первые IBSPeriod точек (в данном случае 5). Т.е. как бы отстает на 5 значений... Не понимаю где загвоздка...
На первый взгляд:Вот такой индикаторик. Работает каласо, но единственное, в чем его глюк - так это в том, что график этого индикатора недорисовывает первые IBSPeriod точек (в данном случае 5). Т.е. как бы отстает на 5 значений... Не понимаю где загвоздка...
while(i>=0) { //********МАТЕМАТИКА СИЛЫ БАРА ************************ BS = 0; for(int k=0; k < IBSPeriod; k++) if(!bCompareDouble(High[i+k] - Low[i+k],0.0)) BS += MathAbs(Low[i+k]-Close[i+k])/(High[i+k] - Low[i+k]); IBSBuffer[i]=BS*100/IBSPeriod; //*************************************************** i--; } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool bCompareDouble (double dNumber1, double dNumber2) { bool bCompare= NormalizeDouble(dNumber1 - dNumber2,8) == 0; return(bCompare); }
MaksSkam:
Т.е., по сути, необходимо обрабатывать ситауцию нуль-бара, т.е. когда High = Low (=Open=Close) ?
Надо проверять деление на 0.Т.е., по сути, необходимо обрабатывать ситауцию нуль-бара, т.е. когда High = Low (=Open=Close) ?
В редакторе MetaEditor <меню Вид-Навигатор-вкладка Словарь-Выполнение программ-Ошибки выполнения> написано:
Существует ряд критических ошибок, при возникновении которых выполнение программы немедленно прерывается:
ERR_REMAINDER_FROM_ZERO_DIVIDE ( 4012) - Деление на 0 при взятии остатка от деления.
ERR_ZERO_DIVIDE (4013) - Деление на 0.
Кроме того, надо правильно индексировать бары:
C индексацией понятно — спасибо
А вот с деление все же не очень... Я правильно понимаю, что в знаменателе может быть ноль <=> High[i-k] = Low[i-k] <=> бара по сути нет...
А вот с деление все же не очень... Я правильно понимаю, что в знаменателе может быть ноль <=> High[i-k] = Low[i-k] <=> бара по сути нет...
MaksSkam:
C индексацией понятно — спасибо
А вот с деление все же не очень... Я правильно понимаю, что в знаменателе может быть ноль <=> High[i-k] = Low[i-k] <=> бара по сути нет...
После первого же деления на ноль исполнение MQL-программы прерывается, расчеты и отрисовка индикатора прекращается, то есть на графике ничего не рисуется.
C индексацией понятно — спасибо
А вот с деление все же не очень... Я правильно понимаю, что в знаменателе может быть ноль <=> High[i-k] = Low[i-k] <=> бара по сути нет...
MaksSkam:
А вот с деление все же не очень...
Нельзя делить на ноль - получается стремление к бесконечности.
Вот и поэтому если на любом комп. языке появиться что-то/0 то
возникает ошибка. Так что эта ситуация требует специальная
обработка.
А вот с деление все же не очень...
Про ноль понятно. Я понимаю, что деление на ноль сразу вызывает завершение программы без отрисовки графиков и всех дел, и что эту ситуацию нужно обрабатывать, это все понятно.
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
MaksSkam:
Про ноль понятно. Я понимаю, что деление на ноль сразу вызывает завершение программы без отрисовки графиков и всех дел, и что эту ситуацию нужно обрабатывать, это все понятно.
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
А вот здесь: /(High[i+k] - Low[i+k]) ?Про ноль понятно. Я понимаю, что деление на ноль сразу вызывает завершение программы без отрисовки графиков и всех дел, и что эту ситуацию нужно обрабатывать, это все понятно.
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
Что произойдет, если бар будет представлять собой додж, у которого low=high?
Renat:
Что произойдет, если бар будет представлять собой додж, у которого low=high?
О! Вот это-=то я и хотел услышать...MaksSkam:
Про ноль понятно. Я понимаю, что деление на ноль сразу вызывает завершение программы без отрисовки графиков и всех дел, и что эту ситуацию нужно обрабатывать, это все понятно.
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
А вот здесь: /(High[i+k] - Low[i+k]) ?Про ноль понятно. Я понимаю, что деление на ноль сразу вызывает завершение программы без отрисовки графиков и всех дел, и что эту ситуацию нужно обрабатывать, это все понятно.
Вопрос в том, а что это за ситуация такая, когда произойдет деление на ноль?
Что произойдет, если бар будет представлять собой додж, у которого low=high?
А что такое додж?
Такое вообще возможно? Получается, что по сути бара вообще нет. ..
Бар есть, нет движения за этот интервал времени. Бар открыля,
да так и остался неизменным, был всего один тик (Volum[i]=1). На
фьючерсах таких фокусы бывают даже на дневках.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот такой индикаторик. Работает каласо, но единственное, в чем его глюк - так это в том, что график этого индикатора недорисовывает первые IBSPeriod точек (в данном случае 5). Т.е. как бы отстает на 5 значений... Не понимаю где загвоздка...