//+------------------------------------------------------------------+ //| All Pivot Points.mq5 | //| Copyright 2022, Hossein Nouri | //| https://www.mql5.com/en/users/hsnnouri | //+------------------------------------------------------------------+ // Version 1.11 changelog // - Fixed reported issue by Maksim Diveev(gate) //+------------------------------------------------------------------+ // Version 1.12 changelog // - Fixed reported issue by Patrick Faria(patrickfaria) //+------------------------------------------------------------------+ // Version 1.14 changelog // - Fixed issue of not loading on chart and displaying objects sometimes // - Alerts added //+------------------------------------------------------------------+ #property copyright "Copyright 2022, Hossein Nouri" #property description "Donation (BTC): 1B8523u9AuZ69j98nDrLJ7TMDEM27erXLx" #property description " " #property description "All important Pivot Points including:" #property description "Classic1, Classic2, Camarilla, Woodie, Floor, Fibonacci, Fibonacci_Retracement" #property description "Fully Coded By Hossein Nouri" #property description "Email : hsn.nouri@gmail.com" #property description "Skype : hsn.nouri" #property description "Telegram : @hypernova1990" #property description "Website : http://www.dlikedeveloper.com" #property description "MQL5 Profile : https://www.mql5.com/en/users/hsnnouri" #property description " " #property description "Feel free to contact me for MQL4/MQL5/Pine coding." #property link "https://www.mql5.com/en/users/hsnnouri" #property version "1.14" #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 //--- S1 #property indicator_label2 "S1" #property indicator_type2 DRAW_LINE //--- S2 #property indicator_label3 "S2" #property indicator_type3 DRAW_LINE //--- S3 #property indicator_label4 "S3" #property indicator_type4 DRAW_LINE //--- S4 #property indicator_label5 "S4" #property indicator_type5 DRAW_LINE //--- R1 #property indicator_label6 "R1" #property indicator_type6 DRAW_LINE //--- R2 #property indicator_label7 "R2" #property indicator_type7 DRAW_LINE //--- R3 #property indicator_label8 "R3" #property indicator_type8 DRAW_LINE //--- R4 #property indicator_label9 "R4" #property indicator_type9 DRAW_LINE //--- indicator buffers double PivotBuffer[]; double S1Buffer[]; double S2Buffer[]; double S3Buffer[]; double S4Buffer[]; double R1Buffer[]; double R2Buffer[]; double R3Buffer[]; double R4Buffer[]; enum ENUM_CALC_MODE { CALC_MODE_CLASSIC1=0,// Classic 1 CALC_MODE_CLASSIC2=1,// Classic 2 CALC_MODE_CAMARILLA=2,// Camarilla CALC_MODE_WOODIE=3,// Woodie CALC_MODE_FIBONACCI=4,// Fibonacci CALC_MODE_FLOOR=5,// Floor CALC_MODE_FIBONACCI_RETRACEMENT=6,// Fibonacci Retracement }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum ENUM_SHOW_MODE { SHOW_MODE_TODAY,// Today SHOW_MODE_HISTORICAL,// Historical }; input ENUM_TIMEFRAMES InpTimeframe = PERIOD_D1; // Timeframe input ENUM_CALC_MODE CalculationMode = CALC_MODE_CLASSIC1; // Calculation Mode input ENUM_SHOW_MODE InpShowMode = SHOW_MODE_HISTORICAL; // Displaying Mode input int InpHistoricalBars = 0; // Historical Bars (0=All) input bool InpShowLabels = true; // Show Labels input bool InpShowPriceTags = true; // Show Price Tags input bool InpIncludeSundays = true; // Include Sundays input string InpDesc1 = "********* Fibonacci Levels *********"; // Description input double InpFibR1S1 = 38.2; // R1/S1 input double InpFibR2S2 = 61.8; // R2/S2 input double InpFibR3S3 = 100.0; // R3/S3 input double InpFibR4S4 = 161.8; // R4/S4 input string InpDesc2 = "*********** Active Lines ***********"; // Description input bool InpShowPivot = true; // Pivot input bool InpShowS1 = true; // S1 input bool InpShowS2 = true; // S2 input bool InpShowS3 = true; // S3 input bool InpShowS4 = true; // S4 input bool InpShowR1 = true; // R1 input bool InpShowR2 = true; // R2 input bool InpShowR3 = true; // R3 input bool InpShowR4 = true; // R4 input string InpDesc3 = "*********** Line Color ***********"; // Description input color InpPivotColor = clrLightGray; // Pivot input color InpS1Color = clrRed; // S1 input color InpS2Color = clrCrimson; // S2 input color InpS3Color = clrFireBrick; // S3 input color InpS4Color = clrMaroon; // S4 input color InpR1Color = clrLime; // R1 input color InpR2Color = clrLimeGreen; // R2 input color InpR3Color = clrMediumSeaGreen; // R3 input color InpR4Color = clrSeaGreen; // R4 input string InpDesc4 = "*********** Line Style ***********"; // Description input ENUM_LINE_STYLE InpPivotStyle = STYLE_SOLID; // Pivot input ENUM_LINE_STYLE InpS1Style = STYLE_SOLID; // S1 input ENUM_LINE_STYLE InpS2Style = STYLE_SOLID; // S2 input ENUM_LINE_STYLE InpS3Style = STYLE_SOLID; // S3 input ENUM_LINE_STYLE InpS4Style = STYLE_SOLID; // S4 input ENUM_LINE_STYLE InpR1Style = STYLE_SOLID; // R1 input ENUM_LINE_STYLE InpR2Style = STYLE_SOLID; // R2 input ENUM_LINE_STYLE InpR3Style = STYLE_SOLID; // R3 input ENUM_LINE_STYLE InpR4Style = STYLE_SOLID; // R4 input string InpDesc5 = "*********** Line Width ***********"; // Description input int InpPivotWidth = 1; // Pivot input int InpS1Width = 1; // S1 input int InpS2Width = 1; // S2 input int InpS3Width = 1; // S3 input int InpS4Width = 1; // S4 input int InpR1Width = 1; // R1 input int InpR2Width = 1; // R2 input int InpR3Width = 1; // R3 input int InpR4Width = 1; // R4 input string DescAlertLines = "*********** Alert Lines ***********"; // Description input bool InpPivotAlert = true; // Pivot input bool InpS1Alert = true; // S1 input bool InpS2Alert = true; // S2 input bool InpS3Alert = true; // S3 input bool InpS4Alert = true; // S4 input bool InpR1Alert = true; // R1 input bool InpR2Alert = true; // R2 input bool InpR3Alert = true; // R3 input bool InpR4Alert = true; // R4 input string DescAlertSettings = "********** Alert Settings **********"; // Description input bool InpAlertShowPopup = true; // Show Pop-up input bool InpAlertSendEmail = false; // Send Email input bool InpAlertSendNotification = false; // Send Notification input bool InpAlertPlaySound = false; // Play Sound input string InpAlertSoundFile = "alert.wav"; // Sound File //+------------------------------------------------------------------+ //| Global Variables | //+------------------------------------------------------------------+ datetime StartTime,StopTime,OneCandleGap,OneCandle; double R1,R2,R3,R4,S1,S2,S3,S4,PP; double NextDayR1,NextDayR2,NextDayR3,NextDayR4,NextDayS1,NextDayS2,NextDayS3,NextDayS4,NextDayPP; string prefix; string CalcTypeAbb; bool Status=true; int CurrentCandleIndex=0; int PrevCandleIndex=1; string LastTouchedLine=""; double LastTickClose=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0,PivotBuffer,INDICATOR_DATA); SetIndexBuffer(1,S1Buffer,INDICATOR_DATA); SetIndexBuffer(2,S2Buffer,INDICATOR_DATA); SetIndexBuffer(3,S3Buffer,INDICATOR_DATA); SetIndexBuffer(4,S4Buffer,INDICATOR_DATA); SetIndexBuffer(5,R1Buffer,INDICATOR_DATA); SetIndexBuffer(6,R2Buffer,INDICATOR_DATA); SetIndexBuffer(7,R3Buffer,INDICATOR_DATA); SetIndexBuffer(8,R4Buffer,INDICATOR_DATA); if(InpShowMode==SHOW_MODE_TODAY) { PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(4,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(6,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(7,PLOT_DRAW_TYPE,DRAW_NONE); PlotIndexSetInteger(8,PLOT_DRAW_TYPE,DRAW_NONE); } PlotIndexSetInteger(0,PLOT_LINE_STYLE,InpPivotStyle); PlotIndexSetInteger(1,PLOT_LINE_STYLE,InpS1Style); PlotIndexSetInteger(2,PLOT_LINE_STYLE,InpS2Style); PlotIndexSetInteger(3,PLOT_LINE_STYLE,InpS3Style); PlotIndexSetInteger(4,PLOT_LINE_STYLE,InpS4Style); PlotIndexSetInteger(5,PLOT_LINE_STYLE,InpR1Style); PlotIndexSetInteger(6,PLOT_LINE_STYLE,InpR2Style); PlotIndexSetInteger(7,PLOT_LINE_STYLE,InpR3Style); PlotIndexSetInteger(8,PLOT_LINE_STYLE,InpR4Style); PlotIndexSetInteger(0,PLOT_LINE_WIDTH,InpPivotWidth); PlotIndexSetInteger(1,PLOT_LINE_WIDTH,InpS1Width); PlotIndexSetInteger(2,PLOT_LINE_WIDTH,InpS2Width); PlotIndexSetInteger(3,PLOT_LINE_WIDTH,InpS3Width); PlotIndexSetInteger(4,PLOT_LINE_WIDTH,InpS4Width); PlotIndexSetInteger(5,PLOT_LINE_WIDTH,InpR1Width); PlotIndexSetInteger(6,PLOT_LINE_WIDTH,InpR2Width); PlotIndexSetInteger(7,PLOT_LINE_WIDTH,InpR3Width); PlotIndexSetInteger(8,PLOT_LINE_WIDTH,InpR4Width); PlotIndexSetInteger(0,PLOT_LINE_COLOR,InpPivotColor); PlotIndexSetInteger(1,PLOT_LINE_COLOR,InpS1Color); PlotIndexSetInteger(2,PLOT_LINE_COLOR,InpS2Color); PlotIndexSetInteger(3,PLOT_LINE_COLOR,InpS3Color); PlotIndexSetInteger(4,PLOT_LINE_COLOR,InpS4Color); PlotIndexSetInteger(5,PLOT_LINE_COLOR,InpR1Color); PlotIndexSetInteger(6,PLOT_LINE_COLOR,InpR2Color); PlotIndexSetInteger(7,PLOT_LINE_COLOR,InpR3Color); PlotIndexSetInteger(8,PLOT_LINE_COLOR,InpR4Color); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); 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); StringConcatenate(prefix,EnumToString(CalculationMode),"_",EnumToString(InpTimeframe),"_"); //--- indicator buffers mapping Status=true; if(Period()>InpTimeframe) { Alert("Loading failed, please set a higher timeframe."); Status=false; } ExtractCalculationType(); PlotIndexSetString(0,PLOT_LABEL,"Pivot ("+CalcTypeAbb+")"); PlotIndexSetString(1,PLOT_LABEL,"S1 ("+CalcTypeAbb+")"); PlotIndexSetString(2,PLOT_LABEL,"S2 ("+CalcTypeAbb+")"); PlotIndexSetString(3,PLOT_LABEL,"S3 ("+CalcTypeAbb+")"); PlotIndexSetString(4,PLOT_LABEL,"S4 ("+CalcTypeAbb+")"); PlotIndexSetString(5,PLOT_LABEL,"R1 ("+CalcTypeAbb+")"); PlotIndexSetString(6,PLOT_LABEL,"R2 ("+CalcTypeAbb+")"); PlotIndexSetString(7,PLOT_LABEL,"R3 ("+CalcTypeAbb+")"); PlotIndexSetString(8,PLOT_LABEL,"R4 ("+CalcTypeAbb+")"); OneCandleGap=PeriodSeconds(InpTimeframe); OneCandle=PeriodSeconds(PERIOD_CURRENT); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { 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[]) { //--- ArraySetAsSeries(time,true); if(!Status) return 0; int limit; limit = prev_calculated==0?rates_total-1:rates_total-prev_calculated+1; if(rates_total>prev_calculated) { if(!IsChartLoaded()) return prev_calculated; UpdateCandlesIndex(); if(InpShowMode==SHOW_MODE_HISTORICAL) { if(CalculationMode==CALC_MODE_CAMARILLA) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistCamarilla(i,j+1); } else { j++; calculateHistCamarilla(i,j+1); } } calculateCamarilla(); } else if(CalculationMode==CALC_MODE_CLASSIC1) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistClassic1(i,j+1); } else { j++; calculateHistClassic1(i,j+1); } } calculateClassic1(); } else if(CalculationMode==CALC_MODE_CLASSIC2) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistClassic2(i,j+1); } else { j++; calculateHistClassic2(i,j+1); } } calculateClassic2(); } else if(CalculationMode==CALC_MODE_WOODIE) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistWoodie(i,j+1); } else { j++; calculateHistWoodie(i,j+1); } } calculateWoodie(); } else if(CalculationMode==CALC_MODE_FIBONACCI) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistFibonacci(i,j+1); } else { j++; calculateHistFibonacci(i,j+1); } } calculateFibonacci(); } else if(CalculationMode==CALC_MODE_FLOOR) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistFloor(i,j+1); } else { j++; calculateHistFloor(i,j+1); } } calculateFloor(); } else if(CalculationMode==CALC_MODE_FIBONACCI_RETRACEMENT) { int j=0; for(int i=0; iInpHistoricalBars) { PivotBuffer[i]=0; S1Buffer[i]=0; S2Buffer[i]=0; S3Buffer[i]=0; S4Buffer[i]=0; R1Buffer[i]=0; R2Buffer[i]=0; R3Buffer[i]=0; R4Buffer[i]=0; continue; } if(time[i]>=iTime(Symbol(),InpTimeframe,j)) { calculateHistFibonacciRet(i,j+1); } else { j++; calculateHistFibonacciRet(i,j+1); } } calculateFibonacciRet(); } } if(InpShowMode==SHOW_MODE_TODAY) { if(CalculationMode==CALC_MODE_CLASSIC1) calculateClassic1(); if(CalculationMode==CALC_MODE_CLASSIC2) calculateClassic2(); if(CalculationMode==CALC_MODE_CAMARILLA) calculateCamarilla(); if(CalculationMode==CALC_MODE_WOODIE) calculateWoodie(); if(CalculationMode==CALC_MODE_FIBONACCI) calculateFibonacci(); if(CalculationMode==CALC_MODE_FLOOR) calculateFloor(); if(CalculationMode==CALC_MODE_FIBONACCI_RETRACEMENT) calculateFibonacciRet(); } } RefreshAlerts(); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ void calculateHistFibonacciRet(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose=iClose(Symbol(),InpTimeframe,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 calculateFibonacciRet() { double prevRange= iHigh(Symbol(),InpTimeframe,1)-iLow(Symbol(),InpTimeframe,1); double prevHigh = iHigh(Symbol(),InpTimeframe,1); double prevLow=iLow(Symbol(),InpTimeframe,1); double prevClose=iClose(Symbol(),InpTimeframe,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); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistFloor(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose=iClose(Symbol(),InpTimeframe,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 calculateFloor() { double prevRange= iHigh(Symbol(),InpTimeframe,PrevCandleIndex)-iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose=iClose(Symbol(),InpTimeframe,PrevCandleIndex); 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); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistFibonacci(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose=iClose(Symbol(),InpTimeframe,barIndex); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+prevClose)/3,_Digits); R1Buffer[index] = NormalizeDouble(PivotBuffer[index] + ((InpFibR1S1/100) * (prevHigh - prevLow)),_Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + ((InpFibR2S2/100) * (prevHigh - prevLow)),_Digits); R3Buffer[index] = NormalizeDouble(PivotBuffer[index] + ((InpFibR3S3/100) * (prevHigh - prevLow)),_Digits); R4Buffer[index] = NormalizeDouble(PivotBuffer[index] + ((InpFibR4S4/100) * (prevHigh - prevLow)),_Digits); S1Buffer[index] = NormalizeDouble(PivotBuffer[index] - ((InpFibR1S1/100) * (prevHigh - prevLow)),_Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - ((InpFibR2S2/100) * (prevHigh - prevLow)),_Digits); S3Buffer[index] = NormalizeDouble(PivotBuffer[index] - ((InpFibR3S3/100) * (prevHigh - prevLow)),_Digits); S4Buffer[index] = NormalizeDouble(PivotBuffer[index] - ((InpFibR4S4/100) * (prevHigh - prevLow)),_Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateFibonacci() { double prevRange= iHigh(Symbol(),InpTimeframe,PrevCandleIndex)-iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose=iClose(Symbol(),InpTimeframe,PrevCandleIndex); PP = NormalizeDouble((prevHigh+prevLow+prevClose)/3,_Digits); R1 = NormalizeDouble(PP + ((InpFibR1S1/100) * (prevHigh - prevLow)),_Digits); R2 = NormalizeDouble(PP + ((InpFibR2S2/100) * (prevHigh - prevLow)),_Digits); R3 = NormalizeDouble(PP + ((InpFibR3S3/100) * (prevHigh - prevLow)),_Digits); R4 = NormalizeDouble(PP + ((InpFibR4S4/100) * (prevHigh - prevLow)),_Digits); S1 = NormalizeDouble(PP - ((InpFibR1S1/100) * (prevHigh - prevLow)),_Digits); S2 = NormalizeDouble(PP - ((InpFibR2S2/100) * (prevHigh - prevLow)),_Digits); S3 = NormalizeDouble(PP - ((InpFibR3S3/100) * (prevHigh - prevLow)),_Digits); S4 = NormalizeDouble(PP - ((InpFibR4S4/100) * (prevHigh - prevLow)),_Digits); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistCamarilla(int index,int barIndex) { CorrectBarIndex(barIndex); double camRange = iHigh(Symbol(), InpTimeframe,barIndex) - iLow(Symbol(), InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(), InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose= iClose(Symbol(),InpTimeframe,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 calculateHistClassic1(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose=iClose(Symbol(),InpTimeframe,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 calculateHistClassic2(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose=iClose(Symbol(),InpTimeframe,barIndex); double prevOpen=iOpen(Symbol(),InpTimeframe,barIndex); PivotBuffer[index]=NormalizeDouble((prevHigh+prevLow+prevClose+prevOpen)/4,_Digits); R1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevLow,_Digits); R2Buffer[index] = NormalizeDouble(PivotBuffer[index] + prevRange,_Digits); R3Buffer[index] = NormalizeDouble(PivotBuffer[index] + (prevRange*2),_Digits); R4Buffer[index] = NormalizeDouble(PivotBuffer[index] + (prevRange*3),_Digits); S1Buffer[index] = NormalizeDouble((PivotBuffer[index] * 2)-prevHigh,_Digits); S2Buffer[index] = NormalizeDouble(PivotBuffer[index] - prevRange,_Digits); S3Buffer[index] = NormalizeDouble(PivotBuffer[index] - (prevRange*2),_Digits); S4Buffer[index] = NormalizeDouble(PivotBuffer[index] - (prevRange*3),_Digits); checkVisiblity(index); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateHistWoodie(int index,int barIndex) { CorrectBarIndex(barIndex); double prevRange= iHigh(Symbol(),InpTimeframe,barIndex)-iLow(Symbol(),InpTimeframe,barIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,barIndex); double prevLow=iLow(Symbol(),InpTimeframe,barIndex); double prevClose = iClose(Symbol(), InpTimeframe,barIndex); double todayOpen = iOpen(Symbol(), InpTimeframe,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 calculateWoodie() { double prevRange= iHigh(Symbol(),InpTimeframe,PrevCandleIndex)-iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose = iClose(Symbol(), InpTimeframe,PrevCandleIndex); double todayOpen = iOpen(Symbol(), InpTimeframe,CurrentCandleIndex); 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); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateClassic1() { double prevRange= iHigh(Symbol(),InpTimeframe,PrevCandleIndex)-iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose=iClose(Symbol(),InpTimeframe,PrevCandleIndex); 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); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateClassic2() { double prevRange= iHigh(Symbol(),InpTimeframe,PrevCandleIndex)-iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(),InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose=iClose(Symbol(),InpTimeframe,PrevCandleIndex); double prevOpen=iOpen(Symbol(),InpTimeframe,PrevCandleIndex); PP = NormalizeDouble((prevHigh+prevLow+prevClose+prevOpen)/4,_Digits); R1 = NormalizeDouble((PP * 2)-prevLow,_Digits); R2 = NormalizeDouble(PP + prevRange,_Digits); R3 = NormalizeDouble(PP + (prevRange*2),_Digits); R4 = NormalizeDouble(PP + (prevRange*3),_Digits); S1 = NormalizeDouble((PP * 2)-prevHigh,_Digits); S2 = NormalizeDouble(PP - prevRange,_Digits); S3 = NormalizeDouble(PP - (prevRange*2),_Digits); S4 = NormalizeDouble(PP - (prevRange*3),_Digits); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void calculateCamarilla() { double camRange = iHigh(Symbol(), InpTimeframe,PrevCandleIndex) - iLow(Symbol(), InpTimeframe,PrevCandleIndex); double prevHigh = iHigh(Symbol(), InpTimeframe,PrevCandleIndex); double prevLow=iLow(Symbol(),InpTimeframe,PrevCandleIndex); double prevClose=iClose(Symbol(),InpTimeframe,PrevCandleIndex); 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); DrawOnChart(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawOnChart() { while(TimeDayOfWeek(StartTime)==SUNDAY || TimeDayOfWeek(StartTime)==SATURDAY || (!InpIncludeSundays && TimeDayOfWeek(StartTime)==SUNDAY)) { StartTime=StartTime+(24*60*60); } MqlDateTime TimeStruct; TimeToStruct(StartTime,TimeStruct); if(InpTimeframe==PERIOD_M1) { StopTime= StartTime+(1*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_M5) { StopTime= StartTime+(5*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_M15) { StopTime= StartTime+(15*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_M30) { StopTime= StartTime+(30*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_H1) { StopTime= StartTime+(60*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_H4) { StopTime= StartTime+(4*60*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_D1) { StopTime = StartTime + (24*60*60); StopTime = StopTime-OneCandle; } if(InpTimeframe==PERIOD_W1) { StopTime= StartTime+(7*24*60*60); StopTime=StopTime-OneCandle; } if(InpTimeframe==PERIOD_MN1) { if(TimeStruct.mon<12) { TimeStruct.mon+=1; } else { TimeStruct.mon=1; TimeStruct.year+=1; } StopTime= StructToTime(TimeStruct); StopTime=StopTime-OneCandle; } if(InpShowR1==true) { DrawTrendLine(0,"R1",InpR1Color,InpR1Style,InpR1Width,StartTime,StopTime,R1,R1,"R1 ("+CalcTypeAbb+"): "+DoubleToString(R1,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { R1Buffer[2]=0; R1Buffer[1]=R1; } } if(InpShowR2==true) { DrawTrendLine(0,"R2",InpR2Color,InpR2Style,InpR2Width,StartTime,StopTime,R2,R2,"R2 ("+CalcTypeAbb+"): "+DoubleToString(R2,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { R2Buffer[2]=0; R2Buffer[1]=R2; } } if(InpShowR3==true) { DrawTrendLine(0,"R3",InpR3Color,InpR3Style,InpR3Width,StartTime,StopTime,R3,R3,"R3 ("+CalcTypeAbb+"): "+DoubleToString(R3,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { R3Buffer[2]=0; R3Buffer[1]=R3; } } if(InpShowR4==true) { DrawTrendLine(0,"R4",InpR4Color,InpR4Style,InpR4Width,StartTime,StopTime,R4,R4,"R4 ("+CalcTypeAbb+"): "+DoubleToString(R4,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { R4Buffer[2]=0; R4Buffer[1]=R4; } } if(InpShowS1==true) { DrawTrendLine(0,"S1",InpS1Color,InpS1Style,InpS1Width,StartTime,StopTime,S1,S1,"S1 ("+CalcTypeAbb+"): "+DoubleToString(S1,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { S1Buffer[2]=0; S1Buffer[1]=S1; } } if(InpShowS2==true) { DrawTrendLine(0,"S2",InpS2Color,InpS2Style,InpS2Width,StartTime,StopTime,S2,S2,"S2 ("+CalcTypeAbb+"): "+DoubleToString(S2,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { S2Buffer[2]=0; S2Buffer[1]=S2; } } if(InpShowS3==true) { DrawTrendLine(0,"S3",InpS3Color,InpS3Style,InpS3Width,StartTime,StopTime,S3,S3,"S3 ("+CalcTypeAbb+"): "+DoubleToString(S3,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { S3Buffer[2]=0; S3Buffer[1]=S3; } } if(InpShowS4==true) { DrawTrendLine(0,"S4",InpS4Color,InpS4Style,InpS4Width,StartTime,StopTime,S4,S4,"S4 ("+CalcTypeAbb+"): "+DoubleToString(S4,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { S4Buffer[2]=0; S4Buffer[1]=S4; } } if(InpShowPivot==true) { DrawTrendLine(0,"Pivot",InpPivotColor,InpPivotStyle,InpPivotWidth,StartTime,StopTime,PP,PP,"P ("+CalcTypeAbb+"): "+DoubleToString(PP,_Digits)); if(InpShowMode==SHOW_MODE_TODAY) { PivotBuffer[2]=0; PivotBuffer[1]=PP; } } if(InpShowLabels) { if(InpShowR1) DrawLabel(0,"LR1","R1",clrGray,R1,StartTime,"R1 ("+CalcTypeAbb+")"); if(InpShowR2) DrawLabel(0,"LR2","R2",clrGray,R2,StartTime,"R2 ("+CalcTypeAbb+")"); if(InpShowR3) DrawLabel(0,"LR3","R3",clrGray,R3,StartTime,"R3 ("+CalcTypeAbb+")"); if(InpShowR4) DrawLabel(0,"LR4","R4",clrGray,R4,StartTime,"R4 ("+CalcTypeAbb+")"); if(InpShowS1) DrawLabel(0,"LS1","S1",clrGray,S1,StartTime,"S1 ("+CalcTypeAbb+")"); if(InpShowS2) DrawLabel(0,"LS2","S2",clrGray,S2,StartTime,"S2 ("+CalcTypeAbb+")"); if(InpShowS3) DrawLabel(0,"LS3","S3",clrGray,S3,StartTime,"S3 ("+CalcTypeAbb+")"); if(InpShowS4) DrawLabel(0,"LS4","S4",clrGray,S4,StartTime,"S4 ("+CalcTypeAbb+")"); if(InpShowPivot) DrawLabel(0,"LPivot","P",clrGray,PP,StartTime,"P ("+CalcTypeAbb+")"); } if(InpShowPriceTags) { datetime PriceTagTime=StopTime; if(InpShowR1) DrawPriceTag("R1",PriceTagTime,R1,InpR1Color,InpR1Style,InpR1Width); if(InpShowR2) DrawPriceTag("R2",PriceTagTime,R2,InpR2Color,InpR2Style,InpR2Width); if(InpShowR3) DrawPriceTag("R3",PriceTagTime,R3,InpR3Color,InpR3Style,InpR3Width); if(InpShowR4) DrawPriceTag("R4",PriceTagTime,R4,InpR4Color,InpR4Style,InpR4Width); if(InpShowS1) DrawPriceTag("S1",PriceTagTime,S1,InpS1Color,InpS1Style,InpS1Width); if(InpShowS2) DrawPriceTag("S2",PriceTagTime,S2,InpS2Color,InpS2Style,InpS2Width); if(InpShowS3) DrawPriceTag("S3",PriceTagTime,S3,InpS3Color,InpS3Style,InpS3Width); if(InpShowS4) DrawPriceTag("S4",PriceTagTime,S4,InpS4Color,InpS4Style,InpS4Width); if(InpShowPivot) DrawPriceTag("Pivot",PriceTagTime,PP,InpPivotColor,InpPivotStyle,InpPivotWidth); } ChartRedraw(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void checkVisiblity(int index) { if(InpShowR1==false) R1Buffer[index]=0; if(InpShowR2==false) R2Buffer[index]=0; if(InpShowR3==false) R3Buffer[index]=0; if(InpShowR4==false) R4Buffer[index]=0; if(InpShowS1==false) S1Buffer[index]=0; if(InpShowS2==false) S2Buffer[index]=0; if(InpShowS3==false) S3Buffer[index]=0; if(InpShowS4==false) S4Buffer[index]=0; if(InpShowPivot==false) PivotBuffer[index]=0; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawTrendLine(long chart_ID,string name,color trendColor,ENUM_LINE_STYLE lineStyle,int lineWidth,datetime timeStart,datetime timeEnd,double StartPrice,double StopPrice,string tooltip="") { name=prefix+name; if(ObjectFind(0,name)<0) { ObjectCreate(chart_ID,name,OBJ_TREND,0,timeStart,StartPrice,timeEnd,StopPrice); } else { ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,0,StartPrice); ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,1,StopPrice); ObjectSetInteger(chart_ID,name,OBJPROP_TIME,0,timeStart); ObjectSetInteger(chart_ID,name,OBJPROP_TIME,1,timeEnd); return; } 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); ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawLabel(long chart_ID,string name,string text,color labelColor,double price,datetime time,string tooltip="") { name=prefix+name; if(ObjectFind(0,name)<0) { ObjectCreate(chart_ID,name,OBJ_TEXT,0,time,price); } else { ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,0,price); ObjectSetInteger(chart_ID,name,OBJPROP_TIME,0,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); ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void ExtractCalculationType() { switch(CalculationMode) { case CALC_MODE_CLASSIC1: CalcTypeAbb="Classic1"; break; case CALC_MODE_CLASSIC2: CalcTypeAbb="Classic2"; break; case CALC_MODE_CAMARILLA: CalcTypeAbb="Cam"; break; case CALC_MODE_FIBONACCI: CalcTypeAbb="Fib"; break; case CALC_MODE_FIBONACCI_RETRACEMENT: CalcTypeAbb="FibR"; break; case CALC_MODE_FLOOR: CalcTypeAbb="Floor"; break; case CALC_MODE_WOODIE: CalcTypeAbb="Woodie"; break; default: CalcTypeAbb=""; break; } CalcTypeAbb+=" "+FriendlyTimeframeName(InpTimeframe); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string FriendlyTimeframeName(ENUM_TIMEFRAMES _period) { if(_period==PERIOD_M1) return "1Minute"; if(_period==PERIOD_M5) return "5Minutes"; if(_period==PERIOD_M5) return "15Minutes"; if(_period==PERIOD_M30) return "30Minutes"; if(_period==PERIOD_H1) return "1Hour"; if(_period==PERIOD_H4) return "4Hour"; if(_period==PERIOD_D1) return "Daily"; if(_period==PERIOD_W1) return "Weekly"; if(_period==PERIOD_MN1) return "Monthly"; return ""; } //+------------------------------------------------------------------+ void DrawPriceTag(string name,datetime time,double price,color clr,ENUM_LINE_STYLE style,int width) { name=prefix+"PriceTag_"+name; int chart_ID=0; if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,0,time,price)) { ObjectSetInteger(chart_ID,name,OBJPROP_TIME,time); ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price); } ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 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); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool IsChartLoaded() { double testArray[]; if(CopyClose(_Symbol,InpTimeframe,TimeCurrent(),2,testArray)<2) { Print("Loading ",_Symbol," chart failed..."); return false; } StartTime=iTime(_Symbol,InpTimeframe,0); if(StartTime==0) { Print("Loading ",_Symbol," chart failed..."); return false; } if(!PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,0)) return false; if(!PlotIndexSetDouble(8,PLOT_EMPTY_VALUE,0)) return false; Print(_Symbol," chart loaded successfully!"); return true; } //+------------------------------------------------------------------+ void UpdateCandlesIndex() { if((InpTimeframe==PERIOD_W1 || InpTimeframe==PERIOD_MN1) || (InpTimeframe==PERIOD_CURRENT && (Period()==PERIOD_W1 || Period()==PERIOD_MN1))) { CurrentCandleIndex=0; PrevCandleIndex=1; return; } int i=0; CurrentCandleIndex=i; while(TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SATURDAY || (!InpIncludeSundays && TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SUNDAY)) { i++; CurrentCandleIndex=i; } i=CurrentCandleIndex+1; PrevCandleIndex=i; while(TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SATURDAY || (!InpIncludeSundays && TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SUNDAY)) { i++; PrevCandleIndex=i; } } //+------------------------------------------------------------------+ void CorrectBarIndex(int &barIndex) { if(InpTimeframe==PERIOD_MN1) return; int i=barIndex; while(TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SATURDAY || (!InpIncludeSundays && TimeDayOfWeek(iTime(_Symbol,InpTimeframe,i))==SUNDAY)) { i++; barIndex=i; } } //+------------------------------------------------------------------+ int TimeDayOfWeek(datetime date) { MqlDateTime tm; TimeToStruct(date,tm); return(tm.day_of_week); } //+------------------------------------------------------------------+ string GetTFName() { string Result[]; if(StringSplit(EnumToString(_Period),'_',Result)>0) { return Result[1]; } else { return ""; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SendAlert(string _OP) { string message=""; StringConcatenate(message,_Symbol,"(",CalcTypeToString()," ",APPTFtoString(),") - ",_OP," touched"); if(InpAlertShowPopup) Alert(message); if(InpAlertSendEmail) { if(!SendMail("APP",message)) { Print("Send email failed with error #",GetLastError()); } } if(InpAlertPlaySound) PlaySound(InpAlertSoundFile); if(InpAlertSendNotification) { if(!SendNotification(message)) { Print("Send notification failed with error #",GetLastError()); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void RefreshAlerts() { if(!TerminalInfoInteger(TERMINAL_CONNECTED)) return; if(LastTickClose==0) { LastTickClose=SymbolInfoDouble(_Symbol,SYMBOL_BID); return; } if(InpShowR4) { if((LastTickClose=R4) || (LastTickClose>R4 && iClose(_Symbol,_Period,0)<=R4)) { if(LastTouchedLine!="R4") { if(InpR4Alert) { SendAlert(StringFormat("R4 (%s)",DoubleToString(R4,_Digits))); LastTouchedLine="R4"; } } } } if(InpShowR3) { if((LastTickClose=R3) || (LastTickClose>R3 && iClose(_Symbol,_Period,0)<=R3)) { if(LastTouchedLine!="R3") { if(InpR3Alert) { SendAlert(StringFormat("R3 (%s)",DoubleToString(R3,_Digits))); LastTouchedLine="R3"; } } } } if(InpShowR2) { if((LastTickClose=R2) || (LastTickClose>R2 && iClose(_Symbol,_Period,0)<=R2)) { if(LastTouchedLine!="R2") { if(InpR2Alert) { SendAlert(StringFormat("R2 (%s)",DoubleToString(R2,_Digits))); LastTouchedLine="R2"; } } } } if(InpShowR1) { if((LastTickClose=R1) || (LastTickClose>R1 && iClose(_Symbol,_Period,0)<=R1)) { if(LastTouchedLine!="R1") { if(InpR1Alert) { SendAlert(StringFormat("R1 (%s)",DoubleToString(R1,_Digits))); LastTouchedLine="R1"; } } } } if(InpShowPivot) { if((LastTickClose=PP) || (LastTickClose>PP && iClose(_Symbol,_Period,0)<=PP)) { if(LastTouchedLine!="PP") { if(InpPivotAlert) { SendAlert(StringFormat("PP (%s)",DoubleToString(PP,_Digits))); LastTouchedLine="PP"; } } } } if(InpShowS1) { if((LastTickClose=S1) || (LastTickClose>S1 && iClose(_Symbol,_Period,0)<=S1)) { if(LastTouchedLine!="S1") { if(InpS1Alert) { SendAlert(StringFormat("S1 (%s)",DoubleToString(S1,_Digits))); LastTouchedLine="S1"; } } } } if(InpShowS2) { if((LastTickClose=S2) || (LastTickClose>S2 && iClose(_Symbol,_Period,0)<=S2)) { if(LastTouchedLine!="S2") { if(InpS2Alert) { SendAlert(StringFormat("S2 (%s)",DoubleToString(S2,_Digits))); LastTouchedLine="S2"; } } } } if(InpShowS3) { if((LastTickClose=S3) || (LastTickClose>S3 && iClose(_Symbol,_Period,0)<=S3)) { if(LastTouchedLine!="S3") { if(InpS3Alert) { SendAlert(StringFormat("S3 (%s)",DoubleToString(S3,_Digits))); LastTouchedLine="S3"; } } } } if(InpShowS4) { if((LastTickClose=S4) || (LastTickClose>S4 && iClose(_Symbol,_Period,0)<=S4)) { if(LastTouchedLine!="S4") { if(InpS4Alert) { SendAlert(StringFormat("S4 (%s)",DoubleToString(S4,_Digits))); LastTouchedLine="S4"; } } } } LastTickClose=SymbolInfoDouble(_Symbol,SYMBOL_BID); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string APPTFtoString() { string Result[]; if(StringSplit(EnumToString(InpTimeframe),'_',Result)>0) { return Result[1]; } else { return ""; } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string CalcTypeToString() { string Result=""; switch(CalculationMode) { case CALC_MODE_CLASSIC1: Result="Classic1"; break; case CALC_MODE_CLASSIC2: Result="Classic2"; break; case CALC_MODE_CAMARILLA: Result="Cam"; break; case CALC_MODE_FIBONACCI: Result="Fib"; break; case CALC_MODE_FIBONACCI_RETRACEMENT: Result="FibR"; break; case CALC_MODE_FLOOR: Result="Floor"; break; case CALC_MODE_WOODIE: Result="Woodie"; break; default: Result=""; break; } return Result; } //+------------------------------------------------------------------+