//+------------------------------------------------------------------+ //| BreakOut_BOX_3.mq4 | //| hapalkos | //| 2007.02.12 | //| ++ modified so that rectangles do not overlay | //| ++ this makes color selection more versatile | //| +++ code consolidated to facilitate changes | //| +++ changed period B rectangle and added offset value | //| +++ corrected error in high-low code | //+------------------------------------------------------------------+ #property copyright "hapalkos" #property link "" #property indicator_chart_window extern int NumberOfDays = 50; extern string periodA_begin = "02:00"; extern string periodA_end = "09:00"; extern string periodB_end = "15:00"; extern color rectAB_color = LightGray; extern bool rectAB_background = true; extern color rectA_color = OrangeRed; extern bool rectA_background = false; extern color rectB1_color = OrangeRed; extern bool rectB1_background = false; extern int rectB1_band = 0; extern color rectsB2_color = DodgerBlue; extern bool rectsB2_background = true; extern int rectsB2_band = 5; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void init() { DeleteObjects(); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ void deinit() { DeleteObjects(); return(0); } //+------------------------------------------------------------------+ //| Remove all Rectangles | //+------------------------------------------------------------------+ void DeleteObjects() { ObjectsDeleteAll(0,OBJ_RECTANGLE); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { datetime dtTradeDate=TimeCurrent(); for (int i=0; i 5 || TimeDayOfWeek(dtTradeDate) < 1 ) dtTradeDate = decrementTradeDate(dtTradeDate); // Removed Sundays from plots } } //+------------------------------------------------------------------+ //| Create Rectangles | //+------------------------------------------------------------------+ void DrawObjects(datetime dtTradeDate, string sObjName, string sTimeBegin, string sTimeEnd, string sTimeObjEnd, color cObjColor, int iOffSet, int iForm, bool background) { datetime dtTimeBegin, dtTimeEnd, dtTimeObjEnd; double dPriceHigh, dPriceLow; int iBarBegin, iBarEnd; dtTimeBegin = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeBegin); dtTimeEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeEnd); dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + sTimeObjEnd); iBarBegin = iBarShift(NULL, 0, dtTimeBegin)+1; // added 1 to bar count to correct calculation for highest price for the period iBarEnd = iBarShift(NULL, 0, dtTimeEnd)+1; // added 1 to bar count to correct calculation for lowest price for the period dPriceHigh = High[Highest(NULL, 0, MODE_HIGH, (iBarBegin)-iBarEnd, iBarEnd)]; dPriceLow = Low [Lowest (NULL, 0, MODE_LOW , (iBarBegin)-iBarEnd, iBarEnd)]; ObjectCreate(sObjName, OBJ_RECTANGLE, 0, 0, 0, 0, 0); // ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeBegin); // ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd); //---- High-Low Rectangle if(iForm==1){ ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeBegin); ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd); ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh); ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow); ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(sObjName, OBJPROP_COLOR, cObjColor); ObjectSet(sObjName, OBJPROP_BACK, background); } //---- Upper Rectangle if(iForm==2){ ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeEnd); ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd); ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh); ObjectSet(sObjName, OBJPROP_PRICE2, dPriceHigh + iOffSet*Point); ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(sObjName, OBJPROP_COLOR, cObjColor); ObjectSet(sObjName, OBJPROP_BACK, background); } //---- Lower Rectangle if(iForm==3){ ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeEnd); ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd); ObjectSet(sObjName, OBJPROP_PRICE1, dPriceLow - iOffSet*Point); ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow); ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(sObjName, OBJPROP_COLOR, cObjColor); ObjectSet(sObjName, OBJPROP_BACK, background); } //---- PeriodA Rectangle if(iForm==4){ ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeBegin); ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeEnd); ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh); ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow); ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(sObjName, OBJPROP_COLOR, cObjColor); ObjectSet(sObjName, OBJPROP_WIDTH, 2); ObjectSet(sObjName, OBJPROP_BACK, background); string sObjDesc = StringConcatenate("High: ",dPriceHigh," Low: ", dPriceLow); ObjectSetText(sObjName, sObjDesc,10,"Times New Roman",Black); } //---- PeriodB Rectangle if(iForm==5){ ObjectSet(sObjName, OBJPROP_TIME1 , dtTimeEnd); ObjectSet(sObjName, OBJPROP_TIME2 , dtTimeObjEnd); ObjectSet(sObjName, OBJPROP_PRICE1, dPriceHigh + iOffSet*Point); ObjectSet(sObjName, OBJPROP_PRICE2, dPriceLow - iOffSet*Point); ObjectSet(sObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSet(sObjName, OBJPROP_COLOR, cObjColor); ObjectSet(sObjName, OBJPROP_WIDTH, 2); ObjectSet(sObjName, OBJPROP_BACK, background); } } //+------------------------------------------------------------------+ //| Decrement Date to draw objects in the past | //+------------------------------------------------------------------+ datetime decrementTradeDate (datetime dtTimeDate) { int iTimeYear=TimeYear(dtTimeDate); int iTimeMonth=TimeMonth(dtTimeDate); int iTimeDay=TimeDay(dtTimeDate); int iTimeHour=TimeHour(dtTimeDate); int iTimeMinute=TimeMinute(dtTimeDate); iTimeDay--; if (iTimeDay==0) { iTimeMonth--; if (iTimeMonth==0) { iTimeYear--; iTimeMonth=12; } // Thirty days hath September... if (iTimeMonth==4 || iTimeMonth==6 || iTimeMonth==9 || iTimeMonth==11) iTimeDay=30; // ...all the rest have thirty-one... if (iTimeMonth==1 || iTimeMonth==3 || iTimeMonth==5 || iTimeMonth==7 || iTimeMonth==8 || iTimeMonth==10 || iTimeMonth==12) iTimeDay=31; // ...except... if (iTimeMonth==2) if (MathMod(iTimeYear, 4)==0) iTimeDay=29; else iTimeDay=28; } return(StrToTime(iTimeYear + "." + iTimeMonth + "." + iTimeDay + " " + iTimeHour + ":" + iTimeMinute)); } //+------------------------------------------------------------------+