Совсем простой вопрос?

 
Подкиньте, плз, какой-нибудь пример функции start() кастом индикатора, чтобы:
а) при присоединении индикатора рассчитался весь массив;
б) при появлении новых тиков значение индикатора обновлялось только на 0 баре;
в) при появлении новых баров не было пересчета всего массива.
Наверняка уже есть такое решение. Или я хочу невозможного?
 
Подкиньте, плз, какой-нибудь пример функции start() кастом индикатора, чтобы:
а) при присоединении индикатора рассчитался весь массив;
б) при появлении новых тиков значение индикатора обновлялось только на 0 баре;
в) при появлении новых баров не было пересчета всего массива.
Наверняка уже есть такое решение. Или я хочу невозможного?

это - справедливое желание. все наши индикаторы написаны именно таким образом. посмотрите наши примеры индикаторов (в том числе в папочке experts\samples\indicators). обратите внимание на использование функции IndicatorCounted
 
почитайте нашу статью об особенностях написания пользовательских индикаторов "Особенности написания Пользовательских Индикаторов" - там про функцию IndicatorCounted тоже написано
 
Slawa, большое спасибо за быстрый ответ.
У меня были вопросы, в основном по функции IndicatorCounted().
Сейчас поставил во входящем в поставку Momentum.mq4 Print-ы, чтобы понять логику и убедился, что
все наши индикаторы написаны именно таким образом

это действительно так.

Из полученных логов я сделал вывод, что IndicatorCounted(), "возвращающая количество баров, не измененных после последнего вызова индикатора", рассчитывавается только по сформировавшимся барам. Нулевой бар, даже при наличии на нем значения индикатора, не участвует в расчете данной функции. Я правильно понял?
 
да, правильно.
 
В статье "Особенности написания пользовательских индикаторов" про IndicatorCounted() написано: "Эта функция возвращает количество баров, имеющихся на момент предыдущего запуска индикатора" . То есть при нормальной работе (история обсчитана, сбоев связи нет) она должна возвращать просто Bars. С другой стороны, из формулировки "возвращающая количество баров, не измененных после последнего вызова индикатора" действительно следует, что она должна возвращать Bars-1 (раз нулевой бар постоянно меняется). Дабы внести окончательную ясность, поясните пожалуйста явно, что и когда она возвращает?
 
Процитирую замечание из словаря MetaEditor
===
Самый последний бар не считается посчитанным, и в большинстве случаев необходимо пересчитывать только его. Однако бывают пограничные случаи, когда вызов пользовательского индикатора производится из эксперта на первом тике нового бара. Возможна ситуация, что последний тик предыдущего бара не обработан (по той причине, что в момент прихода этого последнего тика обрабатывался предпоследний тик), и пользовательский индикатор не был вызван и поэтому не был рассчитан. Чтобы избежать в такой ситуации ошибок расчета индикатора функция IndicatorCounted() возвращает реально посчитанное количество баров минус один.
===
то есть, фактически, Bars-2.
Этот вопрос уже обсуждался на форуме и по результатам обсуждений и было написано замечание к функции IndicatorCounted.
 
А помнишь Slawa, ты спрашивал - зачем я ставлю
limit--;

?
Вот потому и ставил, чтобы считать только нулевой бар. Но в каком-то месте я с этой конструкцией все таки наступил на грабли. Теперь я всегда проверяю новый индикатор в реале. Чтобы не был пережатым. На всякий случай.

 

то есть, фактически, Bars-2.
Спасибо.
Этот вопрос уже обсуждался на форуме
Попытаюсь найти. Хотя IndicatorCounted() видимо присутствует в большинстве примеров кода, так что задача простой не выглядит.
 
Хотя IndicatorCounted() видимо присутствует в большинстве примеров кода, так что задача простой не выглядит.

на самом деле можно не искать. Замечание из словаря, которое я привёл, является "выжимкой" из обсуждения. Фактически, плод коллективного разума.
Причина обращения: