Смена ТФ - проблема - страница 6

 
Vasyl Nosal:
Всё? Это глючить не будет?
Тут не код глючит. :) Берите и пользуйтесь.
 
Sergei Vladimirov:

Владимир, вы вот это зачем внутри OnCalculate() делаете? Я имею в виду последние две строки - переинициализацию массивов. У вас же оба буфера на каждом баре просчитываются, это лишнее действие.

if(prev_calculated==0)
{
   limit=rates_total-1;
   ArrayInitialize(up_arr,EMPTY_VALUE);
   ArrayInitialize(down_arr,EMPTY_VALUE);
}
Почему Вы решили, что инициализация будет проходить на каждом тике? Условие prev_calculated==0 выполняется раз или два при старте индикатора. В процессе работы prev_calculated==0 может стать если будет изменена история - но это редко бывает или даже никогда и изменение истории требует пересчёта индикатора.
 
Sergei Vladimirov:
Тут не код глючит. :) Берите и пользуйтесь.

Спасибо:))))))))))))))))))))))))))))))))))))))))))))))))))

Кто следующий? 

 

 
Karputov Vladimir:
Почему Вы решили, что инициализация будет проходить на каждом тике? Условие prev_calculated==0 выполняется раз или два при старте индикатора. В процессе работы prev_calculated==0 может стать если будет изменена история - но это редко бывает или даже никогда и изменение истории требует пересчёта индикатора.
Без обнуления буферов при подкачке истории не обойтись?
 
Karputov Vladimir:
Почему Вы решили, что инициализация будет проходить на каждом тике?
Эт где я такое писал? Я спрашивал, зачем вы в OnCalculate() переинициализируете буферы, если в дальнейшем у вас оба буфера рассчитывается на всех барах.
 
Sergei Vladimirov:
Эт где я такое писал? Я спрашивал, зачем вы в OnCalculate() переинициализируете буферы, если в дальнейшем у вас оба буфера рассчитывается на всех барах.
Неверное утверждение. При prev_calculated==0 я впоследствии обхожу все бары, но это не гарантирует замену всех значений в индикаторных буферах. Поэтому при prev_calculated==0 нужна очистка индикаторных буферов.
 
Vasyl Nosal:

Спасибо:))))))))))))))))))))))))))))))))))))))))))))))))))

Кто следующий? 

 

Ну врать-то зачем?

 

 

 
Karputov Vladimir:
Неверное утверждение. При prev_calculated==0 я впоследствии обхожу все бары, но это не гарантирует замену всех значений в индикаторных буферах. Поэтому при prev_calculated==0 нужна очистка индикаторных буферов.

Н-да? Не приведёте пример, когда в вашем коде какое-нибудь значение какого-нибудь буфера не будет заполнено? Кроме, разве что, самого первого бара в истории.

 
Sergei Vladimirov:

Ну врать-то зачем?

 

 

Гениально.

А переключить на пару где нет истории а потом переключить на другой ТФ не пробовал? 

 
Sergei Vladimirov:

Это не утверждение, это вопрос был.

Н-да? Может быть, приведёте пример, когда в вашем коде какое-нибудь значение какого-нибудь буфера не будет заполнено? 

Знаете, давайте поступим так: возьмите код 1.43 из этого сообщения и закомментируйте строки:

if(prev_calculated==0)
{
   limit=rates_total-1;
//ArrayInitialize(up_arr,EMPTY_VALUE);
//ArrayInitialize(down_arr,EMPTY_VALUE);
}

и посмотрите на результат при прокручивании графика в глубь истории и чтобы при этом история подгружалась. 

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