zz_fibo_generator





//+------------------------------------------------------------------+
//|                                               fibo generator.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

// automatic fibo generator
// based on fukinagashi work on moneytec.Com
// modified by nicogris

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=21;
extern int ExtDeviation=13;
extern int ExtBackstep=34;
extern color FibColor1= Green;
extern color FibColor2= RoyalBlue;
extern color FibColor3= Gold;
//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
double posA,posB,posC,posD,posX;
double topA,botA,topB,botB,topC,botC,topD,botD,topX,botX;
double XA,AB,BC,CD;
double XAAB,ABBC,BCCD;
datetime TimeX,TimeA,TimeB,TimeC,TimeD,TS1,TS2,TS3,TT1,TT2,TT3;
double PS1,PT1,PS2,PT2,PS3,PT3;
double Fib1High,Fib1Low,Fib2High,Fib2Low,Fib3High,Fib3Low;
double level_array[13]={0,0.236,0.386,0.5,0.618,0.786,1,1.276,1.618,2.058,2.618,3.33,4.236};
string leveldesc_array[13]={"0","23.6%","38.6%","50%","61.8%","78.6%","100%","127.6%","161.8%","205.8%","261.80%","333%","423.6%"};
int level_count;
string level_name;
double text_y;

//TS1: time source of fibo1
//PS1: price source of fibo1
//TT1: time target of fibo1
//PT1: price target of fibo1
//etc...

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  { 
   IndicatorBuffers(2);
//---- drawing settings
   SetIndexStyle(0,DRAW_SECTION);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
   ArraySetAsSeries(ExtMapBuffer,true);
   ArraySetAsSeries(ExtMapBuffer2,true);
//---- indicator short name
   IndicatorShortName("Fibodrawer");
//---- initialization done
   return(0);
  }
  
