Обновление индикатора на открытии свечи

 

Добрый день. Подскажите пожалуйста как научить индикатор обновляться только на открытии свечи?

 
Добрый.
Открой код любого из стандартных индикаторов (из папки \experts\indicators) и посмотри начало функции start(). Там обычно вычисляется некое значение (например, pos), которое определяет в дальнейшем интервал пересчёта индикатора. Благодаря этому достигаются две цели:
  1. Индикатор обновляется только на открытии свечи.
  2. Обновление затрагивает в большинстве случаев только значение индикатора на новой свече.
Или прочитай фрагмент справки MetaEditor'а по функции IndicatorCounted(). Там хороший пример.
 
GoVegas:

Добрый день. Подскажите пожалуйста как научить индикатор обновляться только на открытии свечи?

Если индикатор будет обновляться только на открытии бара, следовательно он считает значения ТОЛЬКО до предыдущего бара (включительно). Т.е. текущий бар он вообще не обсчитывает пока он не завершится.
Следовательно можно написать такую конструкцию:
void start()
  {
   for(int i=Bars-IndicatorCounted()-1; i>0; i--)
     {
      // тут непосредственно сам расчет значений индикатора
     }
  }
При первом запуске просчитает все исторические значения за исключением текущего (развивающегося бара). В дальнейшем будет досчитывать только вновь завершаемые бары. Текущий (последний) развивающийся бар до своего закрытия не обсчитывается.
В цикле разумеется обращение к [i]-му бару.
Это разумеется шаблон.
 
//-------------------------------------------------------------- Новый тик ----
   New_Tick=0;                       // Для начала обнулимся
   if (RefreshRates()==true)
      {
      New_Tick = 1;                  // Поймать новый тик легко, если знать как
      }
//-------------------------------------------------------------- Новый бар ----
   New_Bar=0;                        // Для начала обнулимся
   if (Time_0 != Time[0])            // Если уже другое время начала бара
      {
      New_Bar= 1;                    // А вот и новый бар
      Time_0 = Time[0];              // Запомним время начала нового бара
      } 
//-----------------------------------------------------------------------------
Причина обращения: