wlxFractals_v4

Author: Copyright � 2004, by wellx
Miscellaneous
Implements a curve of type %1
1 Views
0 Downloads
0 Favorites
wlxFractals_v4
//+------------------------------------------------------------------+
//|                                                  wlxFractals.mq4 |
//|         Copyright © 2004, by konKop, GOODMAN, Mstera, af + wellx |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, by wellx"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int Equals=5;
extern int nLeftUp=2;
extern int nRightUp=2;
extern int nLeftDown=2;
extern int nRightDown=2;
//---- buffers
double FractalsUp[];
double FractalsDown[];
//----
int pos=0,cntup=0,cntdown=0,cnt=0;
int r=0,l=0,e=0;
int fup=0,fdown=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,FractalsUp);
   SetIndexBuffer(1,FractalsDown);
//----
   SetIndexStyle(0,DRAW_ARROW,0,1);
   SetIndexArrow(0,217);
//----
   SetIndexStyle(1,DRAW_ARROW,0,1);
   SetIndexArrow(1,218);
//----
   cntup=nLeftUp+nRightUp+Equals+1;
   cntdown=nLeftDown+Equals+1;
   if(cntup>=cntdown)
      cnt=cntup;
   if(cntup<cntdown)
      cnt=cntdown;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i=0,j=0;
   int cbars=IndicatorCounted();
//----
   if(cbars<0)
      return(-1);
//----
   if(cbars>0)
      cbars--;
   pos=0;
//----
   if(cbars>(Bars-cnt-1))
      pos=(Bars-cnt-1);
   else
      pos=Bars -(cbars+nRightUp);
  if(cbars==0) pos-=Equals;       
//----
   while(pos>=nRightUp)
     {
      FractalsUp[pos]=NULL;
      FractalsDown[pos]=NULL;
      //ôÐÀÊÒÀË ÂÂÅÐÕ
      r=nRightUp; //ïðîâåðÿåì ïðàâóþ ñòîðîíó ôðàêòàëà
      //----
      for(i=1; i<=r; i++)
        {
         if(High[pos]<=High[pos-i])
            break;
        }
      //åñëè ñïðàâà âñå ÎÊ òî i äîëæíî áûòü ðàâíî r+1
      if(i==r+1) //FractalsUp[pos]=High[pos];
        {
         l=nLeftUp;  //ïðîâåðÿåì ëåâóþ ñòîðîíó ôðàêòàëà
         e= Equals;
         //----
         for(j=1; j<=l+Equals; j++)
           {
            if(High[pos]<High[pos+j])
               break;
            //----
            if(High[pos]>High[pos+j])
               l--;
            //----
            if(High[pos]==High[pos+j])
               e--;
            //----
            if(l==0)
              {
               FractalsUp[pos]=High[pos];
               break;
              }
            //----
            if(e<0)
               break;
           }
        }
      //ÔÐÀÊÒÀË ÂÍÈÇ
      r=nRightDown; //ïðîâåðÿåì ïðàâóþ ñòîðîíó ôðàêòàëà
      //----
      for(i=1; i<=r; i++)
        {
         if(Low[pos]>=Low[pos-i])
            break;
        }
      //----
      if(i==r+1) //FractalsUp[pos]=High[pos];
        {
         l=nLeftDown;  //ïðîâåðÿåì ëåâóþ ñòîðîíó ôðàêòàëà
         e= Equals;
         //----
         for(j=1; j<=l+Equals; j++)
           {
            if(Low[pos]>Low[pos+j])
               break;
            //----
            if(Low[pos]<Low[pos+j])
               l--;
            //----
            if(Low[pos]==Low[pos+j])
               e--;
            //----
            if(l==0)
              {
               FractalsDown[pos]=Low[pos];
               break;
              }
            if(e<0)
               break;
           }
        }
      pos--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments