
#property copyright "Copyright © 2013, AtApi"
#property link      "dumpinto@gmail.com"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 DarkBlue
#property indicator_color2 DarkOrange
#property indicator_color3 DarkOrange
#property indicator_color4 Red
#property indicator_color5 Red
#property  indicator_width1  2
#property  indicator_width2  2
#property  indicator_width3  2
#property  indicator_width4  1
#property  indicator_width5  1
#property  indicator_style4  4
#property  indicator_style5  4

//---- input parameters
extern int       Pivema=48;
extern double ATRMultiplier   = 2.6;
extern int    ATRPeriod       = 110;
extern int       MODE=2;
extern int       Price=5;
extern int       RangeBars= 48;
extern double Level = 0.618;
extern double Level2 = 0.618;
extern int       Level2Shift= 1;
//---- buffers
double PivemaBuffer[];
double PivemaLevel1Up[];
double PivemaLevel1Dw[];
double PivemaLevel2Up[];
double PivemaLevel2Dw[];
bool   returnBars;
double Range[];
double Range2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(7);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexStyle(5,DRAW_NONE);
   SetIndexStyle(6,DRAW_NONE);
   SetIndexBuffer(0,PivemaBuffer);
   SetIndexBuffer(1,PivemaLevel1Up);
   SetIndexBuffer(2,PivemaLevel1Dw);
   SetIndexBuffer(3,PivemaLevel2Up);
   SetIndexBuffer(4,PivemaLevel2Dw);
   SetIndexShift(3,Level2Shift);
   SetIndexShift(4,Level2Shift);
   SetIndexBuffer(5,Range);
 SetIndexBuffer(6,Range2);
   IndicatorShortName("FiboPivotEma("+Pivema+")");
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i,counted_bars = IndicatorCounted();
      if(counted_bars<0) return(-1);
      if(counted_bars>0) counted_bars--;   
           int limit=MathMin(Bars-counted_bars,Bars-1);
           if (returnBars) { PivemaBuffer[0] = MathMin(limit+1,Bars-1); return(0); 
           
  }
  
   for (i=limit;i>=0;i--) 
   {
   
        

   
   
        double Hiest = High[Highest(NULL,0,MODE_HIGH,RangeBars,i)];
        double Loest =  Low[Lowest(NULL,0,MODE_LOW,RangeBars,i)];
      
      
      
      PivemaBuffer[i] = (Hiest + Loest + iMA(NULL,0,Pivema,0,MODE,Price,i)) /3;
      Range[i] = iATR(NULL,0,ATRPeriod,i)*ATRMultiplier;
      Range2[i] = (Hiest - Loest);
      PivemaLevel1Up[i] = PivemaBuffer[i] + (Range[i] * Level);
      PivemaLevel1Dw[i] = PivemaBuffer[i] - (Range[i] * Level);
      
      PivemaLevel2Up[i] = PivemaBuffer[i] + (Range2[i] * Level2);
      PivemaLevel2Dw[i] = PivemaBuffer[i] - (Range2[i] * Level2);

      
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+