//------------------------------------------------------------------
//                                                 
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1  clrSilver

extern bool ShowSourceTimeFrameAsComment = true;
extern ENUM_APPLIED_PRICE  PriceToShow   = PRICE_CLOSE;
double buffer[];

string pname;

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int init()
{
   PriceToShow = MathMax(MathMin(PriceToShow,60),0);
   switch(PriceToShow)
   {
      case PRICE_CLOSE:    pname = "close";    break;
      case PRICE_OPEN:     pname = "open";     break;
      case PRICE_HIGH:     pname = "high";     break;
      case PRICE_LOW:      pname = "low";      break;
      case PRICE_MEDIAN:   pname = "median";   break;
      case PRICE_TYPICAL:  pname = "typical";  break;
      case PRICE_WEIGHTED: pname = "weighted"; break;
   }
   SetIndexBuffer(0,buffer);
   return(0);
}
void deinit() { Comment(""); }

//
//
//
//
//

int start()
{
   int timeFrame, counted_bars=IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;
         int limit = MathMin(Bars-counted_bars,Bars-1);

   //
   //
   //
   //
   //
   //

      double diff = (Time[0]-Time[1])/60;
      while (true)
      {
         if (diff==PERIOD_MN1) { timeFrame=PERIOD_MN1; break; }
         if (diff==PERIOD_W1)  { timeFrame=PERIOD_W1;  break; }
         if (diff> PERIOD_D1)
               timeFrame = (Time[1]-Time[2])/60;
         else  timeFrame = (Time[0]-Time[1])/60;
         break;
      }
      if (ShowSourceTimeFrameAsComment) Comment(timeFrameToString(timeFrame)+" - "+pname);
   for(int i=limit; i >= 0; i--) buffer[i] = iMA(NULL,timeFrame,1,0,MODE_SMA,PriceToShow,iBarShift(NULL,timeFrame,Time[i]));
   return(0);
}

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//

string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};
int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

string timeFrameToString(int tf)
{
   for (int i=ArraySize(iTfTable)-1; i>=0; i--) 
         if (tf==iTfTable[i]) return(sTfTable[i]);
                              return("");
}
