//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]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; //////////// }