Скачать MetaTrader 5

Индикатор не отрисовывается при первом проходе.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitriy Voevodkin
607
Dmitriy Voevodkin  

Индикатор не рисуется при первом походе. Т.е. вот такой код на графике не оставляет никаких следов.

 

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int count, i;
   count=Bars-IndicatorCounted();
   if(count<=0) count=1;
   for(i=count; i>=1; i--)//нулевой бар не обсчитываем
      {
      
      check_up_revers(i);
      check_down_revers(i);
      
      }
   return(rates_total);
  }

 Но если в цикле for мы i прировняем не к count, а поставим любое числовое значение, например 500, то на последних 500 барах появятся необходимые отметки. Получается, что при первом проходе индикатор ничего не рисует, а на втором - count уже равен 1, т.е. график из "офлайна" остаётся не разрисованным.

В чём может быть моя ошибка? 

 

З.Ы. WindowRedraw() - не помогает. 

Vitalie Postolache
12443
Vitalie Postolache  
Зачем использовать архаичные Bars-IndicatorCounted(); в коде нового стиля? rates_total, prev_calculated есть же.
Dmitriy Voevodkin
607
Dmitriy Voevodkin  
evillive:
Зачем использовать архаичные Bars-IndicatorCounted(); в коде нового стиля? rates_total, prev_calculated есть же.
Извините, а как это связано с моим вопросом?
Vitalie Postolache
12443
Vitalie Postolache  

Перепишите по новому стилю, узнаете.

Хотя нет, даже по новому стилю тоже самое будет, если оставить способ расчёта count таким же.

Попробуйте так:

  count=rates_total-prev_calculated;
  if(prev_calculated<1) count=rates_total-1; тут, возможно, понадобится вычесть ещё некоторое количество свеч, которое входит в расчёты функций (вроде периода МА, или чего-то наподобие).

Dmitriy Voevodkin
607
Dmitriy Voevodkin  
evillive:

Перепишите по новому стилю, узнаете.

Хотя нет, даже по новому стилю тоже самое будет, если оставить способ расчёта count таким же.

Попробуйте так:

  count=rates_total-prev_calculated;
  if(prev_calculated<1) count=rates_total-1; тут, возможно, понадобится вычесть ещё некоторое количество свеч, которое входит в расчёты функций (вроде периода МА, или чего-то наподобие).

Я возможно как-то не так объяснил, но дело не в count. У меня не рисуются сигналы на 1-2 и более тысяч свечек назад. Если всё оставить как есть, то по мере поступления новых тиков, появляются новые сигналы, но старые на истории не появляются.

Т.е. если цикл for проходит по всему графику один раз (становится rates_total=prev_calculated), то нет отображения создаваемых на графике "исторических" объектов. Если цикл прогнать второй раз по всему графику, то объекты появляются. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий