Индикатор другого графика - страница 2

 
prostotrader:
Нет, ВЫ не правы. Это значение переписывается только один раз, при появлении нового бара, но так как может быть не 1, а несколько баров, то я "подтягиваю" график на N-баров - 1.
Да, я далее чуть-чуть поправил. Но у Вас в коде обнуление на каждом тике идет. Не есть хорошо.
 
Есть идеи почему свеча 19-00 не отобразилась?
 
Alexey Kozitsyn:
Да, я далее чуть-чуть поправил. Но у Вас в коде обнуление на каждом тике идет. Не есть хорошо.

НЕт не на каждом, if(diff>0) , то есть на новом баре

Потому что следующий тик rates_total = prev_calculated 

 
prostotrader:

НЕт не на каждом, if(diff>0) , то есть на новом баре

Потому что следующий тик rates_total = prev_calculated 

Этот кусок разбираем?

else
     {
       int diff = rates_total - prev_calculated;
       if(diff>0)
       {
         for(int i=diff-1; i>0; i++)
         {
           Buffer1[i] = Buffer1[i+1];
           Buffer2[i] = Buffer2[i+1];
           Buffer3[i] = Buffer3[i+1];
           Buffer4[i] = Buffer4[i+1];
         }
       }
       Buffer1[0]= EMPTY_VALUE;
       Buffer2[0] = EMPTY_VALUE;
       Buffer3[0] = EMPTY_VALUE;
       Buffer4[0] = EMPTY_VALUE;
     }

Вы же видите, что  обнуление идет за пределами if( diff > 0 )?
 

 
Alexey Kozitsyn:

Этот кусок разбираем?

else
     {
       int diff = rates_total - prev_calculated;
       if(diff>0)
       {
         for(int i=diff-1; i>0; i++)
         {
           Buffer1[i] = Buffer1[i+1];
           Buffer2[i] = Buffer2[i+1];
           Buffer3[i] = Buffer3[i+1];
           Buffer4[i] = Buffer4[i+1];
         }
       }
       Buffer1[0]= EMPTY_VALUE;
       Buffer2[0] = EMPTY_VALUE;
       Buffer3[0] = EMPTY_VALUE;
       Buffer4[0] = EMPTY_VALUE;
     }

Вы же видите, что  обнуление идет за пределами if( diff > 0 )?
 

Да, как я уже говорил, код в цикле выполнится лишь в случае, когда diff >= 2. Т.е. крайне редко. Если честно, я таких ситуаций не припомню.
 
Alexey Kozitsyn:

Этот кусок разбираем?

else
     {
       int diff = rates_total - prev_calculated;
       if(diff>0)
       {
         for(int i=diff-1; i>0; i++)
         {
           Buffer1[i] = Buffer1[i+1];
           Buffer2[i] = Buffer2[i+1];
           Buffer3[i] = Buffer3[i+1];
           Buffer4[i] = Buffer4[i+1];
         }
       }
       Buffer1[0]= EMPTY_VALUE;
       Buffer2[0] = EMPTY_VALUE;
       Buffer3[0] = EMPTY_VALUE;
       Buffer4[0] = EMPTY_VALUE;
     }

Вы же видите, что  обнуление идет за пределами if( diff > 0 )?
 

Да, точно, спасибо
 
prostotrader:
Да, точно, спасибо
Не за что, Михаил)
 

Есть идеи почему не появилась 19-00 свеча?

 

Может быть как раз из-за обнуления на каждрм тике? 

 
prostotrader:

Есть идеи почему не появилась 19-00 свеча?

 

Может быть как раз из-за обнуления на каждрм тике? 

Да, возможно, еще лучше добавить обработку ошибок функции CopyRates().
 
prostotrader:

И при закрытом MIX-12.16 тоже работает.

Вы эту тему для чего создали? - Потому что не работало. Говорю же, читайте внимательно.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Индикатор другого графика

fxsaber, 2016.12.01 16:46

Это не OK. Если CopyRates возвращает ноль, то должен быть return(rates_total - 1).

Ваша "ошибка" в оригинале не будет давать о себе знать, если чарт MIX-12.16 открыть рядом с чартом, где висит индикатор. Рядом - все чарты не максимизированы.

Дело в том, что когда чарт максимизирован, то формирование новых баров на других чартах прекращается - экономия ресурсов, видимо. Поэтому CopyRates обламывается при первом запросе нового бара.

Утомляет заниматься go to.
Причина обращения: