//+------------------------------------------------------------------+ //| Fine Fractals.mq4 | //| Copyright © 2009 Денис Орлов | //| http://denis-or-love.narod.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009 Денис Орлов" #property link "http://denis-or-love.narod.ru" #include #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Green //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; extern bool Fine=True; extern bool FlatShift=True; extern bool NewFAlert=False; extern bool TurnFAlert=False; //+------------------------------------------------------------------+ //| iCustom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0,164); SetIndexBuffer(0, ExtMapBuffer1); SetIndexEmptyValue(0, 0.0); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 164); SetIndexBuffer(1, ExtMapBuffer2); SetIndexEmptyValue(1, 0.0); //---- name for DataWindow and indicator subwindow label IndicatorShortName("Fine Fractals"); SetIndexLabel(0, "iFractalsUp"); SetIndexLabel(1, "iFractalsDn"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars = IndicatorCounted(); //---- int limit; //---- последний посчитанный бар будет пересчитан if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- основной цикл for(int i = 2; i < limit; i++) { double HP1=High[i+1],HP2=High[i],HP3=High[i-1],HPi=High[i-2], LP1=Low[i+1],LP2=Low[i],LP3=Low[i-1], LPi=Low[i-2], res=iFractals(NULL, 0, MODE_UPPER, i); if(res==0 && Fine)//повышенная чувствительность { if(HP1HP3 && (LP2>=LP3 || HP2>HPi)) res=HP2; } if(FlatShift && res!=0)// сдвигает фрактал флета while(iHigh(NULL,0,i)==iHigh(NULL,0,i+1)) i++; ExtMapBuffer1[i] = res; if(res!=0 && i==2) { int Body=MathAbs( Bull_Bear(i)); if(NewFAlert) Alert("Новый верхний фрактал "+DoubleToStr(res,Digits)); // if(AboveBelow(i,7)>0 && // ( (Body>3 && High[i]-HighBody(i)>Body*Point)|| (High[i]-HighBody(i)>Body*Point*2) ) // ) //if(TurnFAlert) Alert("Разворотный фрактал - вероятно падение."); } res= iFractals(NULL, 0, MODE_LOWER, i); if(res==0 && Fine) { if(LP1>LP2&&LP23 && LowBody(i)-Low[i]>Body*Point ) || (LowBody(i)-Low[i]>Body*Point*2) ) //) //if(TurnFAlert)Alert("Разворотный фрактал - вероятен подъём."); } } //---- return(0); } //+------------------------------------------------------------------+