Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Есть вопросы? Задай их на форуме - трейдеры помогут!
Dmitriy Voevodkin
558
Dmitriy Voevodkin 2015.05.10 21:17 

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

 

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
11138
Vitalie Postolache 2015.05.11 01:16  
Зачем использовать архаичные Bars-IndicatorCounted(); в коде нового стиля? rates_total, prev_calculated есть же.
Dmitriy Voevodkin
558
Dmitriy Voevodkin 2015.05.11 01:17  
evillive:
Зачем использовать архаичные Bars-IndicatorCounted(); в коде нового стиля? rates_total, prev_calculated есть же.
Извините, а как это связано с моим вопросом?
Vitalie Postolache
11138
Vitalie Postolache 2015.05.11 01:19  

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

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

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

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

Dmitriy Voevodkin
558
Dmitriy Voevodkin 2015.05.11 01:52  
evillive:

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

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

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

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

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

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

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