Pivot_Star
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