Есть ли признаки перерисовки

 

Добрый вечер.

Подскажите пожалуйста есть ли в этом коде признаки перерисовки ? (Последний рабочий бар не считается, имеется ввиду перерисовка уже закрытых баров )

//---- indicator settings

#property indicator_separate_window

#property indicator_buffers 4

#property indicator_color3 Red

#property indicator_color4 Blue

#property indicator_width3 5

#property indicator_width4 5

//---- indicator buffers

double AOBuffer[];

double TempBuffer[];

double OscBuyBuffer[];

double OscSellBuffer[];


int init()

{

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_NONE);

SetIndexStyle(2,DRAW_HISTOGRAM);

SetIndexStyle(3,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexDrawBegin(0,34);

SetIndexDrawBegin(1,34);

SetIndexDrawBegin(2,34);

SetIndexDrawBegin(3,34);


SetIndexBuffer(0,AOBuffer);

SetIndexBuffer(1,TempBuffer);

SetIndexBuffer(2,OscBuyBuffer);

SetIndexBuffer(3,OscSellBuffer);

IndicatorShortName("MAGICOSCILLATOR");

SetIndexLabel(2,NULL);

SetIndexLabel(3,NULL);


return(0);

}

int start()

{

int limit;

int counted_bars=IndicatorCounted();

double prev,current;


if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i=0; i<limit; i++)

{

double high2=iHigh(NULL,0,i+2);

double low2=iLow(NULL,0,i+2);

double close2=iClose(NULL,0,i+2);

double high1=iHigh(NULL,0,i+1);

double low1=iLow(NULL,0,i+1);

double close1=iClose(NULL,0,i+1);

double ao1=iAO(NULL,0,i+1);

double ao0=iAO(NULL,0,i);

double close0=iClose(NULL,0,i);//текущая цена

double deltab=0;double deltas=0;

double deltab2=0;double deltas2=0;

if (close1>(high1+low1)/2.0)deltab=close0-high1;

if (close1<(high1+low1)/2.0)deltas=low1-close0;

if (close2>(high2+low2)/2.0)deltab2=close1-high2;

if (close2<(high2+low2)/2.0)deltas2=low2-close1;

if (ao0>ao1)

{

if (deltas>0||deltas2>0)TempBuffer[i]=-1;

else TempBuffer[i]=1;

}

if (ao0<ao1)

{

if (deltab>0||deltab2>0)TempBuffer[i]=1;

else TempBuffer[i]=-1;

}

}

for(i=0; i<limit; i++)

{

if (TempBuffer[i]>0)

{

OscBuyBuffer[i]=TempBuffer[i];

OscSellBuffer[i]=0;

}

if (TempBuffer[i]<0)

{

OscSellBuffer[i]=TempBuffer[i];

OscBuyBuffer[i]=0;

}

}

return(0);

}

Автор данного индикатора "zfs"

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

Думаю автора это не заденет.

Если что ветку удалю.

Спасибо.

 

Не должно перерисовываться. Вот эти строки

int limit;

int counted_bars=IndicatorCounted();

double prev,current;



if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

не дадут перерисоваться. Чес-слово, лень проверять область действия цикла for(). Если открывающая фигурная скобка этого цикла "обжимает" весь код индикатора, то прошлая отрисовка не перерисуется.

 
Спасибо !!!