//+------------------------------------------------------------------+ //| All Pivot Points.mq4 | //| Copyright 2016, Hossein Nouri. | //| https://www.mql5.com/en/users/hsnnouri | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Hossein Nouri." #property link "https://www.mql5.com/en/users/hsnnouri" #property version "1.2" #property description "All important Pivot Points including:" #property description "Classic, Camarilla, Woodie, Floor, Fibonacci, Fibonacci_Retracement" #property strict #property indicator_chart_window #property indicator_buffers 9 #property indicator_plots 9 //--- plot Pivot #property indicator_label1 "Pivot" #property indicator_type1 DRAW_LINE #property indicator_color1 clrDarkBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot S1 #property indicator_label2 "S1" #property indicator_type2 DRAW_LINE #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot S2 #property indicator_label3 "S2" #property indicator_type3 DRAW_LINE #property indicator_color3 clrCrimson #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- plot S3 #property indicator_label4 "S3" #property indicator_type4 DRAW_LINE #property indicator_color4 clrFireBrick #property indicator_style4 STYLE_SOLID #property indicator_width4 1 //--- plot S4 #property indicator_label5 "S4" #property indicator_type5 DRAW_LINE #property indicator_color5 clrMaroon #property indicator_style5 STYLE_SOLID #property indicator_width5 1 //--- plot R1 #property indicator_label6 "R1" #property indicator_type6 DRAW_LINE #property indicator_color6 clrLime #property indicator_style6 STYLE_SOLID #property indicator_width6 1 //--- plot R2 #property indicator_label7 "R2" #property indicator_type7 DRAW_LINE #property indicator_color7 clrLimeGreen #property indicator_style7 STYLE_SOLID #property indicator_width7 1 //--- plot R3 #property indicator_label8 "R3" #property indicator_type8 DRAW_LINE #property indicator_color8 clrMediumSeaGreen #property indicator_style8 STYLE_SOLID #property indicator_width8 1 //--- plot R4 #property indicator_label9 "R4" #property indicator_type9 DRAW_LINE #property indicator_color9 clrSeaGreen #property indicator_style9 STYLE_SOLID #property indicator_width9 1 //--- indicator buffers double PivotBuffer[]; double S1Buffer[]; double S2Buffer[]; double S3Buffer[]; double S4Buffer[]; double R1Buffer[]; double R2Buffer[]; double R3Buffer[]; double R4Buffer[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum CalMode { Classic=0, Camarilla=1, Woodie=2, Fibonacci=3, Floor=4, Fibonacci_Retracement=5, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ShMode { Today=0, Historical=1, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum TF { M1=PERIOD_M1, M5=PERIOD_M5, M15=PERIOD_M15, M30=PERIOD_M30, H1=PERIOD_H1, H4=PERIOD_H4, D1=PERIOD_D1, W1=PERIOD_W1, MN=PERIOD_MN1, }; input TF TimeFrame=1440; input CalMode CalculationMode=3; input ShMode ShowMode=1; input bool ShowLabels=true; input bool ShowPivot=true; input color PivotColor=clrDarkBlue; input ENUM_LINE_STYLE PivotStyle=STYLE_SOLID; input int PivotWidth=1; input bool ShowS1=true; input color S1Color=clrRed; input ENUM_LINE_STYLE S1Style=STYLE_SOLID; input int S1Width=1; input bool ShowS2=true; input color S2Color=clrCrimson; input ENUM_LINE_STYLE S2Style=STYLE_SOLID; input int S2Width=1; input bool ShowS3=true; input color S3Color=clrFireBrick; input ENUM_LINE_STYLE S3Style=STYLE_SOLID; input int S3Width=1; input bool ShowS4=true; input color S4Color=clrMaroon; input ENUM_LINE_STYLE S4Style=STYLE_SOLID; input int S4Width=1; input bool ShowR1=true; input color R1Color=clrLime; input ENUM_LINE_STYLE R1Style=STYLE_SOLID; input int R1Width=1; input bool ShowR2=true; input color R2Color=clrLimeGreen; input ENUM_LINE_STYLE R2Style=STYLE_SOLID; input int R2Width=1; input bool ShowR3=true; input color R3Color=clrMediumSeaGreen; input ENUM_LINE_STYLE R3Style=STYLE_SOLID; input int R3Width=1; input bool ShowR4=true; input color R4Color=clrSeaGreen; input ENUM_LINE_STYLE R4Style=STYLE_SOLID; input int R4Width=1; datetime camTime,time1,time2; string symbol; int counter=0; double R1,R2,R3,R4,S1,S2,S3,S4,PP; string prefix; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,PivotBuffer); SetIndexBuffer(1,S1Buffer); SetIndexBuffer(2,S2Buffer); SetIndexBuffer(3,S3Buffer); SetIndexBuffer(4,S4Buffer); SetIndexBuffer(5,R1Buffer); SetIndexBuffer(6,R2Buffer); SetIndexBuffer(7,R3Buffer); SetIndexBuffer(8,R4Buffer); SetIndexStyle(0,DRAW_LINE,PivotStyle,PivotWidth,PivotColor); SetIndexStyle(1,DRAW_LINE,S1Style,S1Width,S1Color); SetIndexStyle(2,DRAW_LINE,S2Style,S2Width,S2Color); SetIndexStyle(3,DRAW_LINE,S3Style,S3Width,S3Color); SetIndexStyle(4,DRAW_LINE,S4Style,S4Width,S4Color); SetIndexStyle(5,DRAW_LINE,R1Style,R1Width,R1Color); SetIndexStyle(6,DRAW_LINE,R2Style,R2Width,R2Color); SetIndexStyle(7,DRAW_LINE,R3Style,R3Width,R3Color); SetIndexStyle(8,DRAW_LINE,R4Style,R4Width,R4Color); ArraySetAsSeries(S1Buffer,true); ArraySetAsSeries(S2Buffer,true); ArraySetAsSeries(S3Buffer,true); ArraySetAsSeries(S4Buffer,true); ArraySetAsSeries(R1Buffer,true); ArraySetAsSeries(R2Buffer,true); ArraySetAsSeries(R3Buffer,true); ArraySetAsSeries(R4Buffer,true); ArraySetAsSeries(PivotBuffer,true); prefix=EnumToString(CalculationMode)+EnumToString(TimeFrame); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0,prefix); ObjectsDeleteAll(0,prefix); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- if(rates_total>prev_calculated) { if(Period()>TimeFrame) { Alert("TimeFrame value is less than current chart period.\nPlease enter value greater then or qual to the current chart."); return(rates_total); } if(ShowMode==1 && CalculationMode==1) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistCamarilla(i,j+1); }else{ j++; calculateHistCamarilla(i,j+1); } } calculateTodayCamarilla(); } if(ShowMode==1 && CalculationMode==0) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistClassic(i,j+1); }else{ j++; calculateHistClassic(i,j+1); } } calculateTodayClassic(); } if(ShowMode==1 && CalculationMode==2) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistWoodie(i,j+1); }else{ j++; calculateHistWoodie(i,j+1); } } calculateTodayWoodie(); } if(ShowMode==1 && CalculationMode==3) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistFibonacci(i,j+1); }else{ j++; calculateHistFibonacci(i,j+1); } } calculateTodayFibonacci(); } if(ShowMode==1 && CalculationMode==4) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistFloor(i,j+1); }else{ j++; calculateHistFloor(i,j+1); } } calculateTodayFloor(); } if(ShowMode==1 && CalculationMode==5) { int j=0; for(int i=0;i=iTime(Symbol(),TimeFrame,j)) { calculateHistFibonacciRet(i,j+1); }else{ j++; calculateHistFibonacciRet(i,j+1); } } calculateTodayFibonacciRet(); } if(ShowMode==0) { if(CalculationMode==0) calculateTodayClassic(); if(CalculationMode==1) calculateTodayCamarilla(); if(CalculationMode==2) calculateTodayWoodie(); if(CalculationMode==3) calculateTodayFibonacci(); if(CalculationMode==4) calculateTodayFloor(); if(CalculationMode==5) calculateTodayFibonacciRet(); } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ void calculateHistFibonacciRet(int index,int barIndex) { double prevRange= iHigh(Symbol(),TimeFrame,barIndex)-iLow(Symbol(),TimeFrame,barIndex); double prevHigh = iHigh(Symbol(),TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose=iClose(Symbol(),TimeFrame,barIndex); PivotBuffer[index]=NormalizeDouble(prevLow+(0.50*prevRange),Digits); R1Buffer[index] = NormalizeDouble(prevLow +(0.618 * prevRange),Digits); R2Buffer[index] = NormalizeDouble(prevLow +(0.786 * prevRange),Digits); R3Buffer[index] = NormalizeDouble(prevHigh,Digits); R4Buffer[index] = NormalizeDouble(prevLow +(1.382 * prevRange),Digits); S1Buffer[index] = NormalizeDouble(prevLow +(0.382 * prevRange),Digits); S2Buffer[index] = NormalizeDouble(prevLow +(0.236 * prevRange),Digits); S3Buffer[index] = NormalizeDouble(prevLow,Digits); S4Buffer[index] = NormalizeDouble(prevLow -(0.382 * prevRange),Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayFibonacciRet() { double prevRange= iHigh(Symbol(),TimeFrame,1)-iLow(Symbol(),TimeFrame,1); double prevHigh = iHigh(Symbol(),TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose=iClose(Symbol(),TimeFrame,1); PP = NormalizeDouble(prevLow +(0.50 * prevRange),Digits); R1 = NormalizeDouble(prevLow +(0.618 * prevRange),Digits); R2 = NormalizeDouble(prevLow +(0.786 * prevRange),Digits); R3 = NormalizeDouble(prevHigh,Digits); R4 = NormalizeDouble(prevLow +(1.382 * prevRange),Digits); S1 = NormalizeDouble(prevLow +(0.382 * prevRange),Digits); S2 = NormalizeDouble(prevLow +(0.236 * prevRange),Digits); S3 = NormalizeDouble(prevLow,Digits); S4 = NormalizeDouble(prevLow -(0.382 * prevRange),Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistFloor(int index,int barIndex) { double prevRange= iHigh(Symbol(),TimeFrame,barIndex)-iLow(Symbol(),TimeFrame,barIndex); double prevHigh = iHigh(Symbol(),TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose=iClose(Symbol(),TimeFrame,barIndex); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevLow,Digits); S1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevHigh,Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + prevHigh - prevLow,Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - prevHigh + prevLow,Digits); R3Buffer[index] = NormalizeDouble(R1Buffer[index] + (prevHigh-prevLow),Digits); S3Buffer[index] = NormalizeDouble(prevLow - 2 * (prevHigh-PivotBuffer[index]),Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayFloor() { double prevRange= iHigh(Symbol(),TimeFrame,1)-iLow(Symbol(),TimeFrame,1); double prevHigh = iHigh(Symbol(),TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose=iClose(Symbol(),TimeFrame,1); PP = NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1 = NormalizeDouble((PP * 2)-prevLow,Digits); S1 = NormalizeDouble((PP * 2)-prevHigh,Digits); R2 = NormalizeDouble(PP + prevHigh - prevLow,Digits); S2 = NormalizeDouble(PP - prevHigh + prevLow,Digits); R3 = NormalizeDouble(R1 + (prevHigh-prevLow),Digits); S3 = NormalizeDouble(prevLow - 2 * (prevHigh-PP),Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistFibonacci(int index,int barIndex) { double prevRange= iHigh(Symbol(),TimeFrame,barIndex)-iLow(Symbol(),TimeFrame,barIndex); double prevHigh = iHigh(Symbol(),TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose=iClose(Symbol(),TimeFrame,barIndex); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1Buffer[index] = NormalizeDouble(PivotBuffer[index] + (0.382 * (prevHigh - prevLow)),Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + (0.618 * (prevHigh - prevLow)),Digits); R3Buffer[index] = NormalizeDouble(PivotBuffer[index] + (1 * (prevHigh - prevLow)),Digits); R4Buffer[index] = NormalizeDouble(PivotBuffer[index] + (1.618 * (prevHigh - prevLow)),Digits); S1Buffer[index] = NormalizeDouble(PivotBuffer[index] - (0.382 * (prevHigh - prevLow)),Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - (0.618 * (prevHigh - prevLow)),Digits); S3Buffer[index] = NormalizeDouble(PivotBuffer[index] - (1 * (prevHigh - prevLow)),Digits); S4Buffer[index] = NormalizeDouble(PivotBuffer[index] - (1.618 * (prevHigh - prevLow)),Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayFibonacci() { double prevRange= iHigh(Symbol(),TimeFrame,1)-iLow(Symbol(),TimeFrame,1); double prevHigh = iHigh(Symbol(),TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose=iClose(Symbol(),TimeFrame,1); PP = NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1 = NormalizeDouble(PP + (0.382 * (prevHigh - prevLow)),Digits); R2 = NormalizeDouble(PP + (0.618 * (prevHigh - prevLow)),Digits); R3 = NormalizeDouble(PP + (1 * (prevHigh - prevLow)),Digits); R4 = NormalizeDouble(PP + (1.618 * (prevHigh - prevLow)),Digits); S1 = NormalizeDouble(PP - (0.382 * (prevHigh - prevLow)),Digits); S2 = NormalizeDouble(PP - (0.618 * (prevHigh - prevLow)),Digits); S3 = NormalizeDouble(PP - (1 * (prevHigh - prevLow)),Digits); S4 = NormalizeDouble(PP - (1.618 * (prevHigh - prevLow)),Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistCamarilla(int index,int barIndex) { double camRange = iHigh(Symbol(), TimeFrame,barIndex) - iLow(Symbol(), TimeFrame,barIndex); double prevHigh = iHigh(Symbol(), TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose= iClose(Symbol(),TimeFrame,barIndex); R1Buffer[index] = NormalizeDouble(((1.1 / 12) * camRange) + prevClose,Digits); R2Buffer[index] = NormalizeDouble(((1.1 / 6) * camRange) + prevClose,Digits); R3Buffer[index] = NormalizeDouble(((1.1 / 4) * camRange) + prevClose,Digits); R4Buffer[index] = NormalizeDouble(((1.1 / 2) * camRange) + prevClose,Digits); S1Buffer[index] = NormalizeDouble(prevClose - ((1.1 / 12) * camRange),Digits); S2Buffer[index] = NormalizeDouble(prevClose - ((1.1 / 6) * camRange),Digits); S3Buffer[index] = NormalizeDouble(prevClose - ((1.1 / 4) * camRange),Digits); S4Buffer[index] = NormalizeDouble(prevClose - ((1.1 / 2) * camRange),Digits); PivotBuffer[index]=NormalizeDouble((R1Buffer[index]+S1Buffer[index])/2,Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistClassic(int index,int barIndex) { double prevRange= iHigh(Symbol(),TimeFrame,barIndex)-iLow(Symbol(),TimeFrame,barIndex); double prevHigh = iHigh(Symbol(),TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose=iClose(Symbol(),TimeFrame,barIndex); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevLow,Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + prevRange,Digits); R3Buffer[index] = NormalizeDouble(R2Buffer[index] + prevRange,Digits); R4Buffer[index] = NormalizeDouble(R3Buffer[index] + prevRange,Digits); S1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevHigh,Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - prevRange,Digits); S3Buffer[index] = NormalizeDouble(S2Buffer[index] - prevRange,Digits); S4Buffer[index] = NormalizeDouble(S3Buffer[index] - prevRange,Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistWoodie(int index,int barIndex) { double prevRange= iHigh(Symbol(),TimeFrame,barIndex)-iLow(Symbol(),TimeFrame,barIndex); double prevHigh = iHigh(Symbol(),TimeFrame,barIndex); double prevLow=iLow(Symbol(),TimeFrame,barIndex); double prevClose = iClose(Symbol(), TimeFrame,barIndex); double todayOpen = iOpen(Symbol(), TimeFrame,barIndex-1); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+(todayOpen*2))/4,Digits); R1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevLow,Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + prevRange,Digits); R3Buffer[index] = NormalizeDouble(prevHigh + 2*(PivotBuffer[index]-prevLow),Digits); R4Buffer[index] = NormalizeDouble(R3Buffer[index] + prevRange,Digits); S1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevHigh,Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - prevRange,Digits); S3Buffer[index] = NormalizeDouble(prevLow - 2*(prevHigh - PivotBuffer[index]),Digits); S4Buffer[index] = NormalizeDouble(S3Buffer[index] - prevRange,Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayWoodie() { double prevRange= iHigh(Symbol(),TimeFrame,1)-iLow(Symbol(),TimeFrame,1); double prevHigh = iHigh(Symbol(),TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose = iClose(Symbol(), TimeFrame,1); double todayOpen = iOpen(Symbol(), TimeFrame,0); PP = NormalizeDouble((prevHigh+prevLow+(todayOpen*2))/4,Digits); R1 = NormalizeDouble((PP * 2)-prevLow,Digits); R2 = NormalizeDouble(PP + prevRange,Digits); R3 = NormalizeDouble(prevHigh + 2*(PP-prevLow),Digits); R4 = NormalizeDouble(R3 + prevRange,Digits); S1 = NormalizeDouble((PP * 2)-prevHigh,Digits); S2 = NormalizeDouble(PP - prevRange,Digits); S3 = NormalizeDouble(prevLow - 2*(prevHigh - PP),Digits); S4 = NormalizeDouble(S3 - prevRange,Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayClassic() { double prevRange= iHigh(Symbol(),TimeFrame,1)-iLow(Symbol(),TimeFrame,1); double prevHigh = iHigh(Symbol(),TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose=iClose(Symbol(),TimeFrame,1); PP = NormalizeDouble((prevHigh+prevLow+prevClose)/3,Digits); R1 = NormalizeDouble((PP * 2)-prevLow,Digits); R2 = NormalizeDouble(PP + prevRange,Digits); R3 = NormalizeDouble(R2 + prevRange,Digits); R4 = NormalizeDouble(R3 + prevRange,Digits); S1 = NormalizeDouble((PP * 2)-prevHigh,Digits); S2 = NormalizeDouble(PP - prevRange,Digits); S3 = NormalizeDouble(S2 - prevRange,Digits); S4 = NormalizeDouble(S3 - prevRange,Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateTodayCamarilla() { double camRange = iHigh(Symbol(), TimeFrame,1) - iLow(Symbol(), TimeFrame,1); double prevHigh = iHigh(Symbol(), TimeFrame,1); double prevLow=iLow(Symbol(),TimeFrame,1); double prevClose=iClose(Symbol(),TimeFrame,1); R1 = NormalizeDouble(((1.1 / 12) * camRange) + prevClose,Digits); R2 = NormalizeDouble(((1.1 / 6) * camRange) + prevClose,Digits); R3 = NormalizeDouble(((1.1 / 4) * camRange) + prevClose,Digits); R4 = NormalizeDouble(((1.1 / 2) * camRange) + prevClose,Digits); S1 = NormalizeDouble(prevClose - ((1.1 / 12) * camRange),Digits); S2 = NormalizeDouble(prevClose - ((1.1 / 6) * camRange),Digits); S3 = NormalizeDouble(prevClose - ((1.1 / 4) * camRange),Digits); S4 = NormalizeDouble(prevClose - ((1.1 / 2) * camRange),Digits); PP = NormalizeDouble((R4+S4)/2,Digits); time1 = iTime(Symbol(),TimeFrame,0); time2 = time1 + (iTime(Symbol(),TimeFrame,0)-iTime(Symbol(),TimeFrame,1)); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawOnChart() { if(ShowR1==true) CreateTrend(0,"R1",R1Color,R1Style,R1Width,time1,time2,R1,R1); if(ShowR2==true) CreateTrend(0,"R2",R2Color,R2Style,R2Width,time1,time2,R2,R2); if(ShowR3==true) CreateTrend(0,"R3",R3Color,R3Style,R3Width,time1,time2,R3,R3); if(ShowR4==true) CreateTrend(0,"R4",R4Color,R4Style,R4Width,time1,time2,R4,R4); if(ShowS1==true) CreateTrend(0,"S1",S1Color,S1Style,S1Width,time1,time2,S1,S1); if(ShowS2==true) CreateTrend(0,"S2",S2Color,S2Style,S2Width,time1,time2,S2,S2); if(ShowS3==true) CreateTrend(0,"S3",S3Color,S3Style,S3Width,time1,time2,S3,S3); if(ShowS4==true) CreateTrend(0,"S4",S4Color,S4Style,S4Width,time1,time2,S4,S4); if(ShowPivot==true) CreateTrend(0,"Pivot",PivotColor,PivotStyle,PivotWidth,time1,time2,PP,PP); if(ShowR1==true && ShowLabels==true) CreateLabel(0,"LR1","R1",clrGray,R1,time1); if(ShowR2==true && ShowLabels==true) CreateLabel(0,"LR2","R2",clrGray,R2,time1); if(ShowR3==true && ShowLabels==true) CreateLabel(0,"LR3","R3",clrGray,R3,time1); if(ShowR4==true && ShowLabels==true) CreateLabel(0,"LR4","R4",clrGray,R4,time1); if(ShowS1==true && ShowLabels==true) CreateLabel(0,"LS1","S1",clrGray,S1,time1); if(ShowS2==true && ShowLabels==true) CreateLabel(0,"LS2","S2",clrGray,S2,time1); if(ShowS3==true && ShowLabels==true) CreateLabel(0,"LS3","S3",clrGray,S3,time1); if(ShowS4==true && ShowLabels==true) CreateLabel(0,"LS4","S4",clrGray,S4,time1); if(ShowPivot==true && ShowLabels==true) CreateLabel(0,"LPivot","P",clrGray,PP,time1); ChartRedraw(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void checkVisiblity(int index) { if(ShowR1==false) R1Buffer[index]=0; if(ShowR2==false) R2Buffer[index]=0; if(ShowR3==false) R3Buffer[index]=0; if(ShowR4==false) R4Buffer[index]=0; if(ShowS1==false) S1Buffer[index]=0; if(ShowS2==false) S2Buffer[index]=0; if(ShowS3==false) S3Buffer[index]=0; if(ShowS4==false) S4Buffer[index]=0; if(ShowPivot==false) PivotBuffer[index]=0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CreateTrend(long chart_ID,string name,color trendColor,ENUM_LINE_STYLE lineStyle,int lineWidth,datetime timeStart,datetime timeEnd,double price1,double price2) { //ObjectDelete(chart_ID,name); name=prefix+name; if(ObjectFind(0,name)<0) { ObjectCreate(chart_ID,name,OBJ_TREND,0,timeStart,price1,timeEnd,price2); }else{ ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1); ObjectSetDouble(chart_ID,name,OBJPROP_PRICE2,price2); ObjectSetInteger(chart_ID,name,OBJPROP_TIME1,timeStart); ObjectSetInteger(chart_ID,name,OBJPROP_TIME2,timeEnd); } ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,trendColor); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,lineStyle); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,lineWidth); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,false); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CreateLabel(long chart_ID,string name,string text,color labelColor,double price,datetime time) { //ObjectDelete(chart_ID,name); name=prefix+name; if(ObjectFind(0,name)<0) { ObjectCreate(chart_ID,name,OBJ_TEXT,0,time,price); }else{ ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price); ObjectSetInteger(chart_ID,name,OBJPROP_TIME1,time); } ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,"Arial"); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,10); ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,0.0); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,labelColor); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,false); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); } //+------------------------------------------------------------------+