PLEASE: I need help to make this indicator multi-timeframe (mtf)

 
Please help me convert this fibo indicator to mtf.
//------------------------------------------------------------------
//
//
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 1
extern int     ExtDepth         = 30;
extern int     ExtDeviation     = 5;
extern int     ExtBackstep      = 3;
extern string  FiboLevels       = "-61.8;-27.2;0;23.6;50;75;100;127.2;161.8";
extern color   Fibo1Color       = clrNONE;
extern int     Fibo1Width       = 1;
extern int     Fibo1Style       = STYLE_DOT;
extern int     Fibo1LevelsStyle = STYLE_SOLID;
extern color   Fibo2Color       = Aqua;
extern int     Fibo2Width       = 1;
extern int     Fibo2Style       = STYLE_DOT;
extern int     Fibo2LevelsStyle = STYLE_SOLID;
extern bool    ShowPrevious     = true;

//
//
//
//
//

extern string _                      = "alerts behaviour";
extern bool   alertsOn               = false;
extern double alertsTolerance        = 1.0;
extern bool   touchChanell           = false;
extern bool   alertsOnCurrent        = true;
extern bool   alertsMessage          = true;
extern bool   alertsSound            = false;
extern bool   alertsEmail            = false;
extern bool   alertsShowTouched      = true;
extern int    barsToShowCandles      = 1000;
extern color  BarUpColor             = Green; 
extern color  BarDownColor           = Red; 
extern color  WickColor              = Gray;
extern int    CandleWidth            = 3;

//
//
//
//
//

double ExtMapBuffer[];
double ExtLowBuffer[];
double ExtHighBuffer[];

//
//
//
//
//

