FiboPivot_V2





//+------------------------------------------------------------------+
//|                                                    FiboPivot.mq4 |
//|                                                        Scriptong |
//|                                                scriptong@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Scriptong"
#property link      "scriptong@mail.ru"

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Lime
#property indicator_color2 Green
#property indicator_color3 DarkGreen
#property indicator_color4 Maroon
#property indicator_color5 Crimson
#property indicator_color6 Red
#property indicator_color7 Blue
//---- input parameters
extern double    Resistance3=138.2;
extern double    Resistance2=100.0;
extern double    Resistance1=61.8;
extern double    Support1=61.8;
extern double    Support2=100;
extern double    Support3=138.2;
extern bool      ShowDescription=True;
extern color     Resistance3Color=Lime;
extern color     Resistance2Color=Green;
extern color     Resistance1Color=DarkGreen;
extern color     Support1Color=Maroon;
extern color     Support2Color=Crimson;
extern color     Support3Color=Red;
extern color     PivotColor=Blue; 


//---- buffers
double Res3[];
double Res2[];
double Res1[];
double Supp1[];
double Supp2[];
double Supp3[];
double Pivot[];

bool Activate;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   Activate = False;
//---- indicators
   SetIndexStyle(0, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(0,Res3);
   SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(1,Res2);
   SetIndexStyle(2, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(2,Res1);
   SetIndexStyle(3, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(3,Supp1);
   SetIndexStyle(4, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(4,Supp2);
   SetIndexStyle(5, DRAW_LINE, STYLE_DOT);
   SetIndexBuffer(5,Supp3);
   SetIndexStyle(6, DRAW_LINE);
   SetIndexBuffer(6,Pivot);
   
   if (Period() > PERIOD_H4)
     { 
      Comment("Èíäèêàòîð FiboPivot ðàáîòàåò íà ãðàôèêàõ íå âûøå H4.");
      return(0);
     }
   
   Activate = True;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   for (int i = ObjectsTotal()-1; i >= 0; i--)
     if (StringSubstr(ObjectName(i), 0, 5) == "Pivot" ||
         StringSubstr(ObjectName(i), 0, 3) == "Res" ||
         StringSubstr(ObjectName(i), 0, 4) == "Supp")
        ObjectDelete(ObjectName(i)); 
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
//| Îáúåêò-ìåòêà ñî çíà÷åíèåì öåíû                                   |
//+------------------------------------------------------------------+
void ObjectLabel(string name, string Text, datetime Time1, double Price1, color col)
{
 if (ObjectFind(name) < 0) 
   {
    ObjectCreate(name, OBJ_TEXT, 0, Time1, Price1);
    ObjectSet(name, OBJPROP_COLOR, col);
   } 
  else
   ObjectMove(name, 0, Time1, Price1); 
 ObjectSetText(name, Text, 8, "Arial");  
   
}

  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if (!Activate) return(0); 
  
   int    counted_bars=IndicatorCounted();
//----
   datetime NowDay = iTime(Symbol(), PERIOD_D1, 0);
   int FirstDayBar = iBarShift(Symbol(), 0, NowDay);
   
   if (Bars-counted_bars < FirstDayBar)
     int limit = FirstDayBar;
    else
     limit = Bars - counted_bars;
     
   int LastPrevDay = iBars(Symbol(), PERIOD_D1);
     
   for (int i = limit; i >= 0; i--)
     {
      int PrevDay = iBarShift(Symbol(), PERIOD_D1, Time[i])+1; // íîìåð áàðà ïðåäûäóùåãî äíÿ íà ãðàôèêå D1
      if (LastPrevDay != PrevDay)
        {
         double HighDay = iHigh(Symbol(), PERIOD_D1, PrevDay); // Ìàêñèìóì ïðåäûäóùåãî äíÿ
         double LowDay = iLow(Symbol(), PERIOD_D1, PrevDay); // Ìèíèìóì ïðåäûäóùåãî äíÿ
         double CloseDay = iClose(Symbol(), PERIOD_D1, PrevDay); // Çàêðûòèå ïðåäûäóùåãî äíÿ
         double Width = HighDay - LowDay;
         Pivot[i] = (HighDay+LowDay+CloseDay)/3; //Ñòàíäàðòíûé Pivot - òèïè÷íàÿ öåíà äíÿ
         Res1[i] = Pivot[i] + Width*(Resistance1/100.0);
         Res2[i] = Pivot[i] + Width*(Resistance2/100.0);
         Res3[i] = Pivot[i] + Width*(Resistance3/100.0);
         Supp1[i] = Pivot[i] - Width*(Support1/100.0);
         Supp2[i] = Pivot[i] - Width*(Support2/100.0);
         Supp3[i] = Pivot[i] - Width*(Support3/100.0);
         if (ShowDescription)
           {
            datetime DayTime = iTime(Symbol(), PERIOD_D1, PrevDay-1) + 43200;
            ObjectLabel("Pivot"+DoubleToStr(DayTime, 0), 
                        "Pivot "+DoubleToStr(Pivot[i], Digits), DayTime, Pivot[i], PivotColor);
            ObjectLabel("Res1"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Resistance1, 1)+"%  "+DoubleToStr(Res1[i], Digits), DayTime, Res1[i], Resistance1Color);
            ObjectLabel("Res2"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Resistance2, 1)+"%  "+DoubleToStr(Res2[i], Digits), DayTime, Res2[i], Resistance2Color);
            ObjectLabel("Res3"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Resistance3, 1)+"%  "+DoubleToStr(Res3[i], Digits), DayTime, Res3[i], Resistance3Color);
            ObjectLabel("Supp1"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Support1, 1)+"%  "+DoubleToStr(Supp1[i], Digits), DayTime, Supp1[i], Support1Color);
            ObjectLabel("Supp2"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Support2, 1)+"%  "+DoubleToStr(Supp2[i], Digits), DayTime, Supp2[i], Support2Color);
            ObjectLabel("Supp3"+DoubleToStr(DayTime, 0), 
                        DoubleToStr(Support3, 1)+"%  "+DoubleToStr(Supp3[i], Digits), DayTime, Supp3[i], Support3Color);
           }             
         LastPrevDay = PrevDay;
        } 
       else
        {
         Pivot[i] = Pivot[i+1];
         Res1[i] = Res1[i+1];
         Res2[i] = Res2[i+1];
         Res3[i] = Res3[i+1];
         Supp1[i] = Supp1[i+1];
         Supp2[i] = Supp2[i+1];
         Supp3[i] = Supp3[i+1];
        } 
     }   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: