//+------------------------------------------------------------------+
//|                                            MovingAverage_MTF.mq4 |
//|                                                       d_forex_79 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "d_forex_79"
#property link      ""

#include <stderror.mqh>

#property indicator_chart_window


//---- input parameters
extern int numberOfCandles = 3;
extern int pipBuffer = 15;
extern color breakoutBoxColor = Orange;
extern color breakoutBufferColor = Lime;
extern int startCandleShift = 0;


//---- buffers


string topOrangeLine = "topOrangeLine";
string botOrangeLine = "botOrangeLine";
string topLimeLine = "topLimeLine";
string botLimeLine = "botLimeLine";

double myPoint = -1.0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   Comment("Horizontal Lines");
   
   myPoint = calcMyPoint();
   
   double high = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, numberOfCandles, startCandleShift));
   double low = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, numberOfCandles, startCandleShift));
   
   ObjectCreate(topOrangeLine, OBJ_HLINE, 0, Time[numberOfCandles], high);
   ObjectSet(topOrangeLine, OBJPROP_STYLE, STYLE_DASH);
   ObjectSet(topOrangeLine, OBJPROP_COLOR, breakoutBoxColor);
   
   ObjectCreate(botOrangeLine, OBJ_HLINE, 0, Time[numberOfCandles], low);
   ObjectSet(botOrangeLine, OBJPROP_STYLE, STYLE_DASH);
   ObjectSet(botOrangeLine, OBJPROP_COLOR, breakoutBoxColor);
   
   ObjectCreate(topLimeLine, OBJ_HLINE, 0, Time[numberOfCandles], high + (pipBuffer*myPoint));
   ObjectSet(topLimeLine, OBJPROP_STYLE, STYLE_DASH);
   ObjectSet(topLimeLine, OBJPROP_COLOR, breakoutBufferColor);
   
   ObjectCreate(botLimeLine, OBJ_HLINE, 0, Time[numberOfCandles], low - (pipBuffer*myPoint));
   ObjectSet(botLimeLine, OBJPROP_STYLE, STYLE_DASH);
   ObjectSet(botLimeLine, OBJPROP_COLOR, breakoutBufferColor);
   

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

   ObjectDelete(topOrangeLine);
   ObjectDelete(botOrangeLine);
   ObjectDelete(botLimeLine);
   ObjectDelete(topLimeLine);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   double high = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, numberOfCandles, startCandleShift));
   double low = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, numberOfCandles, startCandleShift));

   ObjectMove(topOrangeLine, 0, Time[numberOfCandles], high);
   ObjectMove(botOrangeLine, 0, Time[numberOfCandles], low);
   
   ObjectMove(topLimeLine, 0, Time[numberOfCandles], high + (pipBuffer*myPoint));
   ObjectMove(botLimeLine, 0, Time[numberOfCandles], low - (pipBuffer*myPoint));
      

   
//----
   return(0);
  }
//+------------------------------------------------------------------+


int ConvertTimeFrameToMinutes(string timeFrameStr)
{
   if (timeFrameStr == "M1")   
      return(PERIOD_M1);
   if (timeFrameStr == "M5")   
      return(PERIOD_M5);
   if (timeFrameStr == "M15")  
      return(PERIOD_M15);
   if (timeFrameStr == "M30")  
      return(PERIOD_M30);
   if (timeFrameStr == "H1")   
      return(PERIOD_H1);
   if (timeFrameStr == "H4")   
      return(PERIOD_H4);
   if (timeFrameStr == "D1")   
      return(PERIOD_D1);
   if (timeFrameStr == "W1")   
      return(PERIOD_W1);
   if (timeFrameStr == "MN" || timeFrameStr == "MN1")   
      return(PERIOD_MN1);

  return(0);
}  

string ConvertMinutesToTimeFrame(int minutes)
{
   if (minutes == PERIOD_M1)
      return("M1");
   if (minutes == PERIOD_M5)
      return("M5");
   if (minutes == PERIOD_M15)
      return("M15");
   if (minutes == PERIOD_M30)
      return("M30");
   if (minutes == PERIOD_H1)
      return("H1");
   if (minutes == PERIOD_H4)
      return("H4");
   if (minutes == PERIOD_D1)
      return("D1");
   if (minutes == PERIOD_W1)
      return("W1");
   if (minutes == PERIOD_MN1)
      return("MN");

  return(0);
}  


double calcMyPoint()
{
   //use adjusted point value based on broker's precision (some do 4, some do 5, etc)   
   double eurusdPoint = MarketInfo("EURUSD", MODE_POINT);
   double newPoint = 0.0;
   if (eurusdPoint == 0.00001) // broker's servers use 5 digits of precision
   {
      newPoint = Point * 10;   
   }
   else if (eurusdPoint == 0.000001) // broker's servers use 6 digits of precision (not sure who does, but maybe some day?)
   {
      newPoint = Point * 100;
   }
   else if (eurusdPoint == 0.001) // broker's servers use 3 digits of precision (just in case, yes, I'm paranoid :-) )
   {
      newPoint = Point / 10;
   }
   else // assumes 4 digits of precision
   {
      newPoint = Point;
   }

   return(newPoint);
}