//gumgum@live.ru))
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 SteelBlue
#property indicator_color2 FireBrick
#property indicator_color3 MediumVioletRed
#property indicator_color4 MediumVioletRed
extern int window =30;
extern double Delay=10;
extern color Background=LightGray;
extern color ZeroLine=Gray;
double UP[];
double DN[];
double JUP[];
double JDN[];
double preBUF[1];
double ppreBUF[1];
double pjBUF[1];
double jBUF[1];
int max;
double TB=0;
double CB=0;
string w;
string name;
bool str=true;
double tTi;
int init()
{
////////////
ArrayResize(preBUF,window+10);
ArrayResize(ppreBUF,window+10);
ArrayResize(pjBUF,window+10);
ArrayResize(jBUF,window+10);
SetIndexStyle(0,DRAW_HISTOGRAM,0,0);
SetIndexBuffer(0, UP);
SetIndexStyle(1,DRAW_HISTOGRAM,0,0);
SetIndexBuffer(1, DN);
SetIndexStyle(2,DRAW_SECTION,0,0);
SetIndexBuffer(2, JDN);
SetIndexStyle(3,DRAW_SECTION,0,0);
SetIndexBuffer(3, JUP);
max=Delay*2.;
TB=GetTickCount();
CB=Close[0];
w="Time Jerk";
IndicatorShortName(w);
name=DoubleToStr(GetTickCount(),8);
////////////
return(0);
}
int deinit()
{
////////////
ObjectDelete("SQobjRECT"+name);
for(int re=0;re<=2*MathFloor(Delay);re++)
{
ObjectDelete("SQobjRECT1"+name+DoubleToStr(Delay-re,3));
}
////////////
return(0);
}
int start()
{
////////////
if(str==true){create();}
ObjectMove("SQobjRECT"+name,0,Time[window],-max);
ObjectMove("SQobjRECT"+name,1,Time[0]+(Time[0]-Time[1]),max);
for(int re=0;re<=2*MathFloor(Delay);re++)
{
ObjectMove("SQobjRECT1"+name+DoubleToStr(Delay-re,3),0,Time[window],(MathFloor(Delay)-re));
ObjectMove("SQobjRECT1"+name+DoubleToStr(Delay-re,3),1,Time[0]+(Time[0]-Time[1]),(MathFloor(Delay)-re));
}
WindowRedraw();
if(Close[0]!=CB)
{
////////////
tTi=GetTickCount();
for(int a=0;a<=window-1;a++)
{
ppreBUF[a]=preBUF[a];
pjBUF[a]=jBUF[a];
}
for(a=0;a<=window-2;a++)
{
preBUF[a+1]=ppreBUF[a];
jBUF[a+1]=pjBUF[a];
}
double resize=1;
if(GetTickCount()/1000.!=((tTi-TB)/1000.))
{
jBUF[0]=((tTi-TB)/1000.);
resize=0;
for(a=0;a<=window-1;a++)
{
double bchek=0;
if(jBUF[a]<Delay){bchek=jBUF[a];}
resize=MathMax(bchek,resize);
}
}
if(Close[0]-CB>0)
{
preBUF[0]=1;
}
else if(Close[0]-CB<0)
{
preBUF[0]=-1;
}
if(((tTi-TB)/1000.)>=Delay)
{
preBUF[0]=0;
}
for(a=0;a<=window+9;a++)
{
JUP[a]=jBUF[a];
JDN[a]=-jBUF[a];
if(jBUF[a]>=Delay)
{
JUP[a]=EMPTY_VALUE;
JDN[a]=EMPTY_VALUE;
}
if(a>window-1)
{
JUP[a]=EMPTY_VALUE;
JDN[a]=EMPTY_VALUE;
}
if(preBUF[a]>0)
{
UP[a]=1*resize;
DN[a]=0;
}
else if(preBUF[a]<0)
{
DN[a]=-1*resize;
UP[a]=0;
}
else if(preBUF[a]==0)
{
DN[a]=0;
UP[a]=0;
}
}
TB=tTi;
CB=Close[0];
////////////
}
return(0);
}
void create()
{
////////////
ObjectCreate("SQobjRECT"+name,OBJ_RECTANGLE,WindowFind(w),Time[window],-1.1,Time[0]+(Time[0]-Time[1]),1.1);
ObjectSet("SQobjRECT"+name,OBJPROP_COLOR,Background);
ObjectSet("SQobjRECT"+name,OBJPROP_BACK,1);
for(int re=0;re<=2*MathFloor(Delay);re++)
{
ObjectCreate("SQobjRECT1"+name+DoubleToStr(Delay-re,3),OBJ_RECTANGLE,WindowFind(w),Time[window],(MathFloor(Delay)-re),Time[0]+(Time[0]-Time[1]),(MathFloor(Delay)-re));
ObjectSet("SQobjRECT1"+name+DoubleToStr(Delay-re,3),OBJPROP_COLOR,ZeroLine);
ObjectSet("SQobjRECT1"+name+DoubleToStr(Delay-re,3),OBJPROP_BACK,0);
if(MathFloor(Delay)-re!=0)
{
ObjectSet("SQobjRECT1"+name+DoubleToStr(Delay-re,3),OBJPROP_STYLE,2);
}
}
WindowRedraw();
str=false;
////////////
}
Comments