Проблема с индикатором - страница 2

 
Ну надо же иногда думать, а потом реализовывать. Невозможно получить простую среднюю если не хватает данных для ее расчета. Это элементарно! Поэтому в собственной реализации надо это учитывать и делать расчет корректным. И не важно нули там будут в начале или бред какой-нибудь. А сдвиг отображения тут не поможет, ибо это только сдвиг отображения, но не сдвиг расчета. А сдвиг расчета надо самому корректно реализовывать. Я например тоже для этого всегда MathMax("мой сдвиг",IndicatorCounted()) использую.

Другой вопрос, что после прерывания расчета индикатора вследствие ошибки вычислений (например деление на 0) IndicatorCounted на следующем тике выдает что ВСЁ (!) просчитано, а ведь реально это не так. Правда не знаю могут ли разработчики реализовать тут что-нибудь по другому. Ну не думаете же вы что МТ контролирует на каком цикле прервался расчет индикатора и исходя из этого будет Вам сообщать сколько еще баров осталось. :) Там вероятно на первом запуске IndicatorCounted=0, а затем всегда (количество баров - 1) на текущем баре и (количество баров - 2) в момент перехода на новый бар (увеличение общего количества баров). Исключение - докачка истории или какие-либо переключения связаные с переинициализацией, но тут IndicatorCounted просто опять сбрасывается в ноль. Так что не думаю что разработчики смогут Вам предоставить оставшееся нерасчитанным количество баров.
Единственное, что мне кажется здесь было бы более правильным (если это реализуемо), это сохранение "старого" значения "количества просчитанных баров" в случае "вылета" индикатора по ошибке вычисления. По этому можно было бы судить что индикатор нормально не просчитывается. Но, еще раз повторюсь, если это в принципе реализуемо.
Но ИМХО большой проблемы это не представляет, так как и так видно что индикатор до конца не отображается, а если его назад покрутить, то видно даже с какого момента. Там и надо ошибку вычисления искать.
 
ошибки были не только на первых барах.

Я проводил протоколирование рассчитываемых баров, при возникновении деления на 0, код переставал выполнятся, а при следующем запуске IndicatorCounted() говорил, что все бары рассчитаны, несмотря на то, что расчет прервался буквально на первых барах.


Понятно. Спасибо.
 
Просто проверяйте значение на 0 перед тем как его использовать в знаменателе.
Это же прописные истины в программировании.
 
Просто проверяйте значение на 0 перед тем как его использовать в знаменателе.
Это же прописные истины в программировании.

Естественно, но в последнее время языки программирования расслабляют бдительность, в отличии скажем от бейсика или паскаля, где сразу «рантайм еррор» выскакивал. :-)

Да и потом, почему SMA по не полным данным нельзя рассчитать, а EMA - рассчитывает? Насколько я помню формулу, там и там средняя сумма, но по разным элементам суммирования.