Pivot_Star
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open prices of each barSeries array that contains close prices for each bar
0 Views
0 Downloads
0 Favorites
Pivot_Star
//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
/*
   Created by Asteris, modified by Cubicrey [March, 2010]
   Website: http://www.indo-investasi.com
   
   Converted to Pivot Star by rkdius [Dec 2016]
*/
#property version "1.2"
#property strict
#property indicator_chart_window
//--- input parameters
enum mode
  {
   Standard,
   Fibonacci,
   Camarilla,
   Woodie,
   Demark
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
enum lbCorner
  {
   TopLeft=0,       // Top Left
   TopRight=1,      // Top Right
   BottomLeft=2,    // Bottom Left
   BottomRight=3    // Bottom Right
  };
extern mode Pmode = Standard;                    // Pivot Mode
extern ENUM_TIMEFRAMES inpPeriod = PERIOD_H1;    // Pivot Time Frame
extern bool HLINE = false;                       // Full Horizontal Lines
extern int xShift = 3;                           // X-Axis Shift
extern int xLen = 25;                            // Line Length
extern lbCorner LabelCorner = TopRight;          // Label Corner
extern color LevelPP = SpringGreen;              // Pivot Point
extern ENUM_LINE_STYLE StylePP = 0;              // Line Style 
extern int WidthPP = 1;                          // Line Width
extern color LevelR1 = Crimson;                  // R1
extern ENUM_LINE_STYLE StyleR1 = 2;              // Line Style
extern int WidthR1 = 1;                          // Line Width
extern color LevelR2 = Crimson;                  // R2
extern ENUM_LINE_STYLE StyleR2 = 1;              // Line Style
extern int WidthR2 = 1;                          // Line Width
extern color LevelR3 = Crimson;                  // R3
extern ENUM_LINE_STYLE StyleR3 = 0;              // Line Style
extern int WidthR3 = 1;                          // Line Width
extern color LevelS1 = DodgerBlue;               // S1
extern ENUM_LINE_STYLE StyleS1 = 2;              // Line Style
extern int WidthS1 = 1;                          // Line Width
extern color LevelS2 = DodgerBlue;               // S2
extern ENUM_LINE_STYLE StyleS2 = 1;              // Line Style
extern int WidthS2 = 1;                          // Line Width
extern color LevelS3 = DodgerBlue;               // S3
extern ENUM_LINE_STYLE StyleS3 = 0;              // Line Style
extern int WidthS3 = 1;                          // Line Width
extern bool displayPrevDayHL = true;            // Display Previous Day's Hi/Lo
extern color LevelYH = MediumVioletRed;          // Yesterday's High
extern ENUM_LINE_STYLE StyleYH = 2;              // Line Style
extern int WidthYH = 3;                          // Line Width
extern color LevelYL = MediumSlateBlue;          // Yesterday's Low
extern ENUM_LINE_STYLE StyleYL = 2;              // Line Style
extern int WidthYL = 3;                          // Line Width
extern string Font = "Arial";                    // Font
extern int FontSize = 8;                         // Font Size
extern int PivotBar = 1;                         // Bar (EXPERIMENTAL! current=0; default=1)

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double x,xR1,xR2,xR3,xS1,xS2,xS3,xPP;
string pivPeriod;
int LINE_TYPE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   pivPeriod="M"+IntegerToString(inpPeriod);
   if(inpPeriod>=60) pivPeriod = "H"+IntegerToString(inpPeriod/60);
   if(inpPeriod>=1440) pivPeriod = "D1";
   if(inpPeriod>=10080) pivPeriod = "WK";
   if(inpPeriod>=43200) pivPeriod = "MN";

   int xOffset=10;
   int yOffset=20;
   int Line=5+FontSize;
   if(HLINE) LINE_TYPE=OBJ_HLINE;
   else LINE_TYPE=OBJ_TREND;

   if(LabelCorner<2)
     {
      ObjectMakeLabel(pivPeriod+"-pInfo",xOffset,yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR3",xOffset,Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR2",xOffset,2*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR1",xOffset,3*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbPP",xOffset,4*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbS1",xOffset,5*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbS2",xOffset,6*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbS3",xOffset,7*Line+yOffset);
     }
   else
     {
      ObjectMakeLabel(pivPeriod+"-lbS3",xOffset,yOffset);
      ObjectMakeLabel(pivPeriod+"-lbS2",xOffset,Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbS1",xOffset,2*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbPP",xOffset,3*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR1",xOffset,4*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR2",xOffset,5*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-lbR3",xOffset,6*Line+yOffset);
      ObjectMakeLabel(pivPeriod+"-pInfo",10,7*Line+yOffset);
     }
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   DrawLevel(pivPeriod+"-R3",0,StyleR3,WidthR3,LevelR3);
   DrawLevel(pivPeriod+"-R2",0,StyleR2,WidthR2,LevelR2);
   DrawLevel(pivPeriod+"-R1",0,StyleR1,WidthR1,LevelR1);
   DrawLevel(pivPeriod+"-PP",0,StylePP,WidthPP,LevelPP);
   DrawLevel(pivPeriod+"-S1",0,StyleS1,WidthS1,LevelS1);
   DrawLevel(pivPeriod+"-S2",0,StyleS2,WidthS2,LevelS2);
   DrawLevel(pivPeriod+"-S3",0,StyleS3,WidthS3,LevelS3);
   if (displayPrevDayHL==true) 
   {
      DrawLevel("Yesterdays High",0,StyleYH,WidthYH,LevelYH);
      DrawLevel("Yesterdays Low",0,StyleYL,WidthYL,LevelYL);
   }
   ObjectDelete(pivPeriod+"-pInfo");
   ObjectDelete(pivPeriod+"-lbR3");
   ObjectDelete(pivPeriod+"-lbR2");
   ObjectDelete(pivPeriod+"-lbR1");
   ObjectDelete(pivPeriod+"-lbPP");
   ObjectDelete(pivPeriod+"-lbS1");
   ObjectDelete(pivPeriod+"-lbS2");
   ObjectDelete(pivPeriod+"-lbS3");

   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {

//--- Yesterday's High/Low
   double xYH = iHigh(NULL ,PERIOD_D1,1);
   double xYL = iLow(NULL ,PERIOD_D1,1);

//--- Pivot Points
   double xOpen=iOpen(NULL,inpPeriod,PivotBar);
   double xClose= iClose(NULL,inpPeriod,PivotBar);
   double xHigh = iHigh(NULL,inpPeriod,PivotBar);
   double xLow=iLow(NULL,inpPeriod,PivotBar);
   xPP=(xHigh+xLow+xClose)/3;
   double xRange=xHigh-xLow;

//--- Standard Pivot
   if(Pmode==Standard)
     {
      xR1 = (2 * xPP) - xLow;
      xS1 = (2 * xPP) - xHigh;
      xR2 = xPP + xRange;
      xS2 = xPP - xRange;
      xR3 = xHigh + 2*(xPP - xLow);
      xS3 = xLow - 2*(xHigh - xPP);
     }
//--- Fibonacci's Pivot     
   else if(Pmode==Fibonacci)
     {
      xR1 = xPP + 0.382 * xRange;
      xR2 = xPP + 0.618 * xRange;
      xR3 = xPP + 1.000 * xRange;
      xS1 = xPP - 0.382 * xRange;
      xS2 = xPP - 0.618 * xRange;
      xS3 = xPP - 1.000 * xRange;
     }
//--- Camarilla Pivot     
   else if(Pmode==Camarilla)
     {

      xR1 = xClose + (0.275 * xRange); // H3 Short
      xR2 = xClose + (0.55 * xRange);  // H4 Long Breakout
      xR3 = (xHigh / xLow) * xClose;   // H5 LB Target
      xS1 = xClose - (0.275 * xRange); // L3 Long
      xS2 = xClose - (0.55 * xRange);  // L4 Short Breakout
      xS3 = xClose - (xR3 - xClose);   // L5 SB Target
     }
//--- Woodie's Pivot     
   else if(Pmode==Woodie)
     {
      xPP = (xHigh + xLow + 2*xClose)/4;
      xR1 = 2*xPP - xLow;
      xR2 = xPP + xRange;
      xR3=0;                // Not used
      xS1 = 2*xPP - xHigh;
      xS2 = xPP - xRange;
      xS3=0;                // Not used
     }
//--- Demark Pivot     
   else if(Pmode==Demark)
     {
      if(xClose<xOpen) x = xHigh + (2*xLow) + xClose;
      if(xClose>xOpen) x = (2*xHigh) + xLow + xClose;
      if(xClose==xOpen) x=xHigh+xLow+(2*xClose);
      xPP=0;                // Not used
      xR3 = x / 2 - xLow;
      xS3 = x / 2 - xHigh;
      xR1=0;                // R1, R2, S1 and S2 Not used
      xR2 = 0;
      xS1 = 0;
      xS2 = 0;
     }

//--- Draw Lines
   DisplayMode();
   if(inpPeriod>=Period())
     {
      if((Period()<=1440) && (displayPrevDayHL==true))
        {
         DrawLevel("Yesterdays High",xYH,StyleYH,WidthYH,LevelYH);
         DrawLevel("Yesterdays Low",xYL,StyleYL,WidthYL,LevelYL);
        }
      DrawLevel(pivPeriod+"-R3",xR3,StyleR3,WidthR3,LevelR3);
      DrawLevel(pivPeriod+"-R2",xR2,StyleR2,WidthR2,LevelR2);
      DrawLevel(pivPeriod+"-R1",xR1,StyleR1,WidthR1,LevelR1);
      DrawLevel(pivPeriod+"-PP",xPP,StylePP,WidthPP,LevelPP);
      DrawLevel(pivPeriod+"-S1",xS1,StyleS1,WidthS1,LevelS1);
      DrawLevel(pivPeriod+"-S2",xS2,StyleS2,WidthS2,LevelS2);
      DrawLevel(pivPeriod+"-S3",xS3,StyleS3,WidthS3,LevelS3);
     }
   else DrawLevel(pivPeriod+"-PP",xPP,StylePP,WidthPP,LevelPP);

   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DrawLevel(string a_name_0,double ad,int a_style,int Width,color a_color)
  {
   double l_price=ad;
   int l_timeA;
   int l_timeB;
   double diff=Period()*60;
   l_timeA=(int)(Time[0] + xShift*diff);
   l_timeB=(int)(Time[0] - (xLen-xShift) * diff);


   if(ad>0.0)
     {
      if(ObjectFind(a_name_0)!=0)
        {
         ObjectCreate(a_name_0,LINE_TYPE,0,l_timeA,l_price,l_timeB,l_price);
         ObjectSet(a_name_0,OBJPROP_RAY,False);
         ObjectSet(a_name_0,OBJPROP_COLOR,a_color);
         ObjectSet(a_name_0,OBJPROP_WIDTH,Width);
         ObjectSet(a_name_0,OBJPROP_STYLE,a_style);
         ObjectSet(a_name_0,OBJPROP_SELECTABLE,false);
         ObjectSet(a_name_0,OBJPROP_HIDDEN,true);
         return;
        }
      ObjectSet(a_name_0,OBJPROP_RAY,False);
      ObjectMove(a_name_0,0,l_timeA,l_price);
      ObjectMove(a_name_0,1,l_timeB,l_price);
      ObjectSet(a_name_0,OBJPROP_COLOR,a_color);
      ObjectSet(a_name_0,OBJPROP_WIDTH,Width);
      ObjectSet(a_name_0,OBJPROP_STYLE,a_style);
      ObjectSet(a_name_0,OBJPROP_SELECTABLE,false);
      ObjectSet(a_name_0,OBJPROP_HIDDEN,true);
      return;
     }
   if(ObjectFind(a_name_0)>=0) ObjectDelete(a_name_0);
  }
//+--------------------------------------------------------------------------+
//| ObjectMakeLabel:                                                         |
//|                                                            P4L Clock.mq4 |
//| New rewrite by: Pips4life, a user at forexfactory.com                    |
//| 2014-Mar-19: v2_12  P4L Clock.mq4                                        |
//| For lastest version: http://www.forexfactory.com/showthread.php?t=109305 |
//| Previous names: Clock_v1_3.mq4, Clock.mq4, ...                           |
//| Previous version:   Jerome,  4xCoder@gmail.com, ...                      |
///+-------------------------------------------------------------------------+
int ObjectMakeLabel(string n,int xoff,int yoff) 
  {
   if(!WindowIsVisible(0)) return(-1);
   ObjectCreate(n,OBJ_LABEL,0,0,0);
   ObjectSet(n,OBJPROP_CORNER,LabelCorner);
   ObjectSet(n,OBJPROP_XDISTANCE,xoff);
   ObjectSet(n,OBJPROP_YDISTANCE,yoff);
   ObjectSet(n,OBJPROP_BACK,false);
   ObjectSet(n,OBJPROP_SELECTABLE,false);
   ObjectSet(n,OBJPROP_HIDDEN,true);
   return(0);
  }// end of ObjectMakeLabel
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DisplayMode()
  {
   string sR3,sR2,sR1,sPP,sS1,sS2,sS3,sPointer;
   sR3="";
   sR2="";
   sR1="";
   sPP="";
   sS1="";
   sS2="";
   sS3="";
   if(LabelCorner<2) sPointer=">> ";
   else sPointer=" <<";
   double vbid=MarketInfo(NULL,MODE_BID);

   if(vbid>=xR3)
     {
      sR3=sPointer;
     }
   else if(vbid>=xR2)
     {
      sR2=sPointer;
     }
   else if(vbid>=xR1)
     {
      sR1=sPointer;
     }
   else if(vbid>xS1)
     {
      sPP=sPointer;
      if(vbid>xPP)
        {
         if(LabelCorner<2) sPointer="> ";
         else sPointer=" <";
         sPP=sPointer;
         sR1=sPointer;
        }
      if(vbid<xPP)
        {
         if(LabelCorner<2) sPointer="> ";
         else sPointer=" <";
         sPP=sPointer;
         sS1=sPointer;
        }
     }
   else if(vbid<=xS3)
     {
      sS3=sPointer;
     }
   else if(vbid<=xS2)
     {
      sS2=sPointer;
     }
   else if(vbid<=xS1)
     {
      sS1=sPointer;
     }

   string pivInfo=EnumToString(Pmode)+" ("+pivPeriod+")";
   if(LabelCorner<2)
     {
      ObjectSetText(pivPeriod+"-pInfo",pivInfo,8,"Arial",Gray);
      ObjectSetText(pivPeriod+"-lbR3",sR3+"R3 = "+DoubleToStr(xR3,Digits),FontSize,Font,LevelR3);
      ObjectSetText(pivPeriod+"-lbR2",sR2+"R2 = "+DoubleToStr(xR2,Digits),FontSize,Font,LevelR2);
      ObjectSetText(pivPeriod+"-lbR1",sR1+"R1 = "+DoubleToStr(xR1,Digits),FontSize,Font,LevelR1);
      ObjectSetText(pivPeriod+"-lbPP",sPP+"PP = "+DoubleToStr(xPP,Digits),FontSize,Font,LevelPP);
      ObjectSetText(pivPeriod+"-lbS1",sS1+"S1 = "+DoubleToStr(xS1,Digits),FontSize,Font,LevelS1);
      ObjectSetText(pivPeriod+"-lbS2",sS2+"S2 = "+DoubleToStr(xS2,Digits),FontSize,Font,LevelS2);
      ObjectSetText(pivPeriod+"-lbS3",sS3+"S3 = "+DoubleToStr(xS3,Digits),FontSize,Font,LevelS3);
     }
   else
     {
      ObjectSetText(pivPeriod+"-pInfo",pivInfo,8,"Arial",Gray);
      ObjectSetText(pivPeriod+"-lbR3","R3 = "+DoubleToStr(xR3,Digits)+sR3,FontSize,Font,LevelR3);
      ObjectSetText(pivPeriod+"-lbR2","R2 = "+DoubleToStr(xR2,Digits)+sR2,FontSize,Font,LevelR2);
      ObjectSetText(pivPeriod+"-lbR1","R1 = "+DoubleToStr(xR1,Digits)+sR1,FontSize,Font,LevelR1);
      ObjectSetText(pivPeriod+"-lbPP","PP = "+DoubleToStr(xPP,Digits)+sPP,FontSize,Font,LevelPP);
      ObjectSetText(pivPeriod+"-lbS1","S1 = "+DoubleToStr(xS1,Digits)+sS1,FontSize,Font,LevelS1);
      ObjectSetText(pivPeriod+"-lbS2","S2 = "+DoubleToStr(xS2,Digits)+sS2,FontSize,Font,LevelS2);
      ObjectSetText(pivPeriod+"-lbS3","S3 = "+DoubleToStr(xS3,Digits)+sS3,FontSize,Font,LevelS3);
     }
  }
//+------------------------------------------------------------------+

Comments