ZZ SR TL Indicator_v2

Author: RD
ZZ SR TL Indicator_v2
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each barSeries array that contains open time of each bar
0 Views
0 Downloads
0 Favorites
ZZ SR TL Indicator_v2
//+------------------------------------------------------------------+
//|                                             SUPRESMultiFrame.mq4 |
//|                                                                  |
//|                                                            RD    |
//+------------------------------------------------------------------+
#property copyright "RD"
#property link      "marynarz15@wp.pl"
#property indicator_chart_window
#define MaxObject    1000
//---- indicator parameters
extern int TimeFrame=15;
extern int BarsMax=144;
extern int ExtDepth=12;
extern int ExtDeviation=1;
extern int ExtBackstep=5;
bool DeleteObjectsOnExit=true;
color LineColor1=Red;
color LineColor5=Red;
color LineColor15=Red;
color LineColor30=Red;
color LineColor60=Red;
color LineColor240=Orange;
color LineColor1440=Red;
color LineColor10080=Red;
//-----------------------
double ExtMapBuffer[];
double ExtMapBuffer2[];
int SUPRESCount=0;
int linewidth;
string NamePattern;
color LineColor;
//+------------------------------------------------------------------+
//|                           Delete objects                         |
//+------------------------------------------------------------------+
int DeleteSupRes()
  {
   int ObjectCount=ObjectsTotal();
   string names[MaxObject];
   for(int i=0; i<ObjectCount;i++)
      names[i]=ObjectName(i);
   for(i=0; i<ObjectCount;i++)
     {
      string objname=names[i];
      objname=StringSubstr(objname,0,StringLen(NamePattern));
      if (objname!=NamePattern || ObjectType(names[i])!=OBJ_TREND)
         names[i]="";
     }
   for(i=0; i<ObjectCount;i++)
     {
      if (names[i]!="")
        {
        ObjectDelete(names[i]);}
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(2);
   SetIndexBuffer(0,ExtMapBuffer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(0,0.0);
   ArraySetAsSeries(ExtMapBuffer,true);
   ArraySetAsSeries(ExtMapBuffer2,true);
   switch(TimeFrame)
     {
      case 1: linewidth=1; LineColor=LineColor1; break;
      case 5: linewidth=1; LineColor=LineColor5; break;
      case 15: linewidth=1; LineColor=LineColor15; break;
      case 30: linewidth=1; LineColor=LineColor30; break;
      case 60: linewidth=1; LineColor=LineColor60; break;
      case 240: linewidth=1; LineColor=LineColor240; break;
      case 1440: linewidth=1; LineColor=LineColor1440; break;
      case 10080: linewidth=1; LineColor=LineColor10080; break;
      default: linewidth=1; TimeFrame=Period(); break;
     }
   NamePattern=DoubleToStr(TimeFrame,0)+" SUPRES ";
   if (BarsMax<55) BarsMax=55;
//----
   DeleteSupRes();
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   if (DeleteObjectsOnExit) DeleteSupRes();
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;
   string objectname;
//----
   if(BarsMax==0) {BarsMax=Bars/2;}// return(0);
   for(shift=iBars(NULL,TimeFrame)-ExtDepth; shift>=0; shift--)
     {
      val=iLow(NULL,TimeFrame,Lowest(NULL,TimeFrame,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(NULL,TimeFrame,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=iHigh(NULL,TimeFrame,Highest(NULL,TimeFrame,MODE_HIGH,ExtDepth,shift));
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(NULL,TimeFrame,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=iBars(NULL,TimeFrame)-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=iBars(NULL,TimeFrame)-1; shift>=0; shift--)
     {
      if(shift>=iBars(NULL,TimeFrame)-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         res=ExtMapBuffer2[shift];
         if(res!=0.0) ExtMapBuffer[shift]=res;
        }
     }
//----
   int count=0;
   double TempBufferPrice[MaxObject];
   int TempBufferBar[MaxObject];
   string ObjectNames[MaxObject];
//----
   for(shift=BarsMax; shift>0; shift--)
      if (ExtMapBuffer[shift]>0)
        {
         count++;
         TempBufferPrice[count-1]=ExtMapBuffer[shift];
         TempBufferBar[count-1]=shift;
        }
   for(int i=0; i<count; i++)
         ObjectNames[i]=/*TimeFrame+"m S/R("+i+")"+DoubleToStr(TempBufferPrice[i],Digits)+" "+*/
      TimeToStr(iTime(NULL,TimeFrame,TempBufferBar[i]),TIME_DATE|TIME_MINUTES);
//----
   int ObjectForDeleteCount=0;
   string ObjectsForDelete[MaxObject];
   for(i=0; i<ObjectsTotal(); i++)
     {
      objectname=ObjectName(i);
      if (StringSubstr(objectname,0,StringLen(NamePattern))==NamePattern)
        {
         ObjectForDeleteCount++;
         ObjectsForDelete[ObjectForDeleteCount-1]=objectname;
        }
     }
   for(i=0; i<count-2; i++)
     {
      objectname=ObjectNames[i];
      for(int j=0; j<ObjectForDeleteCount; j++)
         if(ObjectsForDelete[j]==objectname)
           {
            ObjectsForDelete[j]="";
            break;
           }
     }
   for(j=0; j<ObjectForDeleteCount; j++)
      if (ObjectsForDelete[j]!="")
        {
         ObjectDelete(ObjectsForDelete[j]);
        }
//----        
   for(i=0; i<count; i++)
     {
      if (ObjectFind(ObjectNames[i])==-1)
        {
         ObjectCreate(ObjectNames[i],OBJ_TREND,0,iTime(NULL,TimeFrame,TempBufferBar[i]),TempBufferPrice[i],
                          iTime(NULL,TimeFrame,TempBufferBar[i])+10080*60,TempBufferPrice[i]);
         ObjectSet(ObjectNames[i],OBJPROP_WIDTH,linewidth);
         ObjectSet(ObjectNames[i],OBJPROP_COLOR,LineColor);
         ObjectSet(ObjectNames[i],OBJPROP_RAY,True);
                ObjectSetText(ObjectNames[i],ObjectNames[i]/*+" "+DoubleToStr(TempBufferPrice[i],Digits),8,"Courier",LightSteelBlue*/);
        }
     }
  }
//+------------------------------------------------------------------+

Comments