//+------------------------------------------------------------------+
//|                                                       Levels.mq4 |
//|                                                             Maks |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Maks aka ug"
#property link      ""

#property indicator_chart_window

extern string Timeframe="D1";

extern color LineColor_sopr = Blue;
extern int LineWidth_sopr = 2;
extern int LineStyle_sopr = 0;

extern color LineColor_pod = DarkOrange;
extern int LineWidth_pod = 2;
extern int LineStyle_pod = 0;

//Служат для варианта расчета в зависимости от размеров предыдущей свечи (50 < X < 200, значит нормальный)
extern int high_diap = 200;
extern int low_diap = 50;

double close_price,high_price,low_price;
double R[5],S[5];
int PeriodName=0;
int diap = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
  if (Timeframe=="M1") PeriodName=PERIOD_M1;
   else
      if (Timeframe=="M5") PeriodName=PERIOD_M5;
      else
         if (Timeframe=="M15")PeriodName=PERIOD_M15;
         else
            if (Timeframe=="M30")PeriodName=PERIOD_M30;
            else
               if (Timeframe=="H1") PeriodName=PERIOD_H1;
               else
                  if (Timeframe=="H4") PeriodName=PERIOD_H4;
                  else
                     if (Timeframe=="D1") PeriodName=PERIOD_D1;
                     else
                        if (Timeframe=="W1") PeriodName=PERIOD_W1;
                        else
                           if (Timeframe=="MN") PeriodName=PERIOD_MN1;
                           else
                             {
                              return(0);
                             }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
for(int i=1; i<=5; i++)
{
   ObjectDelete("Lines" + i);
   ObjectDelete(Symbol()+Timeframe+"Linep" + i);
}
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {

   close_price=iClose(NULL,PeriodName,1);
   high_price=iHigh(NULL,PeriodName,1);
   low_price=iLow(NULL,PeriodName,1);
   
   if (high_price - low_price > high_diap) diap = 1;
   if (high_price - low_price < low_diap) diap = 2;

if (diap == 1)
{   
//Суженный
S[1] = close_price - ((high_price - low_price)*0.146)/2;
R[1] = ((high_price - low_price)*0.146)/2 + close_price;
R[2] = ((high_price - low_price)*0.236)+R[1];
R[3] = R[1]+2*((high_price - low_price)*0.236);
R[4] = R[3] + (R[1] - S[1]);
R[5] = R[4] + ((high_price - low_price)*0.236);
S[2] = S[1] - ((high_price - low_price)*0.236);
S[3] = S[1]- ((high_price - low_price)*0.236)*2;
S[4] = S[3] - (R[1] - S[1]);
S[5] = S[4] - ((high_price - low_price)*0.236);
}

if (diap == 0)
{
//Нормальный
S[1] = close_price - ((high_price - low_price)*0.236)/2; 
R[1] = ((high_price - low_price)*0.236)/2 + close_price;
R[2] = ((high_price - low_price)*0.382)+R[1];
R[3] = R[1]+2*((high_price - low_price)*0.382);
R[4] = R[3] + (R[1] - S[1]);
R[5] = R[4] + ((high_price - low_price)*0.382);
S[2] = S[1] - ((high_price - low_price)*0.382);
S[3] = S[1]-2*((high_price - low_price)*0.382);
S[4] = S[3] - (R[1] - S[1]);
S[5] = S[4] - ((high_price - low_price)*0.382);
}

if (diap == 2)
{
//Расширенный
S[1] = close_price - ((high_price - low_price)*0.382)/2; 
R[1] = ((high_price - low_price)*0.382)/2 + close_price;
R[2] = ((high_price - low_price)*0.618)+R[1];
R[3] = R[1]+2*((high_price - low_price)*0.618);
R[4] = R[3] + (R[1] - S[1]);
R[5] = R[4] + ((high_price - low_price)*0.618);
S[2] = S[1] - ((high_price - low_price)*0.618);
S[3] = S[1]-2*((high_price - low_price)*0.618);
S[4] = S[3] - (R[1] - S[1]);
S[5] = S[4] - ((high_price - low_price)*0.618);
}

for(int i=1; i<=5; i++)
{
   ObjectCreate(Symbol()+Timeframe+"Lines" + i,OBJ_HLINE,0,0,R[i]);
   ObjectSet(Symbol()+Timeframe+"Lines" + i,OBJPROP_COLOR,LineColor_sopr);
   ObjectSet(Symbol()+Timeframe+"Lines" + i,OBJPROP_WIDTH,LineWidth_sopr);
   ObjectSet(Symbol()+Timeframe+"Lines" + i,OBJPROP_STYLE,LineStyle_sopr);
   
   ObjectCreate(Symbol()+Timeframe+"Linep" + i,OBJ_HLINE,0,0,S[i]);
   ObjectSet(Symbol()+Timeframe+"Linep" + i,OBJPROP_COLOR,LineColor_pod);
   ObjectSet(Symbol()+Timeframe+"Linep" + i,OBJPROP_WIDTH,LineWidth_pod);
   ObjectSet(Symbol()+Timeframe+"Linep" + i,OBJPROP_STYLE,LineStyle_pod);
}   
   return(0);
  }
//+------------------------------------------------------------------+