Pivots are well known price action indicator .
#property link " #property version "1.00" #property indicator_plots 0 #property indicator_chart_window #property strict input color WeeklyColors = Yellow; input color MonthlyColors = Orange; input bool Use_Sunday_Data = true; input bool Daily = true; input bool Daily_SR_Levels = true; input bool Weekly = true; input bool Weekly_SR_Levels = false; input bool Monthly = true; input bool Monthly_SR_Levels = false; double YesterdayHigh; double YesterdayLow; double YesterdayClose; double Pivot, S1, S2, S3, R1, R2, R3; double WeekHigh; double WeekLow; double WeekClose; double WeekPivot, WS1, WS2, WS3, WR1, WR2, WR3; double MonthHigh; double MonthLow; double MonthClose; double MonthPivot, MS1, MS2, MS3, MR1, MR2, MR3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } //-------------------------------------------------------- //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(0, "PivotLine"); ObjectDelete(0, "R1_Line"); ObjectDelete(0, "R2_Line"); ObjectDelete(0, "R3_Line"); ObjectDelete(0, "S1_Line"); ObjectDelete(0, "S2_Line"); ObjectDelete(0, "S3_Line"); //-------------------------------- ObjectDelete(0, "PivotLabel"); ObjectDelete(0, "R1_Label"); ObjectDelete(0, "R2_Label"); ObjectDelete(0, "R3_Label"); ObjectDelete(0, "S1_Label"); ObjectDelete(0, "S2_Label"); ObjectDelete(0, "S3_Label"); //-------------------------------------------------------- ObjectDelete(0, "WeekPivotLine"); ObjectDelete(0, "WR1_Line"); ObjectDelete(0, "WR2_Line"); ObjectDelete(0, "WR3_Line"); ObjectDelete(0, "WS1_Line"); ObjectDelete(0, "WS2_Line"); ObjectDelete(0, "WS3_Line"); //-------------------------------- ObjectDelete(0, "WeekPivotLabel"); ObjectDelete(0, "WR1_Label"); ObjectDelete(0, "WR2_Label"); ObjectDelete(0, "WR3_Label"); ObjectDelete(0, "WS1_Label"); ObjectDelete(0, "WS2_Label"); ObjectDelete(0, "WS3_Label"); //-------------------------------------------------------- ObjectDelete(0, "MonthPivotLine"); ObjectDelete(0, "MR1_Line"); ObjectDelete(0, "MR2_Line"); ObjectDelete(0, "MR3_Line"); ObjectDelete(0, "MS1_Line"); ObjectDelete(0, "MS2_Line"); ObjectDelete(0, "MS3_Line"); //-------------------------------- ObjectDelete(0, "MonthPivotLabel"); ObjectDelete(0, "MR1_Label"); ObjectDelete(0, "MR2_Label"); ObjectDelete(0, "MR3_Label"); ObjectDelete(0, "MS1_Label"); ObjectDelete(0, "MS2_Label"); ObjectDelete(0, "MS3_Label"); } //--------------------------------------------------------- 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[]) { YesterdayHigh = iHigh(_Symbol, PERIOD_D1, 1); YesterdayLow = iLow(_Symbol, PERIOD_D1, 1); YesterdayClose = iClose(_Symbol, PERIOD_D1, 1); Pivot = ((YesterdayHigh + YesterdayLow + YesterdayClose) / 3); R1 = (2 * Pivot) - YesterdayLow; S1 = (2 * Pivot) - YesterdayHigh; R2 = Pivot + (R1 - S1); S2 = Pivot - (R1 - S1); R3 = (YesterdayHigh + (2 * (Pivot - YesterdayLow))); S3 = (YesterdayLow - (2 * (YesterdayHigh - Pivot))); if(Use_Sunday_Data == false) { while(DayOfWeekMQL4() == 1) { YesterdayHigh = iHigh(_Symbol, PERIOD_D1, 2); YesterdayLow = iLow(_Symbol, PERIOD_D1, 2); YesterdayClose = iClose(_Symbol, PERIOD_D1, 2); Pivot = ((YesterdayHigh + YesterdayLow + YesterdayClose) / 3); R1 = (2 * Pivot) - YesterdayLow; S1 = (2 * Pivot) - YesterdayHigh; R2 = Pivot + (R1 - S1); S2 = Pivot - (R1 - S1); R3 = (YesterdayHigh + (2 * (Pivot - YesterdayLow))); S3 = (YesterdayLow - (2 * (YesterdayHigh - Pivot))); break; } } //-------------------------------------------------------- //-------------------------------------------------------- WeekHigh = iHigh(_Symbol, PERIOD_W1, 1); WeekLow = iLow(_Symbol, PERIOD_W1, 1); WeekClose = iClose(_Symbol, PERIOD_W1, 1); WeekPivot = ((WeekHigh + WeekLow + WeekClose) / 3); WR1 = (2 * WeekPivot) - WeekLow; WS1 = (2 * WeekPivot) - WeekHigh; WR2 = WeekPivot + (WR1 - WS1); WS2 = WeekPivot - (WR1 - WS1); WS3 = (WeekLow - (2 * (WeekHigh - WeekPivot))); WR3 = (WeekHigh + (2 * (WeekPivot - WeekLow))); //-------------------------------------------------------- //-------------------------------------------------------- MonthHigh = iHigh(_Symbol, PERIOD_MN1, 1); MonthLow = iLow(_Symbol, PERIOD_MN1, 1); MonthClose = iClose(_Symbol, PERIOD_MN1, 1); MonthPivot = ((MonthHigh + MonthLow + MonthClose) / 3); MR1 = (2 * MonthPivot) - MonthLow; MS1 = (2 * MonthPivot) - MonthHigh; MR2 = MonthPivot + (MR1 - MS1); MS2 = MonthPivot - (MR1 - MS1); MS3 = (MonthLow - (2 * (MonthHigh - MonthPivot))); MR3 = (MonthHigh + (2 * (MonthPivot - MonthLow))); //-------------------------------------------------------- if(Daily == true) { TimeToString(TimeCurrent()); ObjectCreate(0, "PivotLine", OBJ_HLINE, 0, TimeCurrent(), Pivot); ObjectSetInteger(0, "PivotLine", OBJPROP_COLOR, clrMagenta); ObjectSetInteger(0, "PivotLine", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind(0,"PivotLabel") != 0) { //ObjectCreate("PivotLabel", OBJ_TEXT, 0, Time[20], Pivot); //ObjectSetText("PivotLabel", ("Daily Pivot"), 12, "Arial", Magenta); } else { ObjectMove("PivotLabel", 0, Time[20], Pivot); } */ ChartRedraw(); //-------------------------------------------------------- if(Daily_SR_Levels == true) { ObjectCreate(0, "R1_Line", OBJ_HLINE, 0, TimeCurrent(), R1); ObjectSetInteger(0, "R1_Line", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "R1_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("R1_Label") != 0) { //ObjectCreate("R1_Label", OBJ_TEXT, 0, Time[20], R1); //ObjectSetText("R1_Label", "Daily R1", 12, "Arial", Red); } else { ObjectMove("R1_Label", 0, Time[20], R1); } */ //-------------------------------------------------------- ObjectCreate(0, "R2_Line", OBJ_HLINE, 0, TimeCurrent(), R2); ObjectSetInteger(0, "R2_Line", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "R2_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("R2_Label") != 0) { //ObjectCreate("R2_Label", OBJ_TEXT, 0, Time[20], R2); //ObjectSetText("R2_Label", "Daily R2", 12, "Arial", Red); } else { ObjectMove("R2_Label", 0, Time[20], R2); } */ //--------------------------------------------------------- ObjectCreate(0, "R3_Line", OBJ_HLINE, 0, TimeCurrent(), R3); ObjectSetInteger(0, "R3_Line", OBJPROP_COLOR, clrRed); ObjectSetInteger(0, "R3_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("R3_Label") != 0) { //ObjectCreate("R3_Label", OBJ_TEXT, 0, Time[20], R3); //ObjectSetText("R3_Label", "Daily R3", 12, "Arial", Red); } else { ObjectMove("R3_Label", 0, Time[20], R3); } */ //--------------------------------------------------------- ObjectCreate(0, "S1_Line", OBJ_HLINE, 0, TimeCurrent(), S1); ObjectSetInteger(0, "S1_Line", OBJPROP_COLOR, clrLimeGreen); ObjectSetInteger(0, "S1_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("S1_Label") != 0) { ///ObjectCreate("S1_Label", OBJ_TEXT, 0, Time[20], S1); // ObjectSetText("S1_Label", "Daily S1", 12, "Arial", DarkBlue); } else { ObjectMove("S1_Label", 0, Time[20], S1); } */ //--------------------------------------------------------- ObjectCreate(0, "S2_Line", OBJ_HLINE, 0, TimeCurrent(), S2); ObjectSetInteger(0, "S2_Line", OBJPROP_COLOR, clrLimeGreen); ObjectSetInteger(0, "S2_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("S2_Label") != 0) { //ObjectCreate("S2_Label", OBJ_TEXT, 0, Time[20], S2); // ObjectSetText("S2_Label", "Daily S2", 12, "Arial", DarkBlue); } else { ObjectMove("S2_Label", 0, Time[20], S2); } */ //--------------------------------------------------------- ObjectCreate(0, "S3_Line", OBJ_HLINE, 0, TimeCurrent(), S3); ObjectSetInteger(0, "S3_Line", OBJPROP_COLOR, clrLimeGreen); ObjectSetInteger(0, "S3_Line", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("S3_Label") != 0) { //ObjectCreate("S3_Label", OBJ_TEXT, 0, Time[20], S3); // ObjectSetText("S3_Label", "Daily S3", 12, "Arial", DarkBlue); } else { ObjectMove("S3_Label", 0, Time[20], S3); } */ } ChartRedraw(); } //--------------------------------------------------------- //--------------------------------------------------------- //--------------------------------------------------------- if(Weekly == true) { ObjectCreate(0, "WeekPivotLine", OBJ_HLINE, 0, TimeCurrent(), WeekPivot); ObjectSetInteger(0, "WeekPivotLine", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WeekPivotLine", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("WeekPivotLabel") != 0) { // ObjectCreate("WeekPivotLabel", OBJ_TEXT, 0, Time[30], WeekPivot); // ObjectSetText("WeekPivotLabel", "WeeklyPivot", 12, "Arial", Aqua); } else { ObjectMove("WeekPivotLabel", 0, Time[30], WeekPivot); } */ //-------------------------------------------------------- if(Weekly_SR_Levels == true) { ObjectCreate(0, "WR1_Line", OBJ_HLINE, 0, TimeCurrent(), WR1); ObjectSetInteger(0, "WR1_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WR1_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WR1_Label") != 0) { // ObjectCreate("WR1_Label", OBJ_TEXT, 0, Time[30], WR1); // ObjectSetText("WR1_Label", " Weekly R1", 12, "Arial", Yellow); } else { ObjectMove("WR1_Label", 0, Time[30], WR1); } */ //-------------------------------------------------------- ObjectCreate(0, "WR2_Line", OBJ_HLINE, 0, TimeCurrent(), WR2); ObjectSetInteger(0, "WR2_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WR2_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WR2_Label") != 0) { // ObjectCreate("WR2_Label", OBJ_TEXT, 0, Time[30], WR2); // ObjectSetText("WR2_Label", " Weekly R2", 12, "Arial", Yellow); } else { ObjectMove("WR2_Label", 0, Time[30], WR2); } */ //--------------------------------------------------------- ObjectCreate(0, "WR3_Line", OBJ_HLINE, 0, TimeCurrent(), WR3); ObjectSetInteger(0, "WR3_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WR3_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WR3_Label") != 0) { // ObjectCreate("WR3_Label", OBJ_TEXT, 0, Time[30], WR3); // ObjectSetText("WR3_Label", " Weekly R3", 12, "Arial", Yellow); } else { ObjectMove("WR3_Label", 0, Time[30], WR3); } */ //--------------------------------------------------------- ObjectCreate(0, "WS1_Line", OBJ_HLINE, 0, TimeCurrent(), WS1); ObjectSetInteger(0, "WS1_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WS1_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WS1_Label") != 0) { // ObjectCreate("WS1_Label", OBJ_TEXT, 0, Time[30], WS1); // ObjectSetText("WS1_Label", "Weekly S1", 12, "Arial", SteelBlue); } else { ObjectMove("WS1_Label", 0, Time[30], WS1); } */ //--------------------------------------------------------- ObjectCreate(0, "WS2_Line", OBJ_HLINE, 0, TimeCurrent(), WS2); ObjectSetInteger(0, "WS2_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WS2_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WS2_Label") != 0) { // ObjectCreate("WS2_Label", OBJ_TEXT, 0, Time[30], WS2); // ObjectSetText("WS2_Label", "Weekly S2", 12, "Arial", SteelBlue); } else { ObjectMove("WS2_Label", 0, Time[30], WS2); } */ //--------------------------------------------------------- ObjectCreate(0, "WS3_Line", OBJ_HLINE, 0, TimeCurrent(), WS3); ObjectSetInteger(0, "WS3_Line", OBJPROP_COLOR, WeeklyColors); ObjectSetInteger(0, "WS3_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("WS3_Label") != 0) { // ObjectCreate("WS3_Label", OBJ_TEXT, 0, Time[30], WS3); //ObjectSetText("WS3_Label", "Weekly S3", 12, "Arial", SteelBlue); } else { ObjectMove("WS3_Label", 0, Time[30], WS3); } */ } ChartRedraw(); } //--------------------------------------------------------- //--------------------------------------------------------- //--------------------------------------------------------- if(Monthly == true) { ObjectCreate(0, "MonthPivotLine", OBJ_HLINE, 0, TimeCurrent(), MonthPivot); ObjectSetInteger(0, "MonthPivotLine", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MonthPivotLine", OBJPROP_STYLE, STYLE_DASH); /* if(ObjectFind("MonthPivotLabel") != 0) { // ObjectCreate("MonthPivotLabel", OBJ_TEXT, 0, Time[40], MonthPivot); // ObjectSetText("MonthPivotLabel", "MonthlyPivot", 12, "Arial", White); } else { ObjectMove("MonthPivotLabel", 0, Time[40], MonthPivot); } */ //-------------------------------------------------------- if(Monthly_SR_Levels == true) { ObjectCreate(0, "MR1_Line", OBJ_HLINE, 0, TimeCurrent(), MR1); ObjectSetInteger(0, "MR1_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MR1_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MR1_Label") != 0) { // ObjectCreate("MR1_Label", OBJ_TEXT, 0, Time[40], MR1); // ObjectSetText("MR1_Label", " Monthly R1", 12, "Arial", Blue); } else { ObjectMove("MR1_Label", 0, Time[40], MR1); } */ //-------------------------------------------------------- ObjectCreate(0, "MR2_Line", OBJ_HLINE, 0, TimeCurrent(), MR2); ObjectSetInteger(0, "MR2_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MR2_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MR2_Label") != 0) { // ObjectCreate("MR2_Label", OBJ_TEXT, 0, Time[40], MR2); //ObjectSetText("MR2_Label", " Monthly R2", 12, "Arial", Blue); } else { ObjectMove("MR2_Label", 0, Time[40], MR2); } */ //--------------------------------------------------------- ObjectCreate(0, "MR3_Line", OBJ_HLINE, 0, TimeCurrent(), MR3); ObjectSetInteger(0, "MR3_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MR3_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MR3_Label") != 0) { // ObjectCreate("MR3_Label", OBJ_TEXT, 0, Time[40], MR3); // ObjectSetText("MR3_Label", " Monthly R3", 12, "Arial", Blue); } else { ObjectMove("MR3_Label", 0, Time[40], MR3); } */ //--------------------------------------------------------- ObjectCreate(0, "MS1_Line", OBJ_HLINE, 0, TimeCurrent(), MS1); ObjectSetInteger(0, "MS1_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MS1_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MS1_Label") != 0) { //ObjectCreate("MS1_Label", OBJ_TEXT, 0, Time[40], MS1); //ObjectSetText("MS1_Label", "Monthly S1", 12, "Arial", Silver); } else { ObjectMove("MS1_Label", 0, Time[40], MS1); } */ //--------------------------------------------------------- ObjectCreate(0, "MS2_Line", OBJ_HLINE, 0, TimeCurrent(), MS2); ObjectSetInteger(0, "MS2_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MS2_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MS2_Label") != 0) { //ObjectCreate("MS2_Label", OBJ_TEXT, 0, Time[40], MS2); //ObjectSetText("MS2_Label", "Monthly S2", 12, "Arial", Silver); } else { ObjectMove("MS2_Label", 0, Time[40], MS2); } */ //--------------------------------------------------------- ObjectCreate(0, "MS3_Line", OBJ_HLINE, 0, TimeCurrent(), MS3); ObjectSetInteger(0, "MS3_Line", OBJPROP_COLOR, MonthlyColors); ObjectSetInteger(0, "MS3_Line", OBJPROP_STYLE, STYLE_DASHDOTDOT); /* if(ObjectFind("MS3_Label") != 0) { //ObjectCreate("MS3_Label", OBJ_TEXT, 0, Time[40], MS3); //ObjectSetText("MS3_Label", "Monthly S3", 12, "Arial", Silver); } else { ObjectMove("MS3_Label", 0, Time[40], MS3); } */ } ChartRedraw(); } //--------------------------------------------------------- return(rates_total); } //--------------------------------------------------------- int DayOfWeekMQL4() { MqlDateTime tm; TimeCurrent(tm); return(tm.day_of_week); } //---------------------------------------------------------