Работа кода в нулевом баре - страница 2

 

Для начала, смотрите в двух индикаторах есть такое:

    int сounted_bars=IndicatorCounted();
    if (сounted_bars==0) int limit=Bars-1;
    if (сounted_bars>0) limit=Bars-сounted_bars-1;
   ......       
    for(int i=limit;i>=0;i--)
     {   
Ничего глаз не режет? В объявлении локальных переменных?
 
То что показал выше надо поправить, и попробуйте такой вариант из приципа, у меня гистограмма на нулевом баре не исчезает. Понаблюдайте, комплекс индикаторов сильно перемудрен, попробовал решить универсально. Проверьте.
Файлы:
 
Figar0:

Для начала, смотрите в двух индикаторах есть такое:

Ничего глаз не режет? В объявлении локальных переменных?


Спасибо большое, что принимаете участие в обсуждении моего вопроса.

У меня знаний и опыта не так много, поэтому - ничего. Подскажите, пожалуйста.

Рассуждаю так:

сounted_bars - целочисленная переменная, int.

int limit, int i - аналогично.

 
LOA:


Спасибо большое, что принимаете участие в обсуждении моего вопроса.

У меня знаний и опыта не так много, поэтому - ничего. Подскажите, пожалуйста.

Рассуждаю так:

сounted_bars - целочисленная переменная, int.

int limit, int i - аналогично.

У вас объявление одной локальной переменной стоит за условием.

if (сounted_bars==0) int limit=Bars-1;
Если counted_bar не равно нулю? Что будет с переменной limit?
 
Figar0:
То что показал выше надо поправить, и попробуйте такой вариант из приципа, у меня гистограмма на нулевом баре не исчезает. Понаблюдайте, комплекс индикаторов сильно перемудрен, попробовал решить универсально. Проверьте.

Я изменила объявление переменной и внесла рекомендованные изменения, т.е

int limit;
    int сounted_bars=IndicatorCounted();
    if (сounted_bars==0) limit=Bars-1;
    if (сounted_bars>0) limit=Bars-сounted_bars;

Но данные изменения привели к тому, что в работу не принимается 2 последних бара. Извините, возможно, что-то не так сделала.

Посмотрю на внесённые изменения на быстром т.ф. М1

 

Вот такая получается картинка, если не перезагружать индикатор.

.

 

и естественно далее - пусто...

 

Должно быть так....

 

Попробуйте сделать так:

    if (сounted_bars>0) limit=Bars-сounted_bars+1;
Посмотерел на минутном ТФ у меня все работает правильно насколько понимаю как он должен работать.

Правда я смотрю только индикатор Proboy_Order_F5_.mq4

 

В принципе вот стандартная универсальная конструкция прям из справки для пересчета индикатора на нулевом баре:

    int limit;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(int i=0; i<limit; i++)

Т.е. там где у Вас "-1", должен быть "+1". Если надо, пересчитывать занова для большего колличества баров, например, для перерисовывающихся индикаторов пусть на depth баров :

    int limit;
     int counted_bars=IndicatorCounted();
  //---- последние d e p t h   бар ов будут пересчитан ы
     if(counted_bars>depth) counted_bars=counted_bars - depth;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(int i=0; i<limit; i++)

У вас же же не пойми что, зачастую бессмысленные конструкции типа:

int limit=MathMin(Bars-1, Bars-сounted_bars-1);

Почему в Bars-сounted_bars-1. Почему минус 1?

Причина обращения: