//+------------------------------------------------------------------+
//|                                      Dance MovingAveragesMTF.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010.03.13, SwingMan"
#property link      ""

#property indicator_chart_window

#property indicator_buffers 6

#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Maroon
#property indicator_color4 Green
#property indicator_color5 Blue
#property indicator_color6 Maroon

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 3
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width6 3


//---- extern inputs -------------------------------------------------
extern string ____Upper_TimeFrames___ = "";
extern int UpperTF1 = PERIOD_H1;
extern int UpperTF2 = PERIOD_D1;
extern string ____Average___ = "0=SMA,1=EMA,2=SMMA,3=LWMA";
extern int ma_method_1 = MODE_EMA;
extern int ma_method_2 = MODE_SMA;
extern int ma_method_3 = MODE_EMA;
extern string ____Price___ = "0=Close,4=Median,5=Typical";
extern int applied_price = PRICE_CLOSE;
extern int       Period1 = 10;
extern int       Period2 = 35;
extern int       Period3 = 50;
//--------------------------------------------------------------------

//---- buffers
double avg11[], avg12[], avg13[];
double avg21[], avg22[], avg23[];


//---- constants
#define IND_NAME "Dance MovingAveragesMTF"
//---- variables

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{  
   //---- indicators
   SetIndexBuffer(0,avg11); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,avg12); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,avg13); SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(3,avg21); SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(4,avg22); SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(5,avg23); SetIndexStyle(5,DRAW_LINE);
      
   string tf1 = Get_sPeriod(UpperTF1);
   string tf2 = Get_sPeriod(UpperTF2);
   SetIndexLabel(0,"MAvg_" + tf1 + "_" + Period1);
   SetIndexLabel(1,"MAvg_" + tf1 + "_" + Period2);
   SetIndexLabel(2,"MAvg_" + tf1 + "_" + Period3);
   SetIndexLabel(3,"MAvg_" + tf2 + "_" + Period1);
   SetIndexLabel(4,"MAvg_" + tf2 + "_" + Period2);
   SetIndexLabel(5,"MAvg_" + tf2 + "_" + Period3);

   IndicatorShortName(IND_NAME);       
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
int i,limit;

   int counted_bars=IndicatorCounted();
   if (counted_bars < 0) return(-1);
   if (counted_bars > 0) counted_bars--;
   limit = Bars - counted_bars;
   
   for (i = limit; i >= 0; i--) 
   {   
      int upperBar1 = iBarShift(Symbol(),UpperTF1,Time[i],false);
      int upperBar2 = iBarShift(Symbol(),UpperTF2,Time[i],false);

      avg11[i] = iMA(Symbol(),UpperTF1,Period1,0,ma_method_1,applied_price,upperBar1);
      avg12[i] = iMA(Symbol(),UpperTF1,Period2,0,ma_method_2,applied_price,upperBar1);
      avg13[i] = iMA(Symbol(),UpperTF1,Period3,0,ma_method_3,applied_price,upperBar1);
      
      avg21[i] = iMA(Symbol(),UpperTF2,Period1,0,ma_method_1,applied_price,upperBar2);
      avg22[i] = iMA(Symbol(),UpperTF2,Period2,0,ma_method_2,applied_price,upperBar2);
      avg23[i] = iMA(Symbol(),UpperTF2,Period3,0,ma_method_3,applied_price,upperBar2);
   }
   return(0);
}


//+------------------------------------------------------------------+
//    Get sPeriod
//+------------------------------------------------------------------+
string Get_sPeriod(int timeframe)
{
   if (timeframe == PERIOD_M1) return("M1");
   if (timeframe == PERIOD_M5) return("M5");
   if (timeframe == PERIOD_M15) return("M15");
   if (timeframe == PERIOD_M30) return("M30");
   if (timeframe == PERIOD_H1) return("H1");
   if (timeframe == PERIOD_H4) return("H4");
   if (timeframe == PERIOD_D1) return("D1");
   if (timeframe == PERIOD_W1) return("W1");
   if (timeframe == PERIOD_MN1) return("MN1");
}