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

 
Figar0:

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

Посмотерел на минутном ТФ у меня все работает правильно насколько понимаю как он должен работать.

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


рисунками я, вроде бы, показала, что проблема имеет место быть. Индикатор необходимо использовать совместно с тремя другими (или их откомпилировать в терминале), т.к. из данного индикатора идут запросы данных этих индикаторов. Кстати, проблема может быть не только в коде данного индикатора, а в тех, к которым идёт ссылка, но разобраться не могу. Дополнительные индикаторы корректно работают на нулевом баре.
 
Figar0:

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

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

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

Спасибо, я подумаю и попробую использовать Ваш вариант.

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

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

Вопрос задаю как раз с целью научиться, исправить ошибки и "бессмысленные конструкции "

 

Возможно я ошибаюсь, поправьте, пожалуйста, если что-то не так, но данную конструкцию я понимаю следующим образом:

1. int limit;
int counted_bars=IndicatorCounted();
возвращается количество непросчитанных баров

//---- последний посчитанный бар будет пересчитан
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;

т.е можно записать так: counted_bars=counted_bars-1 или сразу limit=Bars-counted_bars-1;
например: 100 - всего, 40 - непросчитанных, limit=59, т.е с индекса 59 начинаем просматривать бары.

//---- основной цикл
for(int i=0; i<limit; i++)
двигаемся с 0 бара до 59 (не включительно) справа налево.

2. if(counted_bars>0) limit=Bars-counted_bars-1;
..................................

for(int i=limit; i=>; i--)

в данной конструкции будем просматривать те же бары, но слева налево В чём разница и моя ошибка, если и там и там должен пересчитывается нулевой бар?

К тому же при применении 1. в индикаторе ME_Proboy_F5 зависает терминал.

 
LOA:

1. int limit;
int counted_bars=IndicatorCounted();
возвращается количество непросчитанных баров


Функция IndicatorCounted() возвращает реально посчитанное количество баров минус один. Это точно как отче наш. Посмотрите справку там есть.

LOA:

_bars=counted_bars-1 или сразу limit=Bars-counted_bars-1;
например: 100 - всего, 40 - непросчитанных, limit=59, т.е с индекса 59 начинаем просматривать бары.


Ну такого я от Вас не ожидал)

сразу limit = Bars - (counted_bars -1) = Bars - counted_bars + 1;

Правила раскрытия скобок при арифметических действиях, в первом классе...

LOA:

в данной конструкции будем просматривать те же бары, но слева налево В чём разница и моя ошибка, если и там и там должен пересчитывается нулевой бар?


Справа налево, слева направо это в общем случае не принципиально

LOA:

К тому же при применении 1. в индикаторе ME_Proboy_F5 зависает терминал.


Этот индикатор я смотрел бегло 10 секунд, но индикатор Proboy_Order_F5.mq4 его использующий у меня так и висит, и исправно все показывает. Хотя сейчас глянул, я у себя в порядке эксперимента оказывается оставил +200, вместо +1)

Возможно какой-то из индикаторов которые использует Proboy_Order_F5.mq4 перерисовывается по мере поступления новых данных, отсюда и Proboy_Order_F5.mq4 пересчитывающий только последний бар начинает косячить и что-то затирать. Пересмотрите свои индикаторы (вы же их автор? вам и карты в руки, я толком и не могу понять что же они должны делать) с учетом и пониманием выше сказаного, может появятся более конкретные вопросы.

 

И не говорите, сама от себя не ожидаю иногда.

ME_Proboy_F5 - разобралась в алгоритме, но автор не я.

Спасибо, будем посмотреть.