Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
RenkoSW
//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "http://dmffx.com"
#property link      "http://dmffx.com"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_color3 Black


#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3


//---- input parameters
extern int       BoxSize      =  10;
extern int       Reverse      =  2;

double bs;

//---- buffers
double VAL[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];

double RB[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

   
   IndicatorBuffers(5);
   
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer3);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer4);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,ExtMapBuffer5); 
 
     
   SetIndexBuffer(3,VAL);
   SetIndexBuffer(4,RB);

   
   
   Reverse--;
   if(Reverse<0)Reverse=0;
   
   bs=Point*BoxSize;
   
   SetIndexEmptyValue(0,0);
   SetIndexEmptyValue(1,0);
   SetIndexEmptyValue(2,0);
   

   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){

         static int S;
         static double LastTime,cH,cL,cD,pH,pL,pD;
         
         int cb=IndicatorCounted(),limit=Bars-cb-1;

               if(cb==0){
                  pH=0;
                  cH=0;
                  pL=0;
                  cL=0;
                  pD=0;
                  cD=0;     
                  ArrayInitialize(VAL,0);
                  ArrayInitialize(ExtMapBuffer3,0);    
                  ArrayInitialize(ExtMapBuffer4,0);
                  ArrayInitialize(ExtMapBuffer5,0);                     
                  ArrayInitialize(RB,0);                            
               }

            for(int i=limit;i>=0;i--){
            
               if(Time[i]>LastTime){
                  LastTime=Time[i];
                  pH=cH;
                  pL=cL;
                  pD=cD;
               }
               else{
                  cH=pH;
                  cL=pL;
                  cD=pD;     
               }            
            
            

               RB[i]=RB[i+1];
               
               int BoxNum=MathFloor(Close[i]/bs);
               
               
                  switch(cD){
                     case 0:
                        if(i==Bars-1){
                           cH=BoxNum;
                           cL=BoxNum;
                        }
                        else{
                           cH=MathMax(cH,BoxNum);
                           cL=MathMin(cL,BoxNum);
                              if(BoxNum<cH-Reverse){
                                 cD=-1;
                                 cL=BoxNum;
                                 RB[i]=Bars-i;
                                 S=RB[i];
                              }
                              if(BoxNum>cL+Reverse){
                                 cD=1;
                                 cH=BoxNum;
                                 RB[i]=Bars-i;
                                 S=RB[i];
                              }   
                                                      
                       }
                     break;
                     case 1:
                           cH=MathMax(cH,BoxNum);
                           VAL[i]=cH;
                              if(BoxNum<cH-Reverse){
                                 cD=-1;
                                 cL=BoxNum;
                                 VAL[i]=cL;
                                 RB[i]=Bars-i;
                              }
                              
                     break;
                     case -1:
                           cL=MathMin(cL,BoxNum);
                           VAL[i]=cL;
                              if(BoxNum>cL+Reverse){
                                 cD=1;
                                 cH=BoxNum;
                                 VAL[i]=cH;
                                 RB[i]=Bars-i;
                              }  
                     break;
                  }
                  
                  
                  

            }
            
        //return(0);
         
         int RevInd=0,pRevInd=-1;
         double SV,EV;
         int ii=0;

         
            while(RB[RevInd]!=S && ii<Bars){
               SV=VAL[RevInd];
               RevInd=Bars-RB[RevInd]+1;
               EV=VAL[RevInd];  
                  if(SV>EV){
                     for(int x=SV;x>=EV+1 && ii<Bars;x--){
                        ExtMapBuffer4[ii]=0;//x*bs;
                        ExtMapBuffer3[ii]=x*bs+bs;
                        ExtMapBuffer5[ii]=x*bs;
                        
                        ii++;
                     }
                  }
                  else{
                     for(x=SV;x<=EV-1 && ii<Bars;x++){
                        ExtMapBuffer3[ii]=0;//x*bs;
                        ExtMapBuffer4[ii]=x*bs+bs;
                        ExtMapBuffer5[ii]=x*bs;
                        
                        ii++;
                     }                  
                  }
            }
         ExtMapBuffer3[ii]=0;
         ExtMapBuffer4[ii]=0;
         ExtMapBuffer4[ii]=0;         
         ExtMapBuffer3[ii+1]=0;
         ExtMapBuffer4[ii+1]=0;         
         ExtMapBuffer5[ii+1]=0;           
         
         return(0);
}

Comments