//+------------------------------------------------------------------+
//|                                                AllPivotPoint.mq4 |
//|                                         Copyright © 2010, LeMan. |
//|                                                 b-market@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, LeMan."
#property link      "b-market@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Green
#property indicator_color2 Green
#property indicator_color3 Green
#property indicator_color4 Green
#property indicator_color5 Red
#property indicator_color6 Red
#property indicator_color7 Red
#property indicator_color8 Red
//----
extern bool weekend = false;
extern int TypePivot = 0;
extern string tp = "-- Возможные значения TypePivot ---";
extern string tp0 = "-- 0 - Classic ---";
extern string tp1 = "-- 1 - Fibonacci ---";
extern string tp2 = "-- 2 - Camarilla ---";
extern string tp3 = "-- 3 - Woodie ---";
extern string tp4 = "-- 4 - DeMark ---";
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
   IndicatorBuffers(8);
   IndicatorDigits(Digits);
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexBuffer(7,ExtMapBuffer8);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexStyle(4,DRAW_LINE);
   SetIndexStyle(5,DRAW_LINE);
   SetIndexStyle(6,DRAW_LINE);
   SetIndexStyle(7,DRAW_LINE); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
//----
   
//----
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
//----   
   if (Period() > 1439) {
      Alert("ТФ должен быть меньше дневного!");
      return(-1);
   }
   if (TypePivot > 4 || TypePivot < 0) {
      Alert("Тип Pivot " + TypePivot + " не существует!");
      return(-1);   
   } 
//----
   int i, limit, counted_bars=IndicatorCounted();
   double hhv, llv, cl, p, tr, x, op;
//----
   limit=Bars-counted_bars;
   if(counted_bars>0) limit--;
//----
  for (i = limit; i >= 0; i--)
    { 
   int PrevDay = iBarShift(Symbol(), PERIOD_D1, Time[i])+1;
      if (!weekend) {
         if (TimeDayOfWeek(Time[i]) == 1) PrevDay = iBarShift(Symbol(), PERIOD_D1, Time[i])+2;
      }
      hhv = iHigh(NULL, PERIOD_D1, PrevDay);
      llv = iLow(NULL, PERIOD_D1, PrevDay);
      cl = iClose(NULL, PERIOD_D1, PrevDay);
      op = iOpen(NULL, PERIOD_D1, PrevDay);
      tr = hhv-llv;
      p = (hhv+llv+cl)/3;
      if (TypePivot == 0) { // Classic
         ExtMapBuffer1[i] = 2*p-llv;
         ExtMapBuffer2[i] = p+hhv-llv;
         ExtMapBuffer3[i] = 2*p+hhv-2*llv;
         ExtMapBuffer4[i] = EMPTY_VALUE;
         ExtMapBuffer5[i] = 2*p-hhv;
         ExtMapBuffer6[i] = p+llv-hhv;
         ExtMapBuffer7[i] = 2*p+llv-2*hhv;
         ExtMapBuffer8[i] = EMPTY_VALUE;
      }
      if (TypePivot == 1) { // Fibo
         ExtMapBuffer1[i] = p+tr*0.382;
         ExtMapBuffer2[i] = p+tr*0.618;
         ExtMapBuffer3[i] = p+tr;
         ExtMapBuffer4[i] = p+tr*1.382;
         ExtMapBuffer5[i] = p-tr*0.382;
         ExtMapBuffer6[i] = p-tr*0.618;
         ExtMapBuffer7[i] = p-tr;
         ExtMapBuffer8[i] = p-tr*1.382;
      }
      if (TypePivot == 2) { // Camarilla
         ExtMapBuffer1[i] = tr*(1.1/6)+cl;
         ExtMapBuffer2[i] = tr*(1.1/4)+cl;
         ExtMapBuffer3[i] = tr*(1.1/2)+cl;
         if (llv > 0.0)
            ExtMapBuffer4[i] = (hhv/llv)*cl;
         ExtMapBuffer5[i] = cl-tr*(1.1/6);
         ExtMapBuffer6[i] = cl-tr*(1.1/4);
         ExtMapBuffer7[i] = cl-tr*(1.1/2);
         if (llv > 0.0)
            ExtMapBuffer8[i] = cl-((hhv/llv)*cl-cl);
      }
      if (TypePivot == 3) { // Woodie
         x = (hhv + llv + 2*cl)/4;
         ExtMapBuffer1[i] = 2*x-llv;
         ExtMapBuffer2[i] = x + hhv - llv;
         ExtMapBuffer3[i] = EMPTY_VALUE;
         ExtMapBuffer4[i] = EMPTY_VALUE;
         ExtMapBuffer5[i] = 2*x-hhv;
         ExtMapBuffer6[i] = x - hhv + llv;
         ExtMapBuffer7[i] = EMPTY_VALUE;
         ExtMapBuffer8[i] = EMPTY_VALUE;
      }      
      if (TypePivot == 4) { // DeMark         
         if (cl < op) {
            x = (hhv + 2*llv + cl)/2;
         }
         if (cl > op) {
            x = (2*hhv + llv + cl)/2;
         }
         if (cl == op) {
            x = (hhv + llv + 2*cl)/2;
         }         
         ExtMapBuffer1[i] = x-llv;
         ExtMapBuffer2[i] = EMPTY_VALUE;
         ExtMapBuffer3[i] = EMPTY_VALUE;
         ExtMapBuffer4[i] = EMPTY_VALUE;
         ExtMapBuffer5[i] = x-hhv;
         ExtMapBuffer6[i] = EMPTY_VALUE;
         ExtMapBuffer7[i] = EMPTY_VALUE;
         ExtMapBuffer8[i] = EMPTY_VALUE;
      }      
    }
//----
   return(0);
}
//+------------------------------------------------------------------+