int    totalCandles;
string windowID;
double levelv[];
string levels[];
double values[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int init()
{

      FiboLevels = StringTrimLeft(StringTrimRight(FiboLevels));
      if (StringSubstr(FiboLevels,StringLen(FiboLevels),1) != ";")
                       FiboLevels = StringConcatenate(FiboLevels,";");

         //
         //
         //
         //
         //                                   

         int  s      = 0;
         int  i      = StringFind(FiboLevels,";",s);
         string current;
            while (i > 0)
            {
               current = StringSubstr(FiboLevels,s,i-s);
               ArrayResize(levels,ArraySize(levels)+1); levels[ArraySize(levels)-1] =             current+" price %$ ";
               ArrayResize(levelv,ArraySize(levelv)+1); levelv[ArraySize(levelv)-1] = StrToDouble(current);
                           s = i + 1;
                               i = StringFind(FiboLevels,";",s);
            }
         ArrayResize(values,ArraySize(levelv));
   //
   //
   //
   //
   //
   
   IndicatorBuffers(4);
      SetIndexBuffer(1,ExtMapBuffer);
      SetIndexBuffer(2,ExtLowBuffer);
      SetIndexBuffer(3,ExtHighBuffer);
      SetIndexEmptyValue(1,0.0);
      SetIndexEmptyValue(2,0.0);
      SetIndexEmptyValue(3,0.0);
   IndicatorShortName("fibo retracement("+ExtDepth+","+ExtDeviation+","+ExtBackstep+")");
   return(0);
}
int deinit()
{
        ObjectDelete("Fibo1");
        ObjectDelete("Fibo2");
        deleteCandles();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//
//

int start()
{
   CalculateZigZag();

   //
   //
   //
   //
   //
   
   string fibo;
   int i;
        int LastZigZag;
        int PreviousZigZag;
        int PPreviousZigZag;
      for (int z=0;z<Bars;z++) { if (ExtMapBuffer[z]!=0) break; } LastZigZag=z;
      for (    z++;z<Bars;z++) { if (ExtMapBuffer[z]!=0) break; } PreviousZigZag=z;
      for (    z++;z<Bars;z++) { if (ExtMapBuffer[z]!=0) break; } PPreviousZigZag=z;
      
      //
      //
      //
      //
      //
      
      
      fibo = "Fibo2";           
      if( ObjectFind(fibo)==-1 )
         {
            ObjectCreate(fibo, OBJ_FIBO, 0,Time[PreviousZigZag], ExtMapBuffer[LastZigZag], Time[LastZigZag], ExtMapBuffer[PreviousZigZag]);
            ObjectSet(fibo,OBJPROP_COLOR,Fibo1Color);
            ObjectSet(fibo,OBJPROP_STYLE,Fibo1Style);
            ObjectSet(fibo,OBJPROP_WIDTH,Fibo1Width);
            ObjectSet(fibo,OBJPROP_LEVELCOLOR,Fibo1Color);
            ObjectSet(fibo,OBJPROP_LEVELSTYLE,Fibo1LevelsStyle);
               ObjectSet(fibo,OBJPROP_FIBOLEVELS,ArraySize(levelv));
               for (i=ArraySize(levelv)-1;i>=0;i--)
                  {
                     ObjectSet(fibo,OBJPROP_FIRSTLEVEL+i,levelv[i]/100);
                     ObjectSetFiboDescription(fibo,i,levels[i]);
                  }                     
          }
          ObjectSet(fibo,OBJPROP_TIME1,Time[PreviousZigZag]);
          ObjectSet(fibo,OBJPROP_TIME2,Time[LastZigZag]);
          ObjectSet(fibo,OBJPROP_PRICE1,ExtMapBuffer[LastZigZag]);
          ObjectSet(fibo,OBJPROP_PRICE2,ExtMapBuffer[PreviousZigZag]);
          
      //
      //
      //
      //
      //
                
      if (ShowPrevious)          
      {
         fibo = "Fibo1";           
         if( ObjectFind(fibo)==-1 )
         {
            ObjectCreate(fibo, OBJ_FIBO, 0,Time[PPreviousZigZag], ExtMapBuffer[PreviousZigZag], Time[PreviousZigZag], ExtMapBuffer[PPreviousZigZag]);
            ObjectSet(fibo,OBJPROP_COLOR,Fibo2Color);
            ObjectSet(fibo,OBJPROP_STYLE,Fibo2Style);
            ObjectSet(fibo,OBJPROP_WIDTH,Fibo2Width);
            ObjectSet(fibo,OBJPROP_LEVELCOLOR,Fibo2Color);
               ObjectSet(fibo,OBJPROP_FIBOLEVELS,ArraySize(levelv));
               for (i=ArraySize(levelv)-1;i>=0;i--)
                  {
                     ObjectSet(fibo,OBJPROP_FIRSTLEVEL+i,levelv[i]/100);
                     ObjectSetFiboDescription(fibo,i,levels[i]);
                  }                     
          }
          ObjectSet(fibo,OBJPROP_TIME1,Time[PPreviousZigZag]);
          ObjectSet(fibo,OBJPROP_TIME2,Time[PreviousZigZag]);
          ObjectSet(fibo,OBJPROP_PRICE1,ExtMapBuffer[PreviousZigZag]);
          ObjectSet(fibo,OBJPROP_PRICE2,ExtMapBuffer[PPreviousZigZag]);
      }          

   //
   //
   //
   //
   //
   
   if (alertsShowTouched) ShowCandles();
   if (alertsOn)          CheckTouches();
   return(0);
}   


//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
//
//
//
//
//

void CalculateZigZag()
{
   int    shift, back,lasthighpos,lastlowpos,index;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow;
//----
   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      index=Lowest(NULL,0,MODE_LOW,ExtDepth,shift);
      val=Low[index];
      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=ExtLowBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtLowBuffer[shift+back]=0.0; 
              }
           }
        } 
        ExtLowBuffer[shift]=0.0;
      if(val!=0.0) ExtLowBuffer[index]=val;
      //--- high
      index=Highest(NULL,0,MODE_HIGH,ExtDepth,shift);
      val=High[index];
      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=ExtHighBuffer[shift+back];
               if((res!=0)&&(res<val)) ExtHighBuffer[shift+back]=0.0; 
              } 
           }
        }
      ExtHighBuffer[shift]=0.0;
      if(val!=0.0) ExtHighBuffer[index]=val;
     }
//---- final cutting 
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=Bars-ExtDepth; shift>=0; shift--)
     {
      curlow=ExtLowBuffer[shift];
      curhigh=ExtHighBuffer[shift];
      if(curlow==0 && curhigh==0) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0) 
           {
            if(lasthigh<curhigh) ExtHighBuffer[lasthighpos]=0;
            else ExtHighBuffer[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtLowBuffer[lastlowpos]=0;
            else ExtLowBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           } 
         lasthigh=-1;
        }
     }
