Стрелочный индикатор: стрелки не обновляются

 

Индикатор mql4.

Если прокручивать по истории назад, то стрелки собираются в кучу (рис.1),  
а если по переключать ТФ то стрелки на своём месте (рис.2)

Как бы исправить это недоразумение?



 
FXwin:

Индикатор mql4.

Если прокручивать по истории назад, то стрелки собираются в кучу (рис.1),  
а если по переключать ТФ то стрелки на своём месте (рис.2)

Как бы исправить это недоразумение?


Код будет?
 
FXwin:

Индикатор mql4.

Если прокручивать по истории назад, то стрелки собираются в кучу (рис.1),  
а если по переключать ТФ то стрелки на своём месте (рис.2)

Как бы исправить это недоразумение?

Период расчета индикатора как высчитывается?

Подозреваю, что с каждым новым баром период уменьшается на единицу. Слева - направо получится уменьшение на два бара, а не на один.

Такое уже проходили.

Исправьте ошибку в коде.

 
А можно поинтересоваться, почему в индикаторе стрелки объектами рисуете, а не через индикаторные буферы, что было бы логичнее и проблемы такой не возникло бы в принципе?
 
Vitalie Postolache:
А можно поинтересоваться, почему в индикаторе стрелки объектами рисуете, а не через индикаторные буферы, что было бы логичнее и проблемы такой не возникло бы в принципе?

Без всякого конкретного умысла. Всегда в таком варианте обозначал сигнал стрелками. 
Вы можете поправить, а то чего-то не соображаю как правильно?
Добавлю себе в коллекцию опытности.

 
FXwin:

Без всякого конкретного умысла. Всегда в таком варианте обозначал сигнал стрелками. 
Вы можете поправить, а то чего-то не соображаю как правильно?
Добавлю себе в коллекцию опытности.


Ну так стрелками можно через буфер обозначать, как вы с линией индикатора делаете. Объявляете ещё два индикаторных буфера с типом отрисовки DRAW_ARROW и нужным стилем, и вперёд.

Буферам присваиваете вычисленные значения UpSignal и  DnSignal соответственно, только вычислять их надо в главном цикле, а не поле него. Как устроен индикатор вы же знаете? 

 
FXwin:

Хауз получается

Ну так там порядок буферов-то (по крайней мере, массива ATRBuffer) в обратном направлении с ценовыми данными, по картинке видно, даже в код смотреть не надо.

Рекомендую массив  ATRBuffer тоже индикаторным буфером заделать и вычислять в том же цикле, что и остальные, тогда все эти выкрутасы не нужны будут 

     buff_size = ArraySize(TrStopLevel);
    if (ArraySize(ATRBuffer) != buff_size) {
        ArraySetAsSeries(ATRBuffer, false);
        ArrayResize(ATRBuffer, buff_size);
        ArraySetAsSeries(ATRBuffer, true);

        ArraySetAsSeries(SmoothBuffer, false);
        ArrayResize(SmoothBuffer, buff_size);
        ArraySetAsSeries(SmoothBuffer, true);
    }    
    
    if (UseATRMode) {
        // Во-первых вычислить ATR
        for (xctr = 0; xctr < limit; xctr++) {
            ATRBuffer[xctr] = iATR(NULL, 0, 6, xctr);
        }