int deinit() 
{
	ObjectDelete("Fibo1");
	ObjectDelete("Fibo2");
	ObjectDelete("Fibo3");

   ObjectDelete("X");
   ObjectDelete("B");
   ObjectDelete("A");
   ObjectDelete("C");
   ObjectDelete("D");
  
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {   double Points = MarketInfo (Symbol(), MODE_POINT);
      int    shift, back,lasthighpos,lastlowpos;
      double val,res;
      double curlow,curhigh,lasthigh,lastlow;

      for(shift=Bars-ExtDepth; shift>=0; shift--)
         {
            val=Low[Lowest(NULL,0,MODE_LOW,ExtDepth,shift)];
            if(val==lastlow) val=0.0;
            else 
            { 
            lastlow=val; 
            if((Low[shift]-val)>(ExtDeviation*Point)) val=0.0;
            else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0; 
              }
           }
        } 
      ExtMapBuffer[shift]=val;
      //--- high
      val=High[Highest(NULL,0,MODE_HIGH,ExtDepth,shift)];
      if(val==lasthigh) val=0.0;
      else 
        {
         lasthigh=val;
         if((val-High[shift])>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0; 
              } 
           }
        }
      ExtMapBuffer2[shift]=val;
     }

   // final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
  
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) ExtMapBuffer[shift]=res;
        }

     }
     
  	int i=0;
  	int LastZigZag, PreviousZigZag,PreviousZigZag2,PreviousZigZag3,PreviousZigZag4;
   
   int h=0;
   while ( ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) 
         {h++;}
   LastZigZag=h;
   h++;
   while(ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) 
         {h++;}
   PreviousZigZag=h;
   h++;
   while(ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) 
      {h++;}
   PreviousZigZag2=h;
   h++;
   while(ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) 
      {h++;}
   PreviousZigZag3=h;
   h++;
   while(ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) 
      {h++;}
   PreviousZigZag4=h;
   
 
   topD=High[LastZigZag];
   botD=Low[LastZigZag];
   topC=High[PreviousZigZag];
   botC=Low[PreviousZigZag];
   topB=High[PreviousZigZag2];
   botB=Low[PreviousZigZag2];
   topA=High[PreviousZigZag3];
   botA=Low[PreviousZigZag3];
   topX=High[PreviousZigZag4];
   botX=Low[PreviousZigZag4];
   TimeD=Time[LastZigZag];
   TimeC=Time[PreviousZigZag];
   TimeB=Time[PreviousZigZag2];
   TimeA=Time[PreviousZigZag3];
   TimeX=Time[PreviousZigZag4];
 if(topD>topC)// D IS A PEAK
      {//defining fib1 as CD retracement
         TS1=TimeC;
         PS1=botC;
         TT1=TimeD;
         PT1=topD;
         if (topB<topD)
         {//defining fib2 as BC retracement
            TS2=TimeB;
            PS2=topB;
            TT2=TimeC;
            PT2=botC;
         }
         if (topB>=topD)
         {//defining fib2 as BC extension
            TS2=TimeC;
            PS2=botC;
            TT2=TimeB;
            PT2=topB;
         }
         if (botA<=botC)
         {//defining fib3 as AB retracement
            TS3=TimeA;
            PS3=botA;
            TT3=TimeB;
            PT3=topB;
         }
      }
      
      if(botD<botC)// D IS A TROUGH
      {//defining fib1 as CD retracement
         TS1=TimeC;
         PS1=topC;
         TT1=TimeD;
         PT1=botD;
         if (botB<=botD)
         {//defining fib2 as BC retracement
            TS2=TimeB;
            PS2=botB;
            TT2=TimeC;
            PT2=topC;
         }
         if (botB>botD)
         {//defining fib2 as BC extension
            TS2=TimeC;
            PS2=topC;
            TT2=TimeB;
            PT2=botB;
         }
         //defining fib3 as AB retracement
            TS3=TimeA;
            PS3=topA;
            TT3=TimeB;
            PT3=botB;
         
      }    
      
      
      
      
  // CREATE X,A,B,C,D TEXTS
  if(botD<botC)// D IS A TROUGH
      {//Alert("cas 1");
      
      posD=botD;
      posC=topC+11*Points;
      posB=botB;
      posA=topA+11*Points;
      posX=botX;
      XA=(topA-botX)/Points;
      AB=(topA-botB)/Points;
      BC=(topC-botB)/Points;
      CD=(topC-botD)/Points;
      
     Comment("XA= ",XA," AB=",AB," BC=",BC," CD=",CD);
      }
  if(topD>topC)// D IS A PEAK
      {//Alert("cas 2");
      
      posD=topD;
      posC=botC;
      posB=topB;
      posA=botA;
      posX=topX;
      XA=(topX-botA)/Points;
      AB=(topB-botA)/Points;
      BC=(topB-botC)/Points;
      CD=(topD-botC)/Points;
      XAAB=AB/XA;
      ABBC=BC/AB;
      BCCD=CD/BC;
      Comment("XA= ",XA," AB=",AB," BC=",BC," CD=",CD," AB/XA=",XAAB," BC/AB=",ABBC," CD/BC=",BCCD);
      }   
  
   ObjectCreate("X", OBJ_TEXT, 0, Time[PreviousZigZag4],posX);  
   ObjectSetText("X", "X", 14, "Arial", Yellow); 
   ObjectCreate("A", OBJ_TEXT, 0, Time[PreviousZigZag3],posA);  
   ObjectSetText("A", "A", 14, "Arial", Yellow);
   ObjectCreate("B", OBJ_TEXT, 0, Time[PreviousZigZag2],posB);  
   ObjectSetText("B", "B", 14, "Arial", Yellow);
   ObjectCreate("C", OBJ_TEXT, 0, Time[PreviousZigZag],posC);  
   ObjectSetText("C", "C", 14, "Arial", Yellow);
   ObjectCreate("D", OBJ_TEXT, 0, Time[LastZigZag],posD);  
   ObjectSetText("D", "D", 14, "Arial", Yellow); 
   // END OF TEXT CREATION
   
  
        
     // START DRAWING FIBS
         ObjectCreate("Fibo1", OBJ_FIBO, 0,TS1,PS1,TT1,PT1);
   	   ObjectSet("Fibo1", OBJPROP_COLOR, White);
   	   ObjectSet("Fibo1", OBJPROP_STYLE, STYLE_SOLID);
         ObjectCreate("Fibo2", OBJ_FIBO, 0,TS2,PS2,TT2,PT2);
         ObjectSet("Fibo2", OBJPROP_COLOR, Yellow);
   	   ObjectSet("Fibo2", OBJPROP_STYLE, STYLE_SOLID);
   	   if (PS3>0)// if fib3 is defined 
   	     {  
   	        ObjectCreate("Fibo3", OBJ_FIBO, 0, TS3,PS3,TT3,PT3);
   	        ObjectSet("Fibo3", OBJPROP_COLOR, DodgerBlue);
   	        ObjectSet("Fibo3", OBJPROP_STYLE, STYLE_SOLID);
   	     }
   level_count=ArraySize(level_array);
   //Alert(level_count);
   
   ObjectSet("Fibo1", OBJPROP_FIBOLEVELS, level_count);
   ObjectSet("Fibo2", OBJPROP_FIBOLEVELS, level_count);
   ObjectSet("Fibo3", OBJPROP_FIBOLEVELS, level_count);
   
   for(int j=0; j<level_count; j++)
   {//Print(j," ",level_array[j]);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+j, level_array[j]);
   ObjectSetFiboDescription("Fibo1",j,leveldesc_array[j]);

   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+j, level_array[j]);
   ObjectSetFiboDescription("Fibo2",j,leveldesc_array[j]+"           ");
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+j, level_array[j]);
   ObjectSetFiboDescription("Fibo3",j,leveldesc_array[j]+"                      ");
   ObjectSet( "Fibo1", OBJPROP_LEVELCOLOR, FibColor1) ;
   ObjectSet( "Fibo2", OBJPROP_LEVELCOLOR, FibColor2) ;
   ObjectSet( "Fibo3", OBJPROP_LEVELCOLOR, FibColor3) ;
   /*level_name="essai"+j;
   text_y=PS1+(PT1-PS1)*level_array[j];
   //Print(level_array[j]," ",text_y);
   ObjectDelete(level_name);
   ObjectCreate(level_name, OBJ_TEXT, 0, Time[1],text_y);  
   ObjectSetText(level_name, leveldesc_array[j], 8, "Arial", Yellow);
   //FiboLC = FiboL + (FiboH - FiboL)*0.236;*/
   }
