//+------------------------------------------------------------------+ //| Fractal ZigZag.mq4 | //| ikovrigin | //| | //+------------------------------------------------------------------+ #property copyright "ikovrigin" #property link "" #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 White #property indicator_color2 DeepSkyBlue //---- input parameters extern int Level=2; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_SECTION,STYLE_SOLID,2); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(0,ExtMapBuffer1); SetIndexBuffer(1,ExtMapBuffer2); SetIndexEmptyValue(0,0.0); SetIndexEmptyValue(1,0.0); SetIndexLabel(0,"Zigzag"); SetIndexLabel(1,"Fractal"); //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- int PU,PD,Trend=2; PU=0; PD=0; double FU,FD,F; FU=0; FD=0; int shift = Bars-Level; int n; if (shift>Level) shift=shift-Level-1; if (counted_bars==0) while (shift>Level-1) { ExtMapBuffer1[shift]=0; F=Low[shift]; for (n=1; n<=Level; n++) { if (Low[shift+n]0) { if (FD!=0) switch (Trend) { case 1: if (FFD) { ExtMapBuffer1[PD]=FD; Trend=1; if (PU>=PD) { FU=0; PU=0; } } break; } FD=F; PD=shift; ExtMapBuffer2[PD]=FD; if( ExtMapBuffer2[PD]>0 ) { Alert("Фрактал однако!!!"); } } F=High[shift]; for (n=1; n<=Level; n++) { if (High[shift+n]>High[shift] || High[shift-n]>High[shift]) F=0; } if (F>0) { if (FU!=0) switch (Trend) { case 1: if (F=PU) { FD=0; PD=0; } } break; case 2: if (F>FU) { ExtMapBuffer1[PD]=FD; Trend=1; } break; } FU=F; PU=shift; ExtMapBuffer2[PU]=FU; if( ExtMapBuffer2[PU]>0 ) { Alert("Фрактал однако!!!"); } } shift--; } if (Trend==1) ExtMapBuffer1[PU]=FU; else ExtMapBuffer1[PD]=FD; //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+