//---- merge 2 buffers
   lasthighpos=-1;
   lastlowpos=-1;
   for(shift=Bars-1; shift>=0; shift--)
     {
      if(shift>=Bars-ExtDepth) ExtMapBuffer[shift]=0.0;
      else
        {
         curlow=ExtLowBuffer[shift];
         curhigh=ExtHighBuffer[shift];
         //----
         res=0;
         if(curlow!=0)
           {
            if(lastlowpos==-1)
              {
               res=curlow;
               lastlowpos=shift;
              }
            else
              {
               if(lasthighpos!=-1 && lastlowpos>lasthighpos)
                 {
                  res=curlow;
                  lastlowpos=shift;
                 }
              }
           }
         if(curhigh!=0)
           {
            if(lasthighpos==-1)
              {
               res=curhigh;
               lasthighpos=shift;
              }
            else
              {
               if(lastlowpos!=-1 && lasthighpos>lastlowpos)
                 {
                  res=curhigh;
                  lasthighpos=shift;
                 }
              }
           }
         //----
         ExtMapBuffer[shift]=res;
        }
     }
}

//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
//
//
//
//
//

void fillValues(string forFibo)
{
   int fibLines = ObjectGet(forFibo,OBJPROP_FIBOLEVELS);
   int i;
   
   double price1 = ObjectGet(forFibo,OBJPROP_PRICE1);
   double price2 = ObjectGet(forFibo,OBJPROP_PRICE2);
   for (i=0;i<fibLines;i++)
      {
         if (price1 > price2)  values[i] = NormalizeDouble(price2 + (levelv[i]/100*(price1-price2)),Digits);
         if (price1 < price2)  values[i] = NormalizeDouble(price1 + (levelv[i]/100*(price2-price1)),Digits);
      }
}

//
//
//
//
//

void CheckTouches()
{
   if (ShowPrevious)          
   {
      fillValues("Fibo1");
      for (int i = 0;i<ArraySize(levelv);i++) CheckIfTouched(i,values[i]);
   }         
   fillValues("Fibo2");
      for (i = 0;i<ArraySize(levelv);i++) CheckIfTouched(i,values[i]);
}

//
//
//
//
//

int CheckIfTouched(int index, double compareTo,bool checking=false,int forBar=0)
{
   int    answer = 0;
   double diff   = NormalizeDouble(alertsTolerance*Point,Digits);
   double correction;
   double highDiff;
   double lowDiff;
   
   if (touchChanell)
      {
         correction = NormalizeDouble(alertsTolerance*Point,  Digits);
         diff       = NormalizeDouble(alertsTolerance*Point*2,Digits);
      }         
   else  correction = 0.00;    
   //
   //
   //
   //
   //
      
   int add;
      if (alertsOnCurrent) add = 0;
      else                 add = 1;      
      double value = NormalizeDouble(compareTo,Digits);
          highDiff = NormalizeDouble((value+correction)-High[add+forBar],Digits);
          lowDiff  = NormalizeDouble(Low[add+forBar]-(value-correction),Digits);
          
   //
   //
   //
   //
   //
   
   if (checking)
      {
         if ((highDiff >= 0) && (highDiff <= diff)) answer = -1;
         if ((lowDiff  >= 0) && (lowDiff  <= diff)) answer =  1;
      }
   else
      {
         if ((highDiff >= 0) && (highDiff <= diff)) doAlert("fibo level "+DoubleToStr(levelv[index],1)+" line touched from down");
         if ((lowDiff  >= 0) && (lowDiff  <= diff)) doAlert("fibo level "+DoubleToStr(levelv[index],1)+" line touched from up");
      }
   return(answer);
}

//
//
//
//
//

void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
   if (previousAlert != doWhat || previousTime != Time[0]) {
       previousAlert  = doWhat;
       previousTime   = Time[0];

       //
       //
       //
       //
       //

       message =  StringConcatenate(Symbol()," - ",TimeFrameToString(Period())," chart, at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ",doWhat);
          if (alertsMessage) Alert(message);
          if (alertsEmail)   SendMail(StringConcatenate(Symbol()," pivot line touch"),message);
          if (alertsSound)   PlaySound("sound2.wav");
   }
}


//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
//
//
//
//
//

void deleteCandles()
{
   while(totalCandles>0) { ObjectDelete(StringConcatenate(windowID,"c-",totalCandles)); totalCandles -= 1; }
}