/*
   ObjectSet("Fibo1", OBJPROP_FIBOLEVELS, 11);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+0, 0);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+1, 0.236);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+2, 0.382);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+3, 0.5);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+4, 0.618);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+5, 0.786);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+6, 1);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+7, 1.276);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+8, 1.618);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+9, 2.058);
   ObjectSet("Fibo1", OBJPROP_FIRSTLEVEL+10, 261.8);
   
   ObjectSet("Fibo2", OBJPROP_FIBOLEVELS, 11);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+0, 0);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+1, 0.236);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+2, 0.382);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+3, 0.5);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+4, 0.618);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+5, 0.786);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+6, 1);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+7, 1.276);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+8, 1.618);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+9, 2.058);
   ObjectSet("Fibo2", OBJPROP_FIRSTLEVEL+10, 261.8);
   
   ObjectSet("Fibo3", OBJPROP_FIBOLEVELS, 11);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+0, 0);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+1, 0.236);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+2, 0.382);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+3, 0.5);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+4, 0.618);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+5, 0.786);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+6, 1);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+7, 1.276);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+8, 1.618);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+9, 2.058);
   ObjectSet("Fibo3", OBJPROP_FIRSTLEVEL+10, 261.8);
 */   

}
  
   



Sample





Analysis



Market Information Used:

Series array that contains the lowest prices of each bar
Series array that contains the highest prices of each bar
Series array that contains open time of each bar


Indicator Curves created:

Implements a curve of type DRAW_SECTION


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: