//+------------------------------------------------------------------+
//|                                                 ATR on Chart.mq4 |
//|                                                      BbookGenius |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0

extern int              LookBackPeriod      = 1;
extern ENUM_TIMEFRAMES  AtrTimeFrame        = PERIOD_D1;
extern int              AtrPeriod           = 14;
extern int              iShiftHours         = 0;
extern bool             iPlotAtrLevels      = true;
extern bool             iPlotAtrLabels      = true;
extern bool             iPlotAtrPrices      = true;
extern ENUM_LINE_STYLE  iPlotAtrStyles      = STYLE_DOT;
extern int              iPlotAtrWidths      = 1;
extern color            iPlotAtrColorRes    = clrRed;
extern color            iPlotAtrColorSup    = clrGreen;
extern double              ATRmultiR1 = 0.1;
extern double              ATRmultiR2 = 0.2;
extern double              ATRmultiR3 = 0.3;
extern double              ATRmultiR4 = 0.4;
extern double              ATRmultiR5 = 0.5;
extern double              ATRmultiR6 = 0.6;
extern double              ATRmultiR7 = 0.7;
extern double              ATRmultiR8 = 0.8;
extern double              ATRmultiR9 = 0.9;
extern double              ATRmultiR10 = 1.0;
extern double              ATRmultiS1 = 0.1;
extern double             ATRmultiS2 = 0.2;
extern double              ATRmultiS3 = 0.3;
extern double              ATRmultiS4 = 0.4;
extern double              ATRmultiS5 = 0.5;
extern double              ATRmultiS6 = 0.6;
extern double              ATRmultiS7 = 0.7;
extern double              ATRmultiS8 = 0.8;
extern double             ATRmultiS9 = 0.9;
extern double             ATRmultiS10 = 1.0;
extern bool             iPlotOpenLevel      = true;
extern bool             iPlotOpenLabel      = true;
extern bool             iPlotOpenPrice      = true;
extern ENUM_LINE_STYLE  iPlotOpenStyle     = STYLE_SOLID;
extern int              iPlotOpenWidth     = 2;
extern color            iPlotOpenColor      = clrBisque;
extern bool             iPlotBorders        = true;
extern ENUM_LINE_STYLE  iPlotBorderStyles   = STYLE_DOT;
extern int              iPlotBorderWidths   = 1;
extern color            iPlotBorderColors   = clrBlack;
string   gPeriod = "";
int      gRealTimePeriod = 0;
datetime gPrevTimePivot = 0;
//----------------------------------------------------+
int init()
  {
   int error = 0;
   int timerVal = 0;
   switch(AtrTimeFrame)
     {
      case PERIOD_M1:
         gPeriod = "M1";
         gRealTimePeriod = PERIOD_M1;  // 1 minute
         break;
      case PERIOD_M5:
         gPeriod = "M5";
         gRealTimePeriod = PERIOD_M5;  // 5 minutes
         break;
      case PERIOD_M15:
         gPeriod = "M15";
         gRealTimePeriod = PERIOD_M15; // 15 minutes
         break;
      case PERIOD_M30:
         gPeriod = "M30";
         gRealTimePeriod = PERIOD_M30; // 30 minutes
         break;
      case PERIOD_H1:
         gPeriod = "H1";
         gRealTimePeriod = PERIOD_H1;  // 60 minutes
         break;
      case PERIOD_H4:
         gPeriod = "H4";
         gRealTimePeriod = PERIOD_H4;  // 240 minutes
         break;
      case PERIOD_D1:
         gPeriod = "D1";
         gRealTimePeriod = PERIOD_D1;  // 1440 minutes
         break;
      case PERIOD_W1:
         gPeriod = "W1";
         gRealTimePeriod = 8640;       // 8640 minutes (update to draw weekly line for 6 days only)
         break;
      case PERIOD_MN1:
         gPeriod = "MN1";
         gRealTimePeriod = PERIOD_MN1; // 43200 minutes (30 days)
         break;
      default:
         gPeriod = "";
         Alert("iTimePeriod param specified is not supported.");
         break;
     }
   if(iShiftHours > 12 || iShiftHours < -14)
     {
      Alert("iShiftHours param specified is out-of-range. Valid values are between -14 and 12. Re-setting to 0.");
      iShiftHours = 0;
     }
   return(0);
  }
