//+------------------------------------------------------------------+ //| FractalChannel_v3.mq4 | //| Copyright © 2006, TrendLaboratory | //| http://finance.groups.yahoo.com/group/TrendLaboratory | //| E-mail: igorad2003@yahoo.co.uk | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, TrendLaboratory" #property link "http://finance.groups.yahoo.com/group/TrendLaboratory" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Yellow #property indicator_color3 Yellow //---- input parameters extern int ChannelType=1; extern double Margins=0; extern int Shift = 0; extern int OpenClose=0; //---- buffers double UpBuffer[]; double DnBuffer[]; double MdBuffer[]; double smin[]; double smax[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicator line IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE,2); SetIndexBuffer(0,UpBuffer); SetIndexBuffer(1,DnBuffer); SetIndexBuffer(2,MdBuffer); SetIndexBuffer(3,smin); SetIndexBuffer(4,smax); //---- name for DataWindow and indicator subwindow label short_name="Fractal Channel("+ChannelType+")"; IndicatorShortName(short_name); SetIndexLabel(0,"Up Channel"); SetIndexLabel(1,"Down Channel"); SetIndexLabel(2,"Middle Channel"); SetIndexShift(0,Shift); SetIndexShift(1,Shift); SetIndexShift(2,Shift); //---- SetIndexDrawBegin(0,2*ChannelType); SetIndexDrawBegin(1,2*ChannelType); SetIndexDrawBegin(2,2*ChannelType); //---- return(0); } //+------------------------------------------------------------------+ //| FractalChannel_v3 | //+------------------------------------------------------------------+ int start() { int shift,k,counted_bars=IndicatorCounted(); double v1,v2,cond[100]; if ( counted_bars > 0 ) int limit=Bars-counted_bars-1; if ( counted_bars < 0 ) return(0); if ( counted_bars ==0 ) limit=Bars-2*ChannelType-1; for(shift=limit;shift>=0;shift--) { k=1; while (k<=ChannelType) { if (High[shift+ChannelType+k]<=High[shift+ChannelType] && High[shift+ChannelType-k]=Low[shift+ChannelType] && Low[shift+ChannelType-k]>Low[shift+ChannelType]) { cond[k]=Low[shift+ChannelType]; if(k==1) {v2=cond[k];k++;} else { if(cond[k-1]==cond[k]){v2=cond[k];k++;}else {v2=0; break;} } } else { v2=0; break; } } smax[shift]=smax[shift+1]; if ( v1>0 ) smax[shift]=v1; if (High[shift]>smax[shift]) smax[shift]=High[shift]; smin[shift]=smin[shift+1]; if ( v2>0 ) smin[shift]=v2; if (Low[shift]