Hi, den nachfolgenden Code habe ich aus dem Netz. Ein Indikator, Du kannst den Code aber ohne Probleme in einem EA umsetzen. Have fun!
//+------------------------------------------------------------------+
//| ranges.mq4 |
//+------------------------------------------------------------------+
#property indicator_chart_window
//+------------------------------------------------------------------+
extern bool DrawRange = true;
extern string RangeBegin = "00:05";
extern string RangeEnd = "07:30";
extern color RangeColor = clrGreen;
extern bool DrawTrading = true;
extern string TradingBegin = "08:00";
extern string TradingEnd = "16:59";
extern color TradingColor = clrDarkOrange;
extern bool DrawDaily = true;
extern string DailyBegin = "00:05";
extern string DailyEnd = "23:59";
extern color DailyColor = clrLightGray;
extern bool ShowRecBgrd = true;
extern int NumberOfDays = 1;
int dig;
double pnt, spr, tickval;
string ccy;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void init() {
ccy = Symbol();
pnt = MarketInfo(ccy,MODE_POINT);
dig = MarketInfo(ccy,MODE_DIGITS);
spr = MarketInfo(ccy,MODE_SPREAD);
tickval = MarketInfo(ccy,MODE_TICKVALUE);
if (dig == 3 || dig == 5) {
pnt *= 10;
spr /= 10;
tickval *= 10;
}
DeleteObjects();
for (int i=0; i<NumberOfDays; i++) {
CreateObjects("RB"+i, RangeColor);
CreateObjects("TB"+i, TradingColor);
CreateObjects("DB"+i, DailyColor);
}
Comment("");
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
DeleteObjects();
Comment("");
}
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
//+------------------------------------------------------------------+
ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(no, OBJPROP_COLOR, cl);
ObjectSet(no, OBJPROP_BACK, ShowRecBgrd);
}
//+------------------------------------------------------------------+
void DeleteObjects() {
//+------------------------------------------------------------------+
for (int i=0; i<NumberOfDays; i++) {
ObjectDelete("RB"+i);
ObjectDelete("TB"+i);
ObjectDelete("DB"+i);
}
ObjectDelete("TBup");
ObjectDelete("TBdn");
ObjectDelete("RBup");
ObjectDelete("RBdn");
ObjectDelete("DBup");
ObjectDelete("DBdn");
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void start() {
datetime dt= TimeCurrent();
for (int i=0; i<NumberOfDays; i++) {
if(DrawRange == true) DrawObjects(dt, "RB"+i, RangeBegin, RangeEnd);
if(DrawTrading == true) DrawObjects(dt, "TB"+i, TradingBegin, TradingEnd);
if(DrawDaily == true) DrawObjects(dt, "DB"+i, DailyBegin, DailyEnd);
dt=decDateTradeDay(dt);
while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
}
}
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
//+------------------------------------------------------------------+
datetime t1, t2;
double p1, p2;
int b1, b2;
t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
b1=iBarShift(NULL, 0, t1);
b2=iBarShift(NULL, 0, t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2, b2)];
p2=Low [Lowest (NULL, 0, MODE_LOW , b1-b2, b2)];
ObjectSet(no, OBJPROP_TIME1 , t1);
ObjectSet(no, OBJPROP_PRICE1, p1);
ObjectSet(no, OBJPROP_TIME2 , t2);
ObjectSet(no, OBJPROP_PRICE2, p2);
ObjectSetText(no,DoubleToStr((p1-p2)/pnt,0));
}
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
//+------------------------------------------------------------------+
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);
td--;
if (td==0) {
tm--;
if (tm==0) {
ty--;
tm=12;
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+
|