//+------------------------------------------------------------------+ //| sFractals.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Green //---- buffers double ExtUpFractalsBuffer[]; double ExtDownFractalsBuffer[]; // Номер бара, по которому будет искаться сигнал #define SIGNAL_BAR 2 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator buffers mapping SetIndexBuffer(0, ExtUpFractalsBuffer); SetIndexBuffer(1, ExtDownFractalsBuffer); //---- drawing settings SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 159); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 159); //---- SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); //---- name for DataWindow SetIndexLabel(0, "sFractal Up"); SetIndexLabel(1, "sFractal Down"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, nCountedBars; bool bFound; double dCurrent; nCountedBars = IndicatorCounted(); //---- last counted bar will be recounted if(nCountedBars <= 2) i = Bars - nCountedBars - 3; if(nCountedBars > 2) { nCountedBars--; i = Bars - nCountedBars - 1; } //----Up and Down Fractals while(i >= 2) { //----Fractals up bFound = false; dCurrent = (Close[i]+High[i])/2; if(dCurrent > (Close[i+1]+High[i+1])/2 && dCurrent > (Close[i+2]+High[i+2])/2 && dCurrent > (Close[i-1]+High[i-1])/2 && dCurrent > (Close[i-2]+High[i-2])/2) { bFound = true; ExtUpFractalsBuffer[i] = dCurrent*2-Close[i]+2*Point; } //----6 bars Fractal if(!bFound && (Bars - i - 1) >= 3) { if(dCurrent == (Close[i+1]+High[i+1])/2 && dCurrent > (Close[i+2]+High[i+2])/2 && dCurrent > (Close[i+3]+High[i+3])/2 && dCurrent > (Close[i-1]+High[i-1])/2 && dCurrent > (Close[i-2]+High[i-2])/2) { bFound = true; ExtUpFractalsBuffer[i] = dCurrent*2-Close[i]+2*Point; } } //----7 bars Fractal if(!bFound && (Bars - i - 1) >= 4) { if(dCurrent >= (Close[i+1]+High[i+1])/2 && dCurrent == (Close[i+2]+High[i+2])/2 && dCurrent > (Close[i+3]+High[i+3])/2 && dCurrent > (Close[i+4]+High[i+4])/2 && dCurrent > (Close[i-1]+High[i-1])/2 && dCurrent > (Close[i-2]+High[i-2])/2) { bFound = true; ExtUpFractalsBuffer[i] = dCurrent*2-Close[i]+2*Point; } } //----8 bars Fractal if(!bFound && (Bars - i - 1) >= 5) { if(dCurrent >= (Close[i+1]+High[i+1])/2 && dCurrent == (Close[i+2]+High[i+2])/2 && dCurrent == (Close[i+3]+High[i+3])/2 && dCurrent > (Close[i+4]+High[i+4])/2 && dCurrent > (Close[i+5]+High[i+5])/2 && dCurrent > (Close[i-1]+High[i-1])/2 && dCurrent > (Close[i-2]+High[i-2])/2) { bFound = true; ExtUpFractalsBuffer[i] = dCurrent*2-Close[i]+2*Point; } } //----9 bars Fractal if(!bFound && (Bars - i - 1) >= 6) { if(dCurrent >= (Close[i+1]+High[i+1])/2 && dCurrent == (Close[i+2]+High[i+2])/2 && dCurrent >= (Close[i+3]+High[i+3])/2 && dCurrent == (Close[i+4]+High[i+4])/2 && dCurrent > (Close[i+5]+High[i+5])/2 && dCurrent > (Close[i+6]+High[i+6])/2 && dCurrent > (Close[i-1]+High[i-1])/2 && dCurrent > (Close[i-2]+High[i-2])/2) { bFound = true; ExtUpFractalsBuffer[i] = dCurrent*2-Close[i]+2*Point; } } //----Fractals down bFound = false; dCurrent = (Close[i]+Low[i])/2; if(dCurrent < (Close[i+1]+Low[i+1])/2 && dCurrent < (Close[i+2]+Low[i+2])/2 && dCurrent < (Close[i-1]+Low[i-1])/2 && dCurrent < (Close[i-2]+Low[i-2])/2) { bFound = true; ExtDownFractalsBuffer[i] = dCurrent*2-Close[i]-2*Point; } //----6 bars Fractal if(!bFound && (Bars - i - 1) >= 3) { if(dCurrent == (Close[i+1]+Low[i+1])/2 && dCurrent < (Close[i+2]+Low[i+2])/2 && dCurrent < (Close[i+3]+Low[i+3])/2 && dCurrent < (Close[i-1]+Low[i-1])/2 && dCurrent < (Close[i-2]+Low[i-2])/2) { bFound = true; ExtDownFractalsBuffer[i] = dCurrent*2-Close[i]-2*Point; } } //----7 bars Fractal if(!bFound && (Bars - i - 1) >= 4) { if(dCurrent <= (Close[i+1]+Low[i+1])/2 && dCurrent == (Close[i+2]+Low[i+2])/2 && dCurrent < (Close[i+3]+Low[i+3])/2 && dCurrent < (Close[i+4]+Low[i+4])/2 && dCurrent < (Close[i-1]+Low[i-1])/2 && dCurrent < (Close[i-2]+Low[i-2])/2) { bFound = true; ExtDownFractalsBuffer[i] = dCurrent*2-Close[i]-2*Point; } } //----8 bars Fractal if(!bFound && (Bars - i - 1) >= 5) { if(dCurrent <= (Close[i+1]+Low[i+1])/2 && dCurrent == (Close[i+2]+Low[i+2])/2 && dCurrent==(Close[i+3]+Low[i+3])/2 && dCurrent < (Close[i+4]+Low[i+4])/2 && dCurrent < (Close[i+5]+Low[i+5])/2 && dCurrent < (Close[i-1]+Low[i-1])/2 && dCurrent < (Close[i-2]+Low[i-2])/2) { bFound = true; ExtDownFractalsBuffer[i] = dCurrent*2-Close[i]-2*Point; } } //----9 bars Fractal if(!bFound && (Bars - i- 1) >= 6) { if(dCurrent <= (Close[i+1]+Low[i+1])/2 && dCurrent == (Close[i+2]+Low[i+2])/2 && dCurrent <= (Close[i+3]+Low[i+3])/2 && dCurrent == (Close[i+4]+Low[i+4])/2 && dCurrent < (Close[i+5]+Low[i+5])/2 && dCurrent < (Close[i+6]+Low[i+6])/2 && dCurrent < (Close[i-1]+Low[i-1])/2 && dCurrent < (Close[i-2]+Low[i-2])/2) { bFound = true; ExtDownFractalsBuffer[i] = dCurrent*2-Close[i]-2*Point; } } i--; } static int PrevSignal = 0, PrevTime = 0; if(SIGNAL_BAR > 0 && Time[0] <= PrevTime) return(0); PrevTime = Time[0]; if(PrevSignal <= 0) { if(ExtDownFractalsBuffer[SIGNAL_BAR] > 0) { PrevSignal = 1; Alert("sFractals (", Symbol(), ", ", Period(), ") - BUY!!!"); } } if(PrevSignal >= 0) { if(ExtUpFractalsBuffer[SIGNAL_BAR] > 0) { PrevSignal = -1; Alert("sFractals (", Symbol(), ", ", Period(), ") - SELL!!!"); } } //---- return(0); } //+------------------------------------------------------------------+