//+------------------------------------------------------------------+
//|                                                        mn RN.mq4 |
//+------------------------------------------------------------------+
#property copyright "Mn"

#property indicator_chart_window
extern int mLevels = 40;
extern int mMain = 100;
extern int mSub = 20;
extern bool mUseDefault = true;
extern int mLineWidth = 0;
extern color LineColorMain = Blue, mCol = Gray;
extern int mLineStyleMain = 0;   //STYLE_SOLID;
extern int mLineStyleSub = 2;    //STYLE_DOT;

//+------------------------------------------------------------------+
int init()
{
  if(mUseDefault)
    {
      if(Period() > 240) mSub = 50;
      else if(Period() > 50) mSub = 20;
      else  mSub = 10;
    }
  if(Digits == 3 || Digits == 5)
    {
      mMain *= 10;
      mSub *= 10;
    }
    
   return(0);
}

int deinit()
{
   int obj_total = ObjectsTotal();
   
   for (int i = obj_total; i >= 0; i--) {
      string name= ObjectName(i);
    
      if (StringSubstr(name, 0, 3)=="mRN") 
         ObjectDelete(name);
   }
   
   return(0);
}

//+------------------------------------------------------------------+
int start()
{
   static datetime mLastTime= 0;
    
   if (Time[0] == mLastTime)
      return (0);
      
   int i, mRN, style, mRNsub, mWidth; 
   double mRNlvl;
   color linecolor;
   
   mRN= Bid / Point;
   mRN= mRN - mRN % mSub;

    for (i = -mLevels; i < mLevels; i++)
   {
      mRNsub = mRN + (i * mSub); 
      
      if (mRNsub % mMain == 0)
       {
         style = mLineStyleMain;
         linecolor = LineColorMain;
       }
      else
       {
         style = mLineStyleSub;
         linecolor = mCol;
       }
      
      mWidth = mLineWidth + 1;
      
      if (mRNsub % (mMain*10) == 0)
       {
         mWidth = mLineWidth + 2;      
       }

      if (mRNsub % (mMain*100) == 0)
       {
         mWidth = mLineWidth + 3;      
       }
      
      mRNlvl = mRNsub * Point;
      SetLevel(DoubleToStr(mRNlvl, Digits), mRNlvl,  linecolor, style, mWidth, Time[10]);
      mLastTime = Time[0];
   }

   return(0);
}

//+------------------------------------------------------------------+
void SetLevel(string text, double level, color col1, int linestyle, int mWidth, datetime startofday)
 {
   int digits= Digits;
   string mLine= "mRN" + text; 

   if (ObjectFind(mLine) != 0)
    {
    //  ObjectCreate(mLine, OBJ_TREND, 0, Time[0], level, Time[Bars - 1], level);
      ObjectCreate(mLine, OBJ_HLINE, 0, Time[0], level);
      ObjectSet(mLine, OBJPROP_STYLE, linestyle);
      ObjectSet(mLine, OBJPROP_COLOR, col1);
      ObjectSet(mLine, OBJPROP_WIDTH, mWidth);
      ObjectSet(mLine, OBJPROP_BACK, True);
    }
   else
    {
      ObjectMove(mLine, 0, Time[0], level);
    }
 }
//+------------------------------------------------------------------+


