Breakoutbox3 code needed in afl

#1
Hi friends
can somebody code this mq4 indicator in amibroker language afl!
thanks
ford

//+------------------------------------------------------------------+
//| 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<NumberOfDays; i++) {

DrawObjects(dtTradeDate, "BoxHL " + TimeToStr(dtTradeDate,TIME_DATE), periodA_begin, periodA_end, periodB_end, rectAB_color, 0, 1, rectAB_background);
DrawObjects(dtTradeDate, "BoxBreakOut_High " + TimeToStr(dtTradeDate,TIME_DATE), periodA_begin, periodA_end, periodB_end, rectsB2_color, rectsB2_band,2,rectsB2_background);
DrawObjects(dtTradeDate, "BoxBreakOut_Low " + TimeToStr(dtTradeDate,TIME_DATE), periodA_begin, periodA_end, periodB_end, rectsB2_color, rectsB2_band,3,rectsB2_background);
DrawObjects(dtTradeDate, "BoxPeriodA " + TimeToStr(dtTradeDate,TIME_DATE), periodA_begin, periodA_end, periodA_end, rectA_color, 0,4, rectA_background);
DrawObjects(dtTradeDate, "BoxPeriodB " + TimeToStr(dtTradeDate,TIME_DATE), periodA_begin, periodA_end, periodB_end, rectB1_color, rectB1_band,5, rectB1_background);


dtTradeDate=decrementTradeDate(dtTradeDate);
while (TimeDayOfWeek(dtTradeDate) > 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));
}

//+------------------------------------------------------------------+
 

Similar threads