Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Устанавливай программы из библиотеки прямо в MetaTrader. Это просто!
Forex Trader
114252
Forex Trader 2005.11.04 12:25 
Подкиньте, плз, какой-нибудь пример функции start() кастом индикатора, чтобы:
а) при присоединении индикатора рассчитался весь массив;
б) при появлении новых тиков значение индикатора обновлялось только на 0 баре;
в) при появлении новых баров не было пересчета всего массива.
Наверняка уже есть такое решение. Или я хочу невозможного?
Forex Trader
114252
Forex Trader 2005.11.04 12:30  
Подкиньте, плз, какой-нибудь пример функции start() кастом индикатора, чтобы:
а) при присоединении индикатора рассчитался весь массив;
б) при появлении новых тиков значение индикатора обновлялось только на 0 баре;
в) при появлении новых баров не было пересчета всего массива.
Наверняка уже есть такое решение. Или я хочу невозможного?

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

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

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

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

Forex Trader
114252
Forex Trader 2005.12.26 13:52  

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

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