//+------------------------------------------------------------------+
int deinit()
  {
   DeleteAllObjects();
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int error = 0;
   int shift = 0;
   int startBarShift = 0;
   int endBarShift = 0;
   datetime timeStartObj;
   datetime timeEndObj;
   DeleteAllObjects();

   if(iPlotAtrLevels && AtrTimeFrame != 0)
     {
      for(shift = 0; shift < LookBackPeriod; shift++)   // Adjusted loop for historical data
        {
         error = 0;
         if(AtrTimeFrame == PERIOD_D1 && iShiftHours != 0)
           {
            error = GetShiftInfo(shift, startBarShift, endBarShift, timeStartObj, timeEndObj);
           }
         else
           {
            timeStartObj = iTime(NULL, AtrTimeFrame, shift);
            timeEndObj = iTime(NULL, AtrTimeFrame, shift) + (gRealTimePeriod * 60);
           }
         if(error == 0)
           {
            LevelsDraw(timeStartObj, timeEndObj, gPeriod, false);
           }
        }
     }
   return (0);
  }
//+------------------------------------------------------------------+
int LevelsDraw(datetime TimeStartObj,
               datetime TimeEndObj,
               string   PeriodStr,
               bool     IsFuture)
  {
   int error = 0;
   double res1 = 0.0;
   double res2 = 0.0;
   double res3 = 0.0;
   double res4 = 0.0;
   double res5 = 0.0;
   double res6 = 0.0;
   double res7 = 0.0;
   double res8 = 0.0;
   double res9 = 0.0;
   double res10 = 0.0;
   double sup1 = 0.0;
   double sup2 = 0.0;
   double sup3 = 0.0;
   double sup4 = 0.0;
   double sup5 = 0.0;
   double sup6 = 0.0;
   double sup7 = 0.0;
   double sup8 = 0.0;
   double sup9 = 0.0;
  double sup10 = 0.0;
   double open = 0.0;

   error = GetLevels(AtrTimeFrame, 0, res1, res2, res3, res4, res5, res6,res7,res8,res9,res10,sup1, sup2, sup3, sup4, sup5, sup6,sup7,sup8,sup9,sup10, open);
   if(error != 0)
     {
      return error;
     }

   if(iPlotAtrLevels)
     {
      PlotTrend(0, PeriodStr + "R10_T", 0, TimeStartObj, res10, TimeEndObj, res10, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R9_T", 0, TimeStartObj, res9, TimeEndObj, res9, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R8_T", 0, TimeStartObj, res8, TimeEndObj, res8, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R7_T", 0, TimeStartObj, res7, TimeEndObj, res7, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R6_T", 0, TimeStartObj, res6, TimeEndObj, res6, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R5_T", 0, TimeStartObj, res5, TimeEndObj, res5, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R4_T", 0, TimeStartObj, res4, TimeEndObj, res4, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R3_T", 0, TimeStartObj, res3, TimeEndObj, res3, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R2_T", 0, TimeStartObj, res2, TimeEndObj, res2, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "R1_T", 0, TimeStartObj, res1, TimeEndObj, res1, iPlotAtrColorRes, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S1_T", 0, TimeStartObj, sup1, TimeEndObj, sup1, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S2_T", 0, TimeStartObj, sup2, TimeEndObj, sup2, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S3_T", 0, TimeStartObj, sup3, TimeEndObj, sup3, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S4_T", 0, TimeStartObj, sup4, TimeEndObj, sup4, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S5_T", 0, TimeStartObj, sup5, TimeEndObj, sup5, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S6_T", 0, TimeStartObj, sup6, TimeEndObj, sup6, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S7_T", 0, TimeStartObj, sup7, TimeEndObj, sup7, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S8_T", 0, TimeStartObj, sup8, TimeEndObj, sup8, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S9_T", 0, TimeStartObj, sup9, TimeEndObj, sup9, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      PlotTrend(0, PeriodStr + "S10_T", 0, TimeStartObj, sup10, TimeEndObj, sup10, iPlotAtrColorSup, iPlotAtrStyles, iPlotAtrWidths);
      

      if(iPlotAtrLabels)
        {
         PlotText(0, PeriodStr + "R10_L", 0, TimeEndObj, res10, "R10", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R9_L", 0, TimeEndObj, res9, "R9", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R8_L", 0, TimeEndObj, res8, "R8", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R7_L", 0, TimeEndObj, res7, "R7", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R6_L", 0, TimeEndObj, res6, "R6", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R5_L", 0, TimeEndObj, res5, "R5", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R4_L", 0, TimeEndObj, res4, "R4", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R3_L", 0, TimeEndObj, res3, "R3", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R2_L", 0, TimeEndObj, res2, "R2", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "R1_L", 0, TimeEndObj, res1, "R1", "Arial", 8, iPlotAtrColorRes, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S1_L", 0, TimeEndObj, sup1, "S1", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S2_L", 0, TimeEndObj, sup2, "S2", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S3_L", 0, TimeEndObj, sup3, "S3", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S4_L", 0, TimeEndObj, sup4, "S4", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S5_L", 0, TimeEndObj, sup5, "S5", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S6_L", 0, TimeEndObj, sup6, "S6", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER); 
         PlotText(0, PeriodStr + "S7_L", 0, TimeEndObj, sup7, "S7", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S8_L", 0, TimeEndObj, sup8, "S8", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S9_L", 0, TimeEndObj, sup9, "S9", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
         PlotText(0, PeriodStr + "S10_L", 0, TimeEndObj, sup10, "S10", "Arial", 8, iPlotAtrColorSup, ANCHOR_RIGHT_UPPER);
        }
      if(iPlotAtrPrices)
        {
         PlotText(0, PeriodStr + "R10_P", 0, TimeStartObj, res10, DoubleToString(res6, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R9_P", 0, TimeStartObj, res9, DoubleToString(res6, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R8_P", 0, TimeStartObj, res8, DoubleToString(res6, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R7_P", 0, TimeStartObj, res7, DoubleToString(res6, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R6_P", 0, TimeStartObj, res6, DoubleToString(res6, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R5_P", 0, TimeStartObj, res5, DoubleToString(res5, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R4_P", 0, TimeStartObj, res4, DoubleToString(res4, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R3_P", 0, TimeStartObj, res3, DoubleToString(res3, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R2_P", 0, TimeStartObj, res2, DoubleToString(res2, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "R1_P", 0, TimeStartObj, res1, DoubleToString(res1, Digits), "Arial", 8, iPlotAtrColorRes, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S1_P", 0, TimeStartObj, sup1, DoubleToString(sup1, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S2_P", 0, TimeStartObj, sup2, DoubleToString(sup2, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S3_P", 0, TimeStartObj, sup3, DoubleToString(sup3, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S4_P", 0, TimeStartObj, sup4, DoubleToString(sup4, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S5_P", 0, TimeStartObj, sup5, DoubleToString(sup5, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S6_P", 0, TimeStartObj, sup6, DoubleToString(sup6, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S7_P", 0, TimeStartObj, sup7, DoubleToString(sup7, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S8_P", 0, TimeStartObj, sup8, DoubleToString(sup8, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S9_P", 0, TimeStartObj, sup9, DoubleToString(sup9, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
         PlotText(0, PeriodStr + "S10_P", 0, TimeStartObj, sup10, DoubleToString(sup10, Digits), "Arial", 8, iPlotAtrColorSup, ANCHOR_LEFT_UPPER);
        }
     }

   if(iPlotOpenLevel)
     {
      PlotTrend(0, PeriodStr + "O_T", 0, TimeStartObj, open, TimeEndObj, open, iPlotOpenColor, iPlotOpenStyle, iPlotOpenWidth);
      if(iPlotOpenLabel)
        {
         PlotText(0, PeriodStr + "O_L", 0, TimeEndObj, open, "Open", "Arial", 8, iPlotOpenColor, ANCHOR_RIGHT_UPPER);
        }
      if(iPlotOpenPrice)
        {
         PlotText(0, PeriodStr + "O_P", 0, TimeEndObj, open, DoubleToString(open, Digits), "Arial", 8, iPlotOpenColor, ANCHOR_RIGHT_LOWER);
        }
     }
   if(iPlotBorders)
     {
      PlotTrend(0, PeriodStr + "BDL_", 0, TimeStartObj, res6, TimeStartObj, sup6, iPlotBorderColors, iPlotBorderStyles, iPlotBorderWidths);
      PlotTrend(0, PeriodStr + "BDR_", 0, TimeEndObj, res6, TimeEndObj, sup6, iPlotBorderColors, iPlotBorderStyles, iPlotBorderWidths);
     }

   return error;
  }

//+------------------------------------------------------------------+
int GetShiftInfo(int Shift,
                 int &StartBarShift,
                 int &EndBarShift,
                 datetime &StartTimeShift,
                 datetime &EndTimeShift)
  {
   int error = 0;
   int ShiftedFlag = 0;
   int tempBarShift = 0;
   int DailyShift = Shift;    // in case if modified
   StartBarShift = 0;
   EndBarShift = 0;
   StartTimeShift = 0;
   EndTimeShift = 0;
   tempBarShift = iBarShift(NULL, PERIOD_H1, iTime(NULL, PERIOD_D1, 0), False);
   tempBarShift += iShiftHours;
   if(tempBarShift < 0)
     {
      // add a day shift for accurate pivot calculations and set shifted flag
      DailyShift++;
      ShiftedFlag = 1;
     }
   else
      if(tempBarShift > 24)
        {
         if(DailyShift > 0)
           {
            DailyShift--;
           }
         ShiftedFlag = -1;
        }
   StartBarShift = iBarShift(NULL, PERIOD_H1, iTime(NULL, PERIOD_D1, DailyShift), False);
   StartBarShift += iShiftHours;
   if(StartBarShift >= 0)
     {
      StartTimeShift = iTime(NULL, PERIOD_H1, StartBarShift);
      if(StartTimeShift > 0)
        {
         if(DailyShift > 0)
           {
            EndBarShift = iBarShift(NULL, PERIOD_H1, iTime(NULL, PERIOD_D1, DailyShift - 1), False);
            EndBarShift += iShiftHours + 1;
           }
         else
           {
            EndBarShift = iBarShift(NULL, PERIOD_H1, iTime(NULL, PERIOD_D1, DailyShift), False);
            EndBarShift -= 24 - iShiftHours - 1;
           }
         if(EndBarShift > 0)
           {
            EndTimeShift = iTime(NULL, PERIOD_H1, EndBarShift - 1);
           }
         else
           {
            EndBarShift = 0;
            EndTimeShift = iTime(NULL, PERIOD_H1, 0) + (MathAbs(StartBarShift - 24) * 60 * 60);
           }
         if(Shift == 0 && ShiftedFlag == -1)
           {
            StartTimeShift = EndTimeShift;
            StartBarShift = iBarShift(NULL, PERIOD_H1, StartTimeShift, False);

            EndBarShift = 0;
            EndTimeShift = iTime(NULL, PERIOD_H1, 0) + (MathAbs(StartBarShift - 24) * 60 * 60);
           }
        }
     }
   if(StartBarShift < 0 || EndBarShift < 0 ||
      StartTimeShift <= 0 || EndTimeShift <= 0)
     {
      error = -1;
     }
   return error;
  }


//+------------------------------------------------------------------+
int GetLevels(int TimeFrame,
              int Shift,
              double &R1, double &R2, double &R3, double &R4,double &R5,double &R6,double &R7,double &R8,double &R9,double &R10,
              double &S1, double &S2, double &S3, double &S4,double &S5,double &S6,double &S7,double &S8,double &S9,double &S10,
              double &openPrice)
  {
   int error = 0;
   double barOpen = 0.0;
   int startBarShift = 0;
   int endBarShift = 0;
   datetime startTimeShift = 0;
   datetime endTimeShift = 0;
   R1 = 0.0;
   R2 = 0.0;
   R3 = 0.0;
   R4 = 0.0;
   R5 = 0.0;
   R6 = 0.0;
   R7 = 0.0;
   R8 = 0.0;
   R9 = 0.0;
   R10 = 0.0;
   S1 = 0.0;
   S2 = 0.0;
   S3 = 0.0;
   S4 = 0.0;
   S5 = 0.0;
   S6 = 0.0;
   S7 = 0.0;
   S8 = 0.0;
   S9 = 0.0;
   S10 = 0.0;
   openPrice=0.0;
   if(TimeFrame == PERIOD_D1 && iShiftHours != 0)
     {
      GetShiftInfo(Shift, startBarShift, endBarShift, startTimeShift, endTimeShift);
     }
   if(TimeFrame == PERIOD_D1 && iShiftHours != 0)
     {
      barOpen = iOpen(NULL, PERIOD_H1, startBarShift);
     }
   else
     {
      barOpen = iOpen(NULL, TimeFrame, Shift);
     }
   if(barOpen == 0)
     {
      error = GetLastError();
      Print("<= Error getting current bar open => ", error);
      return error;
     }

   double atr = iATR(_Symbol, AtrTimeFrame,AtrPeriod, 0);

   R1 = barOpen + ATRmultiR1  * atr;
   R2 = barOpen + ATRmultiR2  * atr;
   R3 = barOpen + ATRmultiR3  * atr;
   R4 = barOpen + ATRmultiR4  * atr;
   R5 = barOpen + ATRmultiR5  * atr;
   R6 = barOpen + ATRmultiR6  * atr;
   R7 = barOpen + ATRmultiR7  * atr;
   R8 = barOpen + ATRmultiR8  * atr;
   R9 = barOpen + ATRmultiR9  * atr;
   R10 = barOpen + ATRmultiR10  * atr;
   S1 = barOpen - ATRmultiS1  * atr;
   S2 = barOpen - ATRmultiS2  * atr;
   S3 = barOpen - ATRmultiS3  * atr;
   S4 = barOpen - ATRmultiS4  * atr;
   S5 = barOpen - ATRmultiS5  * atr;
   S6 = barOpen - ATRmultiS6  * atr;
   S7 = barOpen - ATRmultiS7  * atr;
   S8 = barOpen - ATRmultiS8  * atr;
   S9 = barOpen - ATRmultiS9  * atr;
   S10 = barOpen - ATRmultiS10  * atr;
   openPrice = barOpen;
   return error;
  }
//+------------------------------------------------------------------+
void DeleteAllObjects()
  {
   int shift = 0;
   for(shift = 0; shift <=  AtrTimeFrame; shift++)
     {
      LevelsDelete(gPeriod, shift);
     }
   return;
  }

//+------------------------------------------------------------------+
void LevelsDelete(string PeriodStr,
                  int    Shift)
  {
   ObjectDelete(PeriodStr + "R10_T");
   ObjectDelete(PeriodStr + "R9_T");
   ObjectDelete(PeriodStr + "R8_T");
   ObjectDelete(PeriodStr + "R7_T");
   ObjectDelete(PeriodStr + "R6_T");
   ObjectDelete(PeriodStr + "R5_T");
   ObjectDelete(PeriodStr + "R4_T");
   ObjectDelete(PeriodStr + "R3_T");
   ObjectDelete(PeriodStr + "R2_T");
   ObjectDelete(PeriodStr + "R1_T");
   ObjectDelete(PeriodStr + "S1_T");
   ObjectDelete(PeriodStr + "S2_T");
   ObjectDelete(PeriodStr + "S3_T");
   ObjectDelete(PeriodStr + "S4_T");
   ObjectDelete(PeriodStr + "S5_T");
   ObjectDelete(PeriodStr + "S6_T");
   ObjectDelete(PeriodStr + "S7_T");
   ObjectDelete(PeriodStr + "S8_T");
   ObjectDelete(PeriodStr + "S9_T");
   ObjectDelete(PeriodStr + "S10_T");
   ObjectDelete(PeriodStr + "R10_P");
   ObjectDelete(PeriodStr + "R9_P");
   ObjectDelete(PeriodStr + "R8_P");
   ObjectDelete(PeriodStr + "R7_P");
   ObjectDelete(PeriodStr + "R6_P");
   ObjectDelete(PeriodStr + "R5_P");
   ObjectDelete(PeriodStr + "R4_P");
   ObjectDelete(PeriodStr + "R3_P");
   ObjectDelete(PeriodStr + "R2_P");
   ObjectDelete(PeriodStr + "R1_P");
   ObjectDelete(PeriodStr + "S1_P");
   ObjectDelete(PeriodStr + "S2_P");
   ObjectDelete(PeriodStr + "S3_P");
   ObjectDelete(PeriodStr + "S4_P");
   ObjectDelete(PeriodStr + "S5_P");
   ObjectDelete(PeriodStr + "S6_P");
   ObjectDelete(PeriodStr + "S7_P");
   ObjectDelete(PeriodStr + "S8_P");
   ObjectDelete(PeriodStr + "S9_P");
   ObjectDelete(PeriodStr + "S10_P");
   ObjectDelete(PeriodStr + "R10_L");
   ObjectDelete(PeriodStr + "R9_L");
   ObjectDelete(PeriodStr + "R8_L");
   ObjectDelete(PeriodStr + "R7_L");
   ObjectDelete(PeriodStr + "R6_L");
   ObjectDelete(PeriodStr + "R5_L");
   ObjectDelete(PeriodStr + "R4_L");
   ObjectDelete(PeriodStr + "R3_L");
   ObjectDelete(PeriodStr + "R2_L");
   ObjectDelete(PeriodStr + "R1_L");
   ObjectDelete(PeriodStr + "S1_L");
   ObjectDelete(PeriodStr + "S2_L");
   ObjectDelete(PeriodStr + "S3_L");
   ObjectDelete(PeriodStr + "S4_L");
   ObjectDelete(PeriodStr + "S4_L");
   ObjectDelete(PeriodStr + "S5_L");
   ObjectDelete(PeriodStr + "S6_L");
   ObjectDelete(PeriodStr + "S7_L");
   ObjectDelete(PeriodStr + "S8_L");
   ObjectDelete(PeriodStr + "S9_L");
   ObjectDelete(PeriodStr + "S10_L");
   ObjectDelete(PeriodStr + "O_T");
   ObjectDelete(PeriodStr + "O_P");
   ObjectDelete(PeriodStr + "O_L");
   ObjectDelete(PeriodStr + "BDL_");
   ObjectDelete(PeriodStr + "BDR_");
  }
//+------------------------------------------------------------------+
bool PlotTrend(const long              Chart_ID = 0,
               string                  Name = "trendline",
               const int               Subwindow = 0,
               datetime                Time1 = 0,
               double                  Price1 = 0,
               datetime                Time2 = 0,
               double                  Price2 = 0,
               const color             Clr = clrBlack,
               const int               Style = STYLE_SOLID,
               const int               Width = 2,
               const bool              Back = true,
               const bool              Selection = false,
               const bool              Ray = false,
               const bool              Hidden = true)
  {
   ResetLastError();
   if(!ObjectCreate(Chart_ID, Name, OBJ_TREND, Subwindow, Time1, Price1, Time2, Price2))
     {
      Print(__FUNCTION__, ": failed to create trendline = ", GetLastError());
      return(false);
     }
   ObjectSetInteger(Chart_ID, Name, OBJPROP_COLOR, Clr);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_STYLE, Style);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_WIDTH, Width);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_BACK, Back);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_SELECTABLE, Selection);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_SELECTED, Selection);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_RAY, Ray);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_HIDDEN, Hidden);
   return(true);
  }
//+------------------------------------------------------------------+
bool PlotText(const long        Chart_ID = 0,
              string            Name = "text",
              const int         Subwindow = 0,
              datetime          Time1 = 0,
              double            Price1 = 0,
              const string      Text = "text",
              const string      Font = "Arial",
              const int         Font_size = 10,
              const color       Clr = clrGray,
              const int         Anchor = ANCHOR_RIGHT_UPPER,
              const bool        Back = true,
              const bool        Selection = false,
              const bool        Hidden = true)
  {
   ResetLastError();
   if(!ObjectCreate(Chart_ID, Name, OBJ_TEXT, Subwindow, Time1, Price1))
     {
      Print(__FUNCTION__,": failed to create text = ",GetLastError());
      return(false);
     }
   ObjectSetString(Chart_ID, Name, OBJPROP_TEXT, Text);
   ObjectSetString(Chart_ID, Name, OBJPROP_FONT, Font);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_FONTSIZE, Font_size);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_COLOR, Clr);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_ANCHOR, Anchor);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_SELECTABLE, Selection);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_SELECTED, Selection);
   ObjectSetInteger(Chart_ID, Name, OBJPROP_HIDDEN, Hidden);
   return(true);
  }
//+------------------------------------------------------------------+
