//+------------------------------------------------------------------+
//|                                                   FiboPiv_v2.mq4 |
//|                                                          Kalenzo |
//|                                      bartlomiej.gorski@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Kalenzo"
#property link      "bartlomiej.gorski@gmail.com"
//----
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("S1");
   ObjectDelete("S2");
   ObjectDelete("S3");
   ObjectDelete("R1");
   ObjectDelete("R2");
   ObjectDelete("R3");
   ObjectDelete("PIVIOT");
   ObjectDelete("Support 1");
   ObjectDelete("Support 2");
   ObjectDelete("Support 3");
   ObjectDelete("Piviot level");
   ObjectDelete("Resistance 1");
   ObjectDelete("Resistance 2");
   ObjectDelete("Resistance 3");
   Comment(" ");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double rates[1][6],yesterday_close,yesterday_high,yesterday_low;
   ArrayCopyRates(rates,Symbol(),PERIOD_D1);
//----
   if(DayOfWeek()==1)
     {
      if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,1))==5)
        {
         yesterday_close= rates[1][4];
         yesterday_high = rates[1][3];
         yesterday_low=rates[1][2];
        }
      else
        {
         for(int d=5;d>=0;d--)
           {
            if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,d))==5)
              {
               yesterday_close= rates[d][4];
               yesterday_high = rates[d][3];
               yesterday_low=rates[d][2];
              }

           }
        }
     }
   else
     {
      yesterday_close= rates[1][4];
      yesterday_high = rates[1][3];
      yesterday_low=rates[1][2];
     }
//---- Calculate Pivots
   Comment("\nYesterday quotations:\nH ",yesterday_high,"\nL ",yesterday_low,"\nC ",yesterday_close);
   double R=yesterday_high-yesterday_low;//range
   double p=(yesterday_high+yesterday_low+yesterday_close)/3;// Standard Pivot
   double r3 = p + (R * 1.000);
   double r2 = p + (R * 0.618);
   double r1 = p + (R * 0.382);
   double s1 = p - (R * 0.382);
   double s2 = p - (R * 0.618);
   double s3 = p - (R * 1.000);
//----
   drawLine(r3,"R3",Lime,0);
   drawLabel("Resistance 3",r3,Lime);
   drawLine(r2,"R2",Green,0);
   drawLabel("Resistance 2",r2,Green);
   drawLine(r1,"R1",DarkGreen,0);
   drawLabel("Resistance 1",r1,DarkGreen);
   drawLine(p,"PIVIOT",Blue,1);
   drawLabel("Piviot level",p,Blue);
   drawLine(s1,"S1",Maroon,0);
   drawLabel("Support 1",s1,Maroon);
   drawLine(s2,"S2",Crimson,0);
   drawLabel("Support 2",s2,Crimson);
   drawLine(s3,"S3",Red,0);
   drawLabel("Support 3",s3,Red);
//----
   return(0);
  }
//+------------------------------------------------------------------+
void drawLabel(string name,double lvl,color Color)
  {
   if(ObjectFind(name)!=0)
     {
      if(Bars<10) return;
      ObjectCreate(name,OBJ_TEXT,0,Time[10],lvl);
      ObjectSetText(name,name,8,"Arial",EMPTY);
      ObjectSet(name,OBJPROP_COLOR,Color);
     }
   else
     {
      if(Bars<10) return;
      ObjectMove(name,0,Time[10],lvl);
     }
  }
//----
void drawLine(double lvl,string name,color Col,int type)
  {
   if(ObjectFind(name)!=0)
     {
      ObjectCreate(name,OBJ_HLINE,0,Time[0],lvl,Time[0],lvl);
      if(type==1)
         ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);
      else
         ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
      ObjectSet(name,OBJPROP_COLOR,Col);
      ObjectSet(name,OBJPROP_WIDTH,1);
     }
   else
     {
      ObjectDelete(name);
      ObjectCreate(name,OBJ_HLINE,0,Time[0],lvl,Time[0],lvl);
      if(type==1)
         ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);
      else
         ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
      ObjectSet(name,OBJPROP_COLOR,Col);
      ObjectSet(name,OBJPROP_WIDTH,1);
     }
  }
//+--------------------------------------------------------------------+