//
//
//
//
//

void ShowCandles()
{
   datetime time1;
   datetime time2;
   
   deleteCandles();
   
   //
   //
   //
   //
   //
   
   if (ShowPrevious)          
   {
      fillValues("Fibo1");
      time1 = MathMin(ObjectGet("Fibo1",OBJPROP_TIME1),ObjectGet("Fibo1",OBJPROP_TIME2));
      time2 = MathMax(ObjectGet("Fibo1",OBJPROP_TIME1),ObjectGet("Fibo1",OBJPROP_TIME2));
      for (int i = 0;i<barsToShowCandles;i++)
      {
         if ((Time[i] >= time1) && (Time[i] <= time2))
            {
               for (int k = 0;k<ArraySize(levelv);k++) if (CheckSingle(k,values[k],i)) continue;
            }                    
      }
   }         
   
   //
   //
   //
   //
   //
   
   fillValues("Fibo2");
   time1 = MathMin(ObjectGet("Fibo2",OBJPROP_TIME1),ObjectGet("Fibo2",OBJPROP_TIME2));
   time2 = MathMax(ObjectGet("Fibo2",OBJPROP_TIME1),ObjectGet("Fibo2",OBJPROP_TIME2));
   
   //
   //
   //
   //
   //
   
      for (i = 0;i<barsToShowCandles;i++)
      {
         if ((Time[i] >= time1) && (Time[i] <= time2))
            {
               for (k = 0;k<ArraySize(levelv);k++) if (CheckSingle(k,values[k],i)) continue;
            }                    
      }
}

//
//
//
//
//

bool CheckSingle(int index,double array,int shift)
{
   int result = CheckIfTouched(index,array,true,shift);
   if (result != 0)
      {
         if (alertsOnCurrent) DrawCandle(shift  ,result);
         else                 DrawCandle(shift+1,result);
         return(true);
      }
   else
      {
         return(false);
      }         
}

//
//
//
//
//

void DrawCandle(int shift,int upDown)
{
   datetime time  = Time[shift];
   double   high  = iHigh (NULL,0,shift);
   double   low   = iLow  (NULL,0,shift);
   double   open  = iOpen (NULL,0,shift);
   double   close = iClose(NULL,0,shift);
   string name;


   
   totalCandles += 1;
   name    = windowID+"c-"+totalCandles;
      ObjectCreate(name,OBJ_TREND,0,time,high,time,low);
         ObjectSet(name,OBJPROP_COLOR,WickColor);
         ObjectSet(name,OBJPROP_RAY  ,false);
      
   //
   //
   //
   //
   //
         
   totalCandles += 1;
   name    = windowID+"c-"+totalCandles;
      ObjectCreate(name,OBJ_TREND,0,time,open,time,close);
         ObjectSet(name,OBJPROP_WIDTH,CandleWidth);
         ObjectSet(name,OBJPROP_RAY  ,false);
         if (upDown>0)
               ObjectSet(name,OBJPROP_COLOR,BarUpColor);
         else  ObjectSet(name,OBJPROP_COLOR,BarDownColor);
}


//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
//
//
//
//
//

string TimeFrameToString(int tf)
{
   string tfs="Current time frame";
   switch(tf) {
      case PERIOD_M1:  tfs="M1"  ; break;
      case PERIOD_M5:  tfs="M5"  ; break;
      case PERIOD_M15: tfs="M15" ; break;
      case PERIOD_M30: tfs="M30" ; break;
      case PERIOD_H1:  tfs="H1"  ; break;
      case PERIOD_H4:  tfs="H4"  ; break;
      case PERIOD_D1:  tfs="D1"  ; break;
      case PERIOD_W1:  tfs="W1"  ; break;
      case PERIOD_MN1: tfs="MN1";
   }
   return(tfs);
}
 
Files:
 
sol4live: Please help me convert this fibo indicator to mtf.  

Help you with what? You haven't stated a problem, you stated a want. Show us your attempt (using the CODE button) and state the nature of your difficulty.
          No free help (2017)

Or pay someone. Top of every page is the link Freelance.
          Hiring to write script - General - MQL5 programming forum (2018)

We're not going to code it for you (although it could happen if you are lucky or the problem is interesting).
          No free help (2017)

Reason: