ZigZag_Fibo_v2beta





// fukinagashi
#include <stdlib.mqh>
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int ExtDepth=5;
extern int ExtDeviation=4;
extern int ExtBackstep=6;
extern color FibColor1= Yellow;
extern bool Corner_of_Chart_RIGHT_TOP = false;
extern int level1=0.25;
extern int level2=0.50;
extern int level3=0.75;
extern int level4=1.00;
extern int level5=0.00;


//---- indicator buffers
double ExtMapBuffer[];
double ExtMapBuffer2[];
double level_array[13]={0,0.25,0.50,0.75,1};
string leveldesc_array[13]={"0","25%","50%","75%","100%"};
double level_array2[13]={0.25};
string leveldesc_array2[13]={"25%"+ ")" + " - %$"} ;
double level_array3[13]={0.5};
int level_count;
string level_name;
double text_y;
int OldLastZigZag, OldPreviousZigZag;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//string level_array[13]={0,level1,level2,level3,level4,level5};
  
   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("Fibo");
}
//+------------------------------------------------------------------+
//|   script program start function                                                                     |
//+------------------------------------------------------------------+
int start()

{
   
   string SPREAD="",PIPS="",PRC,Pips="",PIPS2="",PIPS3="";


   double OPEN = iOpen(NULL,1440,0);
   double CLOSE = iClose(NULL,1440,0);
   double SPRD = (Ask - Bid)/Point;
   //double SPRD = fibolevel*0.25 - fibolevel*0.50;///Point;
   PIPS =  DoubleToStr((CLOSE-OPEN)/Point,0);
   SPREAD = (DoubleToStr(SPRD,Digits-4));
   PIPS2= (OBJPROP_FIRSTLEVEL)*Ask;//+ level_array2[0] - level_array3[0])* 2;
   //PIPS2= (level_array2[0] - level_array3[0]+ 0.618)* 2;//(Ask+ level_array2[13])/Point;//1,0.382;//*;,ObjectGetFiboDescription
   //PIPS2 = (DoubleToStr(PIPS3,Digits-1));


  datetime date = D'2009.07.10';
  date -= 7*24*60*60;
  Print( TimeToStr(date) );
  
   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;
        }

     }
     
  for(int i=0;i<32;i++)
  	int LastZigZag, PreviousZigZag;
   
   int h=0;
   while ( ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) {
   	h++;
   }
   
   LastZigZag=h;
   
   h++;
   while(ExtMapBuffer[h]==0 && ExtMapBuffer2[h]==0) {
   	h++;
   }
   
   PreviousZigZag=h;
   
   if (OldLastZigZag!=LastZigZag || OldPreviousZigZag!=PreviousZigZag) {
   	OldLastZigZag=LastZigZag;
   	OldPreviousZigZag=PreviousZigZag;
   
   
   
   	ObjectDelete("Fibo");
  		//ObjectDelete("Line1");
      //ObjectDelete("Line2");
   	ObjectDelete("Fibo1");
   	ObjectDelete("Fibo2");
   	ObjectDelete("Fibo3");
   	ObjectDelete("MMLEVELS9");
   	ObjectDelete("MMLEVELS10");   	
   	
   	
   	
// START DRAWING FIBS
   ObjectCreate("Fibo", OBJ_FIBO,0, Time[5], ExtMapBuffer[LastZigZag], Time[0], ExtMapBuffer[PreviousZigZag]);
   ObjectSet("Fibo", OBJPROP_COLOR, Red);
   ObjectSet("Fibo", OBJPROP_STYLE, STYLE_DASHDOT);
   ObjectSet("Fibo", OBJPROP_FIBOLEVELS, level_count);
   ObjectSet("Fibo",  OBJPROP_RAY, 0 );
   	
   for(int j=0; j<level_count; j++)
   {//Print(j," ",[j]);
   
   ObjectSet("Fibo",OBJPROP_FIRSTLEVEL+j, level_array[j]);
   ObjectSetFiboDescription("Fibo",j,leveldesc_array[j] + ")" + " - %$");

   ObjectSet( "Fibo", OBJPROP_LEVELCOLOR, FibColor1) ;
   ObjectSet("Fibo",OBJPROP_LEVELSTYLE,STYLE_DOT);
   ObjectSet("Fibo",  OBJPROP_RAY, 0 );
   
//+------------------------------------------------------------------+
//|   NOUVEAU                                                                |
//+------------------------------------------------------------------+   
   
   //ObjectCreate("Line1", OBJ_TREND, 0, Time[20], Low[20], Time[0], Low[20]);
   //ObjectSet("Line1", OBJPROP_COLOR, Yellow );
   //ObjectSet("Line1",  OBJPROP_RAY, 0 );
   
   //ObjectCreate("Line2", OBJ_TREND, 0, Time[20], High[20], Time[0], High[0]);
   //ObjectSet("Line2", OBJPROP_COLOR, White );
   //ObjectSet("Line2",  OBJPROP_RAY, 0 );

   }
 
// START DRAWING FIBS # 

ObjectCreate("Fibo1", OBJ_FIBO,0, Time[3], ExtMapBuffer[LastZigZag], Time[1], ExtMapBuffer[PreviousZigZag]);

   //ObjectSet("Fibo1",OBJPROP_FIRSTLEVEL+1,0.382);
   //ObjectSetFiboDescription("Fibo1",j,leveldesc_array2[j] + ")" + " - %$"); 	
   //ObjectSetText("Fibo1",""+level_array2[j]+"", 15, "Arial Bold", Yellow);   
   
   //ObjectSet("Fibo1", OBJPROP_COLOR, White);
   //ObjectSet("Fibo1", OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet("Fibo1", OBJPROP_FIBOLEVELS, level_count);
   ObjectSet("Fibo1",OBJPROP_FIRSTLEVEL+1,0.382);
   ObjectSetFiboDescription("Fibo1", 1, "38.2" + ")" + " - %$");   	
   ObjectSet( "Fibo1", OBJPROP_LEVELCOLOR, Pink) ;
   ObjectSet("Fibo1",OBJPROP_LEVELSTYLE,SYMBOL_LEFTPRICE);

//#include <stdlib.mqh>
  
 // string text;
//  for(int i=0;i<32;i++)
 //   {
 //   {
 //    text=ObjectGetFiboDescription("Fibo3",i);
 //    //---- checking whether the objects has less than 32 levels
     //if(GetLastError()!=ERR_NO_ERROR) break;
 //    Print("Fibo3","level: ",i," description: ",text);
 //   }



   ObjectCreate("Fibo3", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("Fibo3",0, 10, "Arial Bold", Lime); //ObjectGetFiboDescription, ObjectGetFiboDescription
   ObjectSet("Fibo3", OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
   ObjectSet("Fibo3", OBJPROP_XDISTANCE, 40);
   ObjectSet("Fibo3", OBJPROP_YDISTANCE, 205); 
        
    }
  
   //ObjectCreate("Fibo1", OBJ_LABEL, 0, 0, 0);
   //ObjectSet("Fibo1",OBJPROP_FIRSTLEVEL+j, level_array2[j]);

   //ObjectSet("Fibo1", OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
   //ObjectSet("Fibo1", OBJPROP_XDISTANCE, 40);
   //ObjectSet("Fibo1", OBJPROP_YDISTANCE, 125);
   //ObjectSet("Fibo1",OBJPROP_FIRSTLEVEL+1,0.382);
   //ObjectSetFiboDescription("Fibo1", 1, "38.2  -->  "+DoubleToStr(fiboPrice*0.382+fiboPrice1, cPoint) ); 
   
   
   ObjectCreate("Fibo2", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("Fibo2", "Upper Target=  "+PIPS2+"", 10, "Arial Bold", Lime);
   ObjectSet("Fibo2", OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
   ObjectSet("Fibo2", OBJPROP_XDISTANCE, 40);
   ObjectSet("Fibo2", OBJPROP_YDISTANCE, 165);
 
                 ObjectCreate("MMLEVELS9", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("MMLEVELS9","Pips to Open", 9, "Arial", White);
   ObjectSet("MMLEVELS9", OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
   ObjectSet("MMLEVELS9", OBJPROP_XDISTANCE, 40);
   ObjectSet("MMLEVELS9", OBJPROP_YDISTANCE, 75); 
   
               ObjectCreate("MMLEVELS10", OBJ_LABEL, 0, 0, 0);
   ObjectSetText("MMLEVELS10",""+PIPS+"", 9, "Arial Bold", Yellow);
   ObjectSet("MMLEVELS10", OBJPROP_CORNER, Corner_of_Chart_RIGHT_TOP);
   ObjectSet("MMLEVELS10", OBJPROP_XDISTANCE, 10);
   ObjectSet("MMLEVELS10", OBJPROP_YDISTANCE, 75);  
   
        
//string ObjectGetFiboDescription( string name, int index);     
    
    
// new text object
//if(!ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045))
//{
//Print("error: can't create text_object! code #",GetLastError());
//return(0);
//}
// new label object
//if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0))
//{
//Print("error: can't create label_object! code #",GetLastError());
//return(0);
//}
//ObjectSet("label_object", OBJPROP_XDISTANCE, 200);
//ObjectSet("label_object", OBJPROP_YDISTANCE, 100);

   	//Alert("New ZigZag and new Fibo drawn");
   	//PlaySound("alert.wav");
      level_count=ArraySize(level_array);
      level_count=ArraySize(level_array2);
   //Alert(level_count); 
   }
//
  
   



Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains close prices for each bar
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: