

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Yellow
#property indicator_color2 Magenta
#property indicator_color3 Magenta
#property indicator_color4 Aqua
#property indicator_color5 Aqua
#property indicator_color6 Yellow
#property indicator_color7 Yellow

//---- buffers
double P1Buffer[];
double P2Buffer[];
double P3Buffer[];
double P4Buffer[];
double P5Buffer[];
double P6Buffer[];
double P7Buffer[];

int myPeriod=PERIOD_W1;

double PP,R1,S1,R2,S2,R3,S3,Q;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,P1Buffer);
   SetIndexBuffer(1,P2Buffer);
   SetIndexBuffer(2,P3Buffer);
   SetIndexBuffer(3,P4Buffer);
   SetIndexBuffer(4,P5Buffer);
   SetIndexBuffer(5,P6Buffer);
   SetIndexBuffer(6,P7Buffer);

   SetIndexStyle(0,DRAW_LINE,STYLE_DASHDOTDOT,0);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(6,DRAW_LINE,STYLE_SOLID,2);
  
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("WeekP");
   ObjectDelete("WeekR1");
   ObjectDelete("WeekR2");
   ObjectDelete("WeekR3");
   ObjectDelete("WeekS1");
   ObjectDelete("WeekS2");
   ObjectDelete("WeekS3");
   ObjectDelete("txtWeekP");
   ObjectDelete("txtWeekR1");
   ObjectDelete("txtWeekR2");
   ObjectDelete("txtWeekR3");
   ObjectDelete("txtWeekS1");
   ObjectDelete("txtWeekS2");
   ObjectDelete("txtWeekS3");
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i,dayi,counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;  
   int limit=Bars-counted_bars;
   
   for(i=limit-1; i>=0; i--)
    {
       dayi=iBarShift(Symbol(), myPeriod, Time[i],false);
       
       Q=(iHigh(Symbol(), myPeriod,dayi+1)-iLow(Symbol(), myPeriod,dayi+1));
       
       PP=(iHigh(Symbol(), myPeriod,dayi+1) + 
           iLow(Symbol(), myPeriod,dayi+1) +
           iClose(Symbol(), myPeriod,dayi+1)) / 3;
                     
           
       R1=PP + (Q * 0.38);
       S1=PP - (Q * 0.38);

       R2=PP + (Q * 1.00);
       S2=PP - (Q * 1.00);

       R3=PP + (Q * 1.38);
       S3=PP - (Q * 1.38);

       P1Buffer[i]=PP;
       SetPrice("WeekP",Time[i],PP,Yellow);
       SetText("txtWeekP","WP",Time[i],PP,Yellow);

       P2Buffer[i]=R1;
       SetPrice("WeekR1",Time[i],R1,Magenta);
       SetText("txtWeekR1","W-R38%",Time[i],R1,Magenta);

       P3Buffer[i]=S1;
       SetPrice("WeekS1",Time[i],S1,Magenta);
       SetText("txtWeekS1","W-S38%",Time[i],S1,Magenta);

       P4Buffer[i]=R2;
       SetPrice("WeekR2",Time[i],R2,Aqua);
       SetText("txtWeekR2","W-R100%",Time[i],R2,Aqua);

       P5Buffer[i]=S2;
       SetPrice("WeekS2",Time[i],S2,Aqua);
       SetText("txtWeekS2","W-S100%",Time[i],S2,Aqua);

       P6Buffer[i]=R3;
       SetPrice("WeekR3",Time[i],R3,Yellow);
       SetText("txtWeekR3","W-R138%",Time[i],R3,Yellow);

       P7Buffer[i]=S3;
       SetPrice("WeekS3",Time[i],S3,Yellow);
       SetText("txtWeekS3","W-S138%",Time[i],S3,Yellow);

    }
//----
   return(0);
  }

void SetPrice(string name,datetime Tm,double Prc,color clr)
  {
   if(ObjectFind(name) == -1)
     {
       ObjectCreate(name, OBJ_ARROW, 0, Tm, Prc);
       ObjectSet(name, OBJPROP_COLOR, clr);
       ObjectSet(name, OBJPROP_WIDTH, 2);
       ObjectSet(name, OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
     }
   else
     {
       ObjectSet(name, OBJPROP_TIME1, Tm);
       ObjectSet(name, OBJPROP_PRICE1, Prc);
       ObjectSet(name, OBJPROP_COLOR, clr);
       ObjectSet(name, OBJPROP_WIDTH, 2);
       ObjectSet(name, OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
     } 
  }

void SetText(string name,string txt,datetime Tm,double Prc,color clr)
  {
   if(ObjectFind(name) == -1)
     {
       ObjectCreate(name, OBJ_TEXT, 0, Tm, Prc);
       ObjectSetText(name,txt, 9, "Arial", clr);
       ObjectSet(name, OBJPROP_CORNER,2);
     }
   else
     {
       ObjectSet(name, OBJPROP_TIME1, Tm);
       ObjectSet(name, OBJPROP_PRICE1, Prc);
       ObjectSetText(name,txt, 9, "Arial", clr);
       ObjectSet(name, OBJPROP_CORNER,2);
     } 
  }

//+------------------------------------------------------------------+