//+------------------------------------------------------------------+
//|                                                 mn MoveAlert.mq4 |
//+------------------------------------------------------------------+
#property copyright "Mn"

#property indicator_chart_window

extern string xxx = "Coded by Mn";
extern double mMove = 30, mCounterMove = 22;
extern bool mShowComment = true, mFill = false;
extern color mColour1 = Aqua, mColour2 = Pink;

double mHigh = 0, mLow= 10000, mHighStartPoint, mLowStartPoint;
int mPipFact, mUpTime, mDnTime;

//+------------------------------------------------------------------+
int init()
  {
    mHighStartPoint = Close[0];
    mLowStartPoint = Close[0];
    int mUpTime = Time[0], mDnTime = Time[0];
    
    if(Digits == 3 || Digits == 5)
      mPipFact = 10;
    else
       mPipFact = 1;
       
    mMove = mMove * Point * mPipFact;   
    mCounterMove = mCounterMove * Point * mPipFact;
    if(!mShowComment) Comment("");
    
     ObjectCreate("mUpBox", OBJ_RECTANGLE, 0, 0, 0, 0, 0);
     ObjectSet("mUpBox", OBJPROP_COLOR, mColour1);
     ObjectSet("mUpBox", OBJPROP_BACK, mFill);
     
     ObjectCreate("mDnBox", OBJ_RECTANGLE, 0, 0, 0, 0, 0);
     ObjectSet("mDnBox", OBJPROP_COLOR, mColour2);
     ObjectSet("mDnBox", OBJPROP_BACK, mFill);
    
   return(0);
  }

//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }

//+------------------------------------------------------------------+
int start()
  {
    if(Close[0] > mLowStartPoint)
     {
      mLowStartPoint = Close[0];
      mLow = Close[0];
      mDnTime = Time[0];
     }
    if(Close[0] < mHighStartPoint)
     {
      mHighStartPoint = Close[0];
      mHigh = Close[0];
      mUpTime = Time[0];
     }
   
   
    if(Close[0] > mHigh)
      {
       mHigh = Close[0];
       if(mHigh >= mHighStartPoint + mMove)
         {
           Alert("Move Alert ", Symbol(), " UP move ");
           mHighStartPoint = mHigh;
           mUpTime = Time[0];
         }
       if(mHigh >= mLow + mCounterMove)
         {
           mLowStartPoint = mHigh;
           mLow = mHigh;
           mDnTime = Time[0];
         }
      }
    
    if(Close[0] < mLow)
      {
       mLow = Close[0];
       if(mLow <= mLowStartPoint - mMove)
         {
           Alert("Move Alert ", Symbol(), " DOWN move ");
           mLowStartPoint =  mLow;
           mDnTime = Time[0];
         }
       if(mLow <= mHigh - mCounterMove)
         {
           mHighStartPoint = mLow;
           mHigh = mLow;
           mUpTime = Time[0];
         }
      }
      
     DrawBoxes(mUpTime, mDnTime); 
      if(Digits == 3)
        int mAdj = 100;
      else
        mAdj = 1;
      if(mShowComment)
        Comment(DoubleToStr(mHighStartPoint, Digits -1), "  UP ", DoubleToStr((mHigh - mHighStartPoint) * 10000 / mAdj, 1),
        "\n", DoubleToStr(mLowStartPoint, Digits -1), "  DN ", DoubleToStr((mLowStartPoint - mLow) * 10000 / mAdj, 1));

   return(0);
  }
//+------------------------------------------------------------------+
void DrawBoxes(int mUpTime, int mDnTime)
 {
   ObjectSet("mUpBox", OBJPROP_TIME1, mUpTime);
   ObjectSet("mUpBox", OBJPROP_TIME2, Time[0]);
   ObjectSet("mUpBox", OBJPROP_PRICE1, mHighStartPoint); 
   ObjectSet("mUpBox", OBJPROP_PRICE2, mHigh);
  
   ObjectSet("mDnBox", OBJPROP_TIME1, mDnTime);
   ObjectSet("mDnBox", OBJPROP_TIME2, Time[0]);
   ObjectSet("mDnBox", OBJPROP_PRICE1, mLowStartPoint); 
   ObjectSet("mDnBox", OBJPROP_PRICE2, mLow);
   
   return(0);
 }
//+------------------------------------------------------------------+

