//+------------------------------------------------------------------+
//|                              Auto-Pivot Plotter Weekly V1-00.mq4 |
//|                                  Copyright © 2007, BundyRaider   |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, BundyRaider"
#property link      ""
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 FireBrick
#property indicator_color2 FireBrick
#property indicator_color3 FireBrick
#property indicator_color4 SlateGray
#property indicator_color5 LimeGreen
#property indicator_color6 LimeGreen
#property indicator_color7 LimeGreen
#property indicator_color8 Green
//---- input parameters
extern int       DaysToPlot = 20; //If DaysToPlot is "0" (zero) we plot ALL available data
extern int       Linewidth = 2;
extern color     cPivot = SlateGray;
extern color     cSupport = LimeGreen;
extern color     cResistance = FireBrick;
extern bool      ShowPriceLabel = true;
extern string    LabelFontType = "Arial Black";
extern int       LabelFontSize = 7;
extern int       LabelShift = 0;
//---- buffers
double Res3[];
double Res2[];
double Res1[];
double Pivot[];
double Supp1[];
double Supp2[];
double Supp3[];
double Extra1[];
datetime LabelShiftTime;
double digits;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,Linewidth,cResistance);
   SetIndexBuffer(0,Res3);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,Linewidth,cResistance);
   SetIndexBuffer(1,Res2);
   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,Linewidth,cResistance);
   SetIndexBuffer(2,Res1);
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,Linewidth,cPivot);
   SetIndexBuffer(3,Pivot);
   SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,Linewidth,cSupport);
   SetIndexBuffer(4,Supp1);
   SetIndexStyle(5,DRAW_LINE,STYLE_SOLID,Linewidth,cSupport);
   SetIndexBuffer(5,Supp2);
   SetIndexStyle(6,DRAW_LINE,STYLE_SOLID,Linewidth,cSupport);
   SetIndexBuffer(6,Supp3);
   SetIndexStyle(7,DRAW_LINE,STYLE_SOLID,Linewidth);
   SetIndexBuffer(7,Extra1);
   
   SetIndexLabel(0, "W_R3");
   SetIndexLabel(1, "W_R2");
   SetIndexLabel(2, "W_R1");
   SetIndexLabel(3, "W_PP");
   SetIndexLabel(4, "W_S1");
   SetIndexLabel(5, "W_S2");
   SetIndexLabel(6, "W_S3");
   
   //---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Weekly Pivot Point");
   //----
   SetIndexDrawBegin(0,1);
  digits =  Digits;  
  if(digits == 5 || digits == 3) { digits  = digits - 1 ; } 
   //IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("WRes3");
   ObjectDelete("WRes2");
   ObjectDelete("WRes1");
   ObjectDelete("WeeklyPivot");
   ObjectDelete("WSup1");
   ObjectDelete("WSup2");
   ObjectDelete("WSup3");
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   
   if(counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
   // ****************************************************
   //    Establish the nuber of bars in a day.
   // ****************************************************
   int BarsInDay=1440/Period();
   
   for(int i=0; i<limit; i++)
   { 
      if ( (i<((DaysToPlot+1)*BarsInDay))||DaysToPlot==0)   // Used to limit the number of days
      {                                                     // that are mapped out. Less waiting ;)
      
      // *****************************************************
      //    Find previous day's opening and closing bars.
      // *****************************************************
      
      //Find Our Week date.
      datetime WeekDate=Time[i];
      int WeeklyBar        =  iBarShift( NULL, PERIOD_W1, WeekDate,false)+1; 
      double PreviousHigh  =  iHigh(NULL, PERIOD_W1,WeeklyBar);
      double PreviousLow   =  iLow(NULL, PERIOD_W1,WeeklyBar);
      double PreviousClose =  iClose(NULL, PERIOD_W1,WeeklyBar);
      
      // ************************************************************************
      //    Calculate Pivot lines and map into indicator buffers.
      // ************************************************************************
      
      double P =  (PreviousHigh+PreviousLow+PreviousClose)/3;
      double R1 = (2*P)-PreviousLow;
      double S1 = (2*P)-PreviousHigh;
      double R2 =  P+(PreviousHigh - PreviousLow);
      double S2 =  P-(PreviousHigh - PreviousLow);
      double R3 = (2*P)+(PreviousHigh-(2*PreviousLow));
      double S3 = (2*P)-((2* PreviousHigh)-PreviousLow); 
      
      LabelShiftTime = Time[LabelShift];
      
   if(ShowPriceLabel)
   {
	
	ObjectCreate("WRes3", OBJ_TEXT, 0, LabelShiftTime, 0);   
   ObjectSetText("WRes3", "               "+DoubleToStr(R3,digits),LabelFontSize,LabelFontType,cResistance);
	SetIndexLabel(0, "WRes3");
	ObjectCreate("WRes2", OBJ_TEXT, 0, LabelShiftTime, 0);
   ObjectSetText("WRes2", "               "+DoubleToStr(R2,digits),LabelFontSize,LabelFontType,cResistance);
   SetIndexLabel(1, "WRes2");
	ObjectCreate("WRes1", OBJ_TEXT, 0, LabelShiftTime, 0);
   ObjectSetText("WRes1", "               "+DoubleToStr(R1,digits),LabelFontSize,LabelFontType,cResistance);
   SetIndexLabel(2, "WRes1");
	ObjectCreate("WeeklyPivot", OBJ_TEXT, 0,LabelShiftTime,0);
   ObjectSetText("WeeklyPivot", "               "+DoubleToStr(P,digits),LabelFontSize,LabelFontType,cPivot);
   SetIndexLabel(3, "WeeklyPivot");
   ObjectCreate("WSup1", OBJ_TEXT, 0, 0, 0);
   ObjectSetText("WSup1", "               "+DoubleToStr(S1,digits),LabelFontSize,LabelFontType,cSupport);
   SetIndexLabel(4, "WSup1");
   ObjectCreate("WSup2", OBJ_TEXT, 0, LabelShiftTime, 0);
   ObjectSetText("WSup2", "               "+DoubleToStr(S2,digits),LabelFontSize,LabelFontType,cSupport);
   SetIndexLabel(5, "WSup2");
   ObjectCreate("WSup3", OBJ_TEXT, 0, LabelShiftTime, 0);   
   ObjectSetText("WSup3", "               "+DoubleToStr(S3,digits),LabelFontSize,LabelFontType,cSupport);
   SetIndexLabel(6, "WSup3");
   
   ObjectMove("WRes3", 0, LabelShiftTime,R3);
   ObjectMove("WRes2", 0, LabelShiftTime,R2);
   ObjectMove("WRes1", 0, LabelShiftTime,R1);
	ObjectMove("WeeklyPivot", 0, LabelShiftTime,P);
   ObjectMove("WSup1", 0, LabelShiftTime,S1);
   ObjectMove("WSup2", 0, LabelShiftTime,S2);
   ObjectMove("WSup3", 0, LabelShiftTime,S3);
   
   } 
    }     
         
     
      Pivot[i]=P; 
      Res1[i] =R1;    
      Res2[i] =R2;  
      Res3[i] =R3;  
      Supp1[i]=S1;   
      Supp2[i]=S2;  
      Supp3[i]=S3;
      // Extra1[i]=OpenPriceAt+i;
      //   **********************************************
      //      Calculate the mid-levels in to the buffers. 
      //      (for mid-levels version)
      //   **********************************************(Twe)
      // Res1[i] =((R1-P)/2)+P;    //M3
      // Res2[i] =((R2-R1)/2)+R1;  //M4
      // Res3[i] =((R3-R2)/2)+R2;  
      // Supp1[i]=((P-S1)/2)+S1;   //M2
      // Supp2[i]=((S1-S2)/2)+S2;  //M1
      // Supp3[i]=((S2-S3)/2)+S3;
       //End of 'DaysToPlot 'if' statement.
   }   
      // ***************************************************************************************
      //                            End of Main Loop
      // ***************************************************************************************
   // *****************************************
   //    Return from Start() (Main Routine)
   return(0);
  }
//+-------------------------------------------------------------------------------------------------------+
//  END Custom indicator iteration function
//+-------------------------------------------------------------------------------------------------------+
// *****************************************************************************************
// *****************************************************************************************
// -----------------------------------------------------------------------------------------
//    The following routine will use "StartingBar"'s time and use it to find the 
//    general area that SHOULD contain the bar that matches "TimeToLookFor"
// -----------------------------------------------------------------------------------------
             
            
            
            
Comments