Three Line Break_v2

Author: Equipe Forex
Three Line Break_v2
Miscellaneous
Implements a curve of type %1
2 Views
0 Downloads
0 Favorites
Three Line Break_v2
//+------------------------------------------------------------------+
//|                                             Three Line Break.mq4 |
//|                                                     Equipe Forex |
//|                                       http://www.equipeforex.com |
//+------------------------------------------------------------------+
#property copyright "Equipe Forex"
#property link      "http://www.equipeforex.com"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int       BreakPeriod=5;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i, j, CurrentTrend;
   bool CalculateLowHigh=true;
   double Value1, Value2, LowestBox, HighestBox;
   double BoxHigh[], BoxLow[];
//----
   ArrayResize(BoxHigh, BreakPeriod + 2);
   ArrayResize(BoxLow, BreakPeriod + 2);
   //
   ArrayInitialize(BoxHigh, -1000);
   ArrayInitialize(BoxLow, 1000);
   //
   i=Bars-1;
     if (Close[i] < Open[i]) 
     {
      CurrentTrend=-1;
      BoxHigh[BreakPeriod + 1]=Open[i];
      BoxLow[BreakPeriod + 1]=Close[i];
      Value1=Low[i];
      Value2=High[i];
      }
       else 
      {
      CurrentTrend=1;
      BoxHigh[BreakPeriod + 1]=Close[i];
      BoxLow[BreakPeriod + 1]=Open[i];
      Value1=High[i];
      Value2=Low[i];
     }
   ExtMapBuffer1[i]=Value1;
   ExtMapBuffer2[i]=Value2;
   i--;
     while(i>=0) 
     {
      Value1=0;
      Value2=0;
//----
        if (CalculateLowHigh) 
        {
         LowestBox=BoxLow[ArrayMinimum(BoxLow)];
         HighestBox=BoxHigh[ArrayMaximum(BoxHigh)];
         CalculateLowHigh=false;
        }
      if (((CurrentTrend > 0) && (Close[i] < LowestBox)) ||
             (CurrentTrend < 0) && (Close[i] < BoxLow[BreakPeriod + 1])) 
             {
         Value1=Low[i];
         Value2=High[i];
         //
         shiftArrays(BoxLow, BoxHigh);
         //
         BoxHigh[BreakPeriod + 1]=BoxLow[BreakPeriod + 1];
         BoxLow[BreakPeriod + 1]=Close[i];
         //
         CurrentTrend=-1;
         CalculateLowHigh=true;
        } 
        else if (((CurrentTrend < 0) && (Close[i] > HighestBox)) ||
                        (CurrentTrend > 0) && (Close[i] > BoxHigh[BreakPeriod + 1])) 
                        {
            Value1=High[i];
            Value2=Low[i];
            //
            shiftArrays(BoxLow, BoxHigh);
            //
            BoxLow[BreakPeriod + 1]=BoxHigh[BreakPeriod + 1];
            BoxHigh[BreakPeriod + 1]=Close[i];
            //
            CurrentTrend=1;
            CalculateLowHigh=true;
           }
      ExtMapBuffer1[i]=Value1;
      ExtMapBuffer2[i]=Value2;
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| shift array function                                             |
//+------------------------------------------------------------------+
  void shiftArrays(double& array1[], double& array2[]) 
  {
     for(int j=0; j<=BreakPeriod; j++) 
     {
      array1[j]=array1[j + 1];
      array2[j]=array2[j + 1];
     }
  }
//+------------------------------------------------------------------+

Comments