//+------------------------------------------------------------------+ //| AvalsLevels.mq4 | //| Copyright © 2006, Âÿ÷åñëàâ Ñóâîðîâ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Âÿ÷åñëàâ Ñóâîðîâ" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_style2 STYLE_DASH #property indicator_color3 Red #property indicator_style4 STYLE_DASH double topband2[]; double botband2[]; double pogreha=5; //---- input parameters extern int SpeedLineMin=5; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); SetIndexBuffer(0,topband2); SetIndexStyle(0,DRAW_LINE,STYLE_DASH,1,Blue); SetIndexDrawBegin(0,3); SetIndexLabel(0,"SPEEDUP"); SetIndexBuffer(1,botband2); SetIndexStyle(1,DRAW_LINE,STYLE_DASH,1,Red); SetIndexDrawBegin(1,3); SetIndexLabel(1,"SPEEDDOWN"); //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double Max=High[Highest(NULL,0,MODE_HIGH,Bars-1,0)]; int Basis,sh; bool sign; double d1,Dist; int i=iBars(NULL,PERIOD_D1); double Maxx=High[iHighest(NULL,PERIOD_D1,MODE_HIGH,i,0)]; double tops[]; double bots[]; int counted_bars=IndicatorCounted(); double lasttop=High[counted_bars]; double lastbot=Low[counted_bars]; ArrayResize(tops,0); ArrayResize(bots,0); lasttop=High[counted_bars]; lastbot=Low[counted_bars]; i=Bars-IndicatorCounted(); if(counted_bars==0) i-=3; while(i>=0) { Basis=i; if(Close[i]>=Open[i]) { //UP sign=false; while((i>=0) && (!sign)) { while((ArraySize(tops)>0) &&(High[i]>=tops[ArraySize(tops)-1])) ArrayResize(tops,ArraySize(tops)-1); while((ArraySize(bots)>0) && (Low[i]<=bots[ArraySize(bots)-1])) ArrayResize(bots,ArraySize(bots)-1); if(ArraySize(tops)>0) topband2[i]=tops[ArraySize(tops)-1]; if(topband2[i]==0) topband2[i]=Max; if(ArraySize(bots)>0) botband2[i]=bots[ArraySize(bots)-1]; i--; if((High[i]>High[i+1]) && (Low[i]>Low[i+1]) && (Close[i]>Open[i])) sign=false; else sign=true; }//while d1= MathMin(High[Basis+1],High[Basis+2]); d1= MathMin(d1,High[Basis]); Dist=(High[i+1]-d1)/Point; if(Dist>=SpeedLineMin) { ArrayResize(bots,ArraySize(bots)+1); bots[ArraySize(bots)-1]=d1; }//if } else { sign=false; while((i>=0) && (!sign)) { while((ArraySize(tops)>0) &&(High[i]>=tops[ArraySize(tops)-1])) ArrayResize(tops,ArraySize(tops)-1); while((ArraySize(bots)>0) && (Low[i]<=bots[ArraySize(bots)-1])) ArrayResize(bots,ArraySize(bots)-1); if(ArraySize(tops)>0) topband2[i]=tops[ArraySize(tops)-1]; if(topband2[i]==0) topband2[i]=Max; if(ArraySize(bots)>0) botband2[i]=bots[ArraySize(bots)-1]; i--; if(i>0&&(Low[i]=SpeedLineMin) { ArrayResize(tops,ArraySize(tops)+1); tops[ArraySize(tops)-1]=d1; }//if } }//while return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+