Simple to spot a shifted date range?
-
Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
General rules and best pratices of the Forum. - General - MQL5 programming forum (2019)
Messages Editor -
int iGMT=(int)NormalizeDouble(((double)TimeCurrent()-(double)TimeGMT())/3600,0)
You are truncating instead of rounding.
-
int iStart=iBarShift(NULL,60,iTime(NULL,1440,0),false)+(iGMT<0?MathAbs(iGMT):(iGMT>0?-iGMT:iGMT));
On MT4: Unless the current chart is that specific symbol(s)/TF(s) referenced, you must handle 4066/4073 errors before accessing candle/indicator values.
Download history in MQL4 EA - Forex Calendar - MQL4 programming forum - Page 3 #26.4 (2019) -
datetime dtTmp=Time[iStart]; int iStartYear=TimeYear(dtTmp); int iStartMonth=TimeMonth(dtTmp); int iStartDay=TimeDay(dtTmp); int iStartHour=TimeHour(dtTmp)+Hour_start; int iStartMinute=TimeMinute(dtTmp)+Minute_start; int iStartSecond=TimeSeconds(dtTmp)+Second_start; datetime dtStart= (datetime)((string)iStartYear+"."+ (string)iStartMonth+"."+ (string)iStartDay+" "+ (string)iStartHour+":"+ (string)iStartMinute+":"+ (string)iStartSecond);
You have a datetime (dtTmp). No need for all that, just add Hour_start*3600 + Minute_start*60 + Second_start.
The following example is using iBarShift for parsing datetimes 🙂
input int Hour_shift=-5; //Hour shift
input int Hour_start=1; //Start hr; 0-23
input int Minute_start=0; //Start min; 0-59
input int Second_start=0; //Start sec; 0-59
input int Hour_end=9; //Stop hr; 0-23
input int Minute_end=59; //Stop min ; 0-59
input int Second_end=59; //Stop sec; 0-59
int OnInit()
int iStart=iBarShift(NULL,60,iTime(NULL,1440,0),false)+(iGMT<0?MathAbs(iGMT):(iGMT>0?-iGMT:iGMT));{
int iGMT=(int)NormalizeDouble(((double)TimeCurrent()-(double)TimeGMT())/3600,0)+Hour_shift;
Print("GMT Hour Shift: "+ (string)iGMT);
datetime dtTmp=Time[iStart];
int iStartYear=TimeYear(dtTmp);
int iStartMonth=TimeMonth(dtTmp);
int iStartDay=TimeDay(dtTmp);
int iStartHour=TimeHour(dtTmp)+Hour_start;
int iStartMinute=TimeMinute(dtTmp)+Minute_start;
int iStartSecond=TimeSeconds(dtTmp)+Second_start;
datetime dtStart=
(datetime)((string)iStartYear+"."+
(string)iStartMonth+"."+
(string)iStartDay+" "+
(string)iStartHour+":"+
(string)iStartMinute+":"+
(string)iStartSecond);
Print("Day Start: "+ (string)dtStart);
int iEndYear=TimeYear(dtTmp);
int iEndMonth=TimeMonth(dtTmp);
int iEndDay=TimeDay(dtTmp);
int iEndHour=TimeHour(dtTmp)+(Hour_end-Hour_start) ;
int iEndMinute=TimeMinute(dtTmp)+Minute_end;
int iEndSecond=TimeSeconds(dtTmp)+Second_end;
datetime dtEnd=
(datetime)((string)iEndYear+"."+
(string)iEndMonth+"."+
(string)iEndDay+" "+
(string)iEndHour+":"+
(string)iEndMinute+":"+
(string)iEndSecond);
Print("Day End: "+ (string)dtEnd);
return(INIT_SUCCEEDED);
}
The GMT shift is +3, so the offset between +3 and -5 is -2 hours ~ which must be applied to both sides
2021.09.20 03:20:46.189 EA5 USDJPY,H1: Day End: 2021.09.20 07:59:59
2021.09.20 03:20:46.189 EA5 USDJPY,H1: Day Start: 2021.09.17 22:00:00
2021.09.20 03:20:46.188 EA5 USDJPY,H1: GMT Hour Shift: -2
How else?