How to automatically turn on my EA between 7GMT and 18GMT

 

Hi,

I've an EA running on my MT4 but I don't want it to run 24hrs. Can any kind soul please advice how can I modify the EA to turn on only between 07:00GMT and 18:00GMT. Thanks!

Cheers!

 

Check Time[0], then decide order or not.

 
DxdCn wrote >>

Check Time[0], then decide order or not.

Hi DxdCn, thanks for the response but can you elaborate please. My intention is just to turn-on & turn-off the EA during this period (07:00GMT and 18:00GMT). That's it. The rest will be done by the EA.

 

A

Try something like this

extern int StartHour=5;

extern int EndHour=5;





start()

{

if(Hour() < StartHour) return(0); // stop execution



if(Hour() > EndHour) return(0); // stop execution



// else carry on here with your process



...

...

}

You should not aim to <turn off> the EA as such, just halt further execution

FWIW

-BB-

 
BarrowBoy wrote >>

A

Try something like this

You should not aim to <turn off> the EA as such, just halt further execution

FWIW

-BB-

Thanks Barrow. Let me give it a shot and let you know how it turn out. Cheers dude!

 

of course that should be more like...

extern int StartHour=5;

extern int EndHour=15;

the curse of the old keyboard strikes again :)

-BB-

 
BarrowBoy wrote >>

of course that should be more like...

the curse of the old keyboard strikes again :)

-BB-

BB, looks good but it create 1 slight problem for me. I ran into an issue where the Stop Execution kicked in perfectly BUT unfortunately I still have 1 active trade opened. So how can I ensure that the Stop Execution kicks in only after all trades are closed and no further order should be execute after the trade window. Quite a challenge but will be glad if you can help. :)

 

Ahhhhhh glasshopper - you didnt say what execution you wanted to stop... All? Some?
A typical template for such an EA would be - OTTOMH

extern int StartHour=5;

extern int EndHour=15;

init()
{


}

start()
{


// ================= Do stuff every tick START ==================

   // Evaluate for Close of open trades






  // Evaluate for move of Trailing Stops





// ================= Do stuff every tick END ==================



// ================= Do stuff between limit hours START ==================


  if(Hour() < StartHour) return(0); // Too early

  if(Hour() > EndHour) return(0); // Too late


  // If got here you are in trading window so evaluate for Open 


  // Count current open trades to avoid orders ramping up




  // If count OK check for Open




// ================= Do stuff between limit hours END ==================



return (0);
}
-BB-
 

sample clock Server, Gmt ..

//+------------------------------------------------------------------+
//| Clock.mq4 |
//| Jerome |
//| 4xCoder@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Jerome"
#property link "4xCoder@gmail.com"

#import "kernel32.dll"
void GetLocalTime(int& TimeArray[]);
void GetSystemTime(int& TimeArray[]);
int GetTimeZoneInformation(int& TZInfoArray[]);
#import

//------------------------------------------------------------------
// Instructions
// This Version requires Allow DLL Imports be set in Common Tab when you add this to a chart.
// You can also enable this by default in the Options>Expert Advisors Tab, but you may want
// to turn off "Confirm DLL Function Calls"
//
// ShowLocal - Set to tru to show your local time zone
// corner - 0 = top left, 1 = top right, 2 = bottom left, 3 = bottom right
// topOff - pixels from top to show the clock
// labelColor- Color of label
// clockColor- Color of clock
// show12HourTime - true show 12 hour time, false, show 24 hour time
//
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red


//---- input parameters
extern bool ShowLocal=false;
extern int corner=1;
extern int topOff=120;
extern color labelColor=Gray;
extern color clockColor=White;
extern bool show12HourTime=false;

//---- buffers
double ExtMapBuffer1[];
int LondonTZ = 0;
int TokyoTZ = 9;
int NewYorkTZ = -5;

string TimeToString( datetime when ) {
if ( !show12HourTime )
return (TimeToStr( when, TIME_MINUTES ));

int hour = TimeHour( when );
int minute = TimeMinute( when );

string ampm = " AM";

string timeStr;
if ( hour >= 12 ) {
hour = hour - 12;
ampm = " PM";
}

if ( hour == 0 )
hour = 12;
timeStr = DoubleToStr( hour, 0 ) + ":";
if ( minute < 10 )
timeStr = timeStr + "0";
timeStr = timeStr + DoubleToStr( minute, 0 );
timeStr = timeStr + ampm;

return (timeStr);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if ( !IsDllsAllowed() ) {
Alert( "Clock V1_2: DLLs are disabled. To enable tick the checkbox in the Common Tab of indicator" );
return;
}
int counted_bars=IndicatorCounted();
//----

int TimeArray[4];
int TZInfoArray[43];
int nYear,nMonth,nDay,nHour,nMin,nSec,nMilliSec;
string sMilliSec;

GetLocalTime(TimeArray);
//---- parse date and time from array
nYear=TimeArray[0]&0x0000FFFF;
nMonth=TimeArray[0]>>16;
nDay=TimeArray[1]>>16;
nHour=TimeArray[2]&0x0000FFFF;
nMin=TimeArray[2]>>16;
nSec=TimeArray[3]&0x0000FFFF;
nMilliSec=TimeArray[3]>>16;
string LocalTimeS = FormatDateTime(nYear,nMonth,nDay,nHour,nMin,nSec);
datetime localTime = StrToTime( LocalTimeS );

//-----------------------------------------------------
LondonTZ = GMT_Offset("LONDON",localTime);
TokyoTZ = GMT_Offset("TOKYO",localTime);
NewYorkTZ = GMT_Offset("US",localTime);
//-----------------------------------------------------

int gmt_shift=0;
int dst=GetTimeZoneInformation(TZInfoArray);
if(dst!=0) gmt_shift=TZInfoArray[0];
//Print("Difference between your local time and GMT is: ",gmt_shift," minutes");
if(dst==2) gmt_shift+=TZInfoArray[42];

datetime brokerTime = CurTime();
datetime GMT = localTime + gmt_shift * 60;
datetime london = GMT + (LondonTZ + (dst - 1)) * 3600;
datetime tokyo = GMT + (TokyoTZ) * 3600;
datetime newyork = GMT + (NewYorkTZ + (dst - 1)) * 3600;

//Print( brokerTime, " ", GMT, " ", local, " ", london, " ", tokyo, " ", newyork );
string GMTs = TimeToString( GMT );
string locals = TimeToString( localTime );
string londons = TimeToString( london );
string tokyos = TimeToString( tokyo );
string newyorks = TimeToString( newyork );
string brokers = TimeToString( CurTime() );
string bars = TimeToStr( CurTime() - Time[0], TIME_MINUTES );

if ( ShowLocal ) {
ObjectSetText( "locl", "Local:", 10, "Arial", labelColor );
ObjectSetText( "loct", locals, 10, "Arial", clockColor );
}
ObjectSetText( "gmtl", "GMT", 10, "Arial", labelColor );
ObjectSetText( "gmtt", GMTs, 10, "Arial", clockColor );
ObjectSetText( "nyl", "New York:", 10, "Arial", labelColor );
ObjectSetText( "nyt", newyorks, 10, "Arial", clockColor );
ObjectSetText( "lonl", "London:", 10, "Arial", labelColor );
ObjectSetText( "lont", londons, 10, "Arial", clockColor );
ObjectSetText( "tokl", "Tokyo:", 10, "Arial", labelColor );
ObjectSetText( "tokt", tokyos, 10, "Arial", clockColor );
ObjectSetText( "brol", "Broker:", 10, "Arial", labelColor );
ObjectSetText( "brot", brokers, 10, "Arial", clockColor );
ObjectSetText( "barl", "Bar:", 10, "Arial", labelColor );
ObjectSetText( "bart", bars, 10, "Arial", clockColor );
//----
return(0);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int ObjectMakeLabel( string n, int xoff, int yoff ) {
ObjectCreate( n, OBJ_LABEL, 0, 0, 0 );
ObjectSet( n, OBJPROP_CORNER, corner );
ObjectSet( n, OBJPROP_XDISTANCE, xoff );
ObjectSet( n, OBJPROP_YDISTANCE, yoff );
ObjectSet( n, OBJPROP_BACK, true );
}

string FormatDateTime(int nYear,int nMonth,int nDay,int nHour,int nMin,int nSec)
{
string sMonth,sDay,sHour,sMin,sSec;
//----
sMonth=100+nMonth;
sMonth=StringSubstr(sMonth,1);
sDay=100+nDay;
sDay=StringSubstr(sDay,1);
sHour=100+nHour;
sHour=StringSubstr(sHour,1);
sMin=100+nMin;
sMin=StringSubstr(sMin,1);
sSec=100+nSec;
sSec=StringSubstr(sSec,1);
//----
return(StringConcatenate(nYear,".",sMonth,".",sDay," ",sHour,":",sMin,":",sSec));
}

int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);

int top=topOff;
int left = 90;
if ( show12HourTime )
left = 102;
if ( ShowLocal ) {
ObjectMakeLabel( "locl", left, top );
ObjectMakeLabel( "loct", 45, top );
}
ObjectMakeLabel( "gmtl", left, top-15 );
ObjectMakeLabel( "gmtt", 45, top-15 );
ObjectMakeLabel( "nyl", left, top-30 );
ObjectMakeLabel( "nyt", 45, top-30 );
ObjectMakeLabel( "lonl", left, top-45 );
ObjectMakeLabel( "lont", 45, top-45 );
ObjectMakeLabel( "tokl", left, top-60 );
ObjectMakeLabel( "tokt", 45, top-60 );
ObjectMakeLabel( "brol", left, top-75 );
ObjectMakeLabel( "brot", 45, top-75 );
ObjectMakeLabel( "barl", left, top-90 );
ObjectMakeLabel( "bart", 45, top-90 );
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete( "locl" );
ObjectDelete( "loct" );
ObjectDelete( "nyl" );
ObjectDelete( "nyt" );
ObjectDelete( "gmtl" );
ObjectDelete( "gmtt" );
ObjectDelete( "lonl" );
ObjectDelete( "lont" );
ObjectDelete( "tokl" );
ObjectDelete( "tokt" );
ObjectDelete( "brol" );
ObjectDelete( "brot" );
ObjectDelete( "barl" );
ObjectDelete( "bart" );
//----
return(0);
}

/////////////////////////////////////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GMT_Offset(string region,datetime dt1)
{
int r1=0;
if (region=="LONDON")
r1=GMT0(dt1);
else if (region=="US")
r1=GMT_5(dt1);
else if (region=="TOKYO")
r1=GMT9(dt1);

return (r1);

}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GMT0(datetime dt1)
{
//UK Standard Time = GMT
//UK Summer Time = BST (British Summer time) = GMT+1
//For 2003-2007 inclusive, the summer-time periods begin and end respectively on
//the following dates at 1.00am Greenwich Mean Time:
//2003: the Sundays of 30 March and 26 October
//2004: the Sundays of 28 March and 31 October
//2005: the Sundays of 27 March and 30 October
//2006: the Sundays of 26 March and 29 October
//2007: the Sundays of 25 March and 28 October
if ((dt1>last_sunday(TimeYear(dt1),3))&&(dt1<last_sunday(TimeYear(dt1),10)))
return(1);//summer
else
return(0);

}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GMT_5(datetime dt1)
{
//US
//-------------------------------------------------------------------
//Eastern Standard Time (EST) = GMT-5
//-------------------------------------------------------------------
//Eastern Daylight Time (EDT) = GMT-4
//-----+--------------------------+----------------------------------
//Year | DST Begins 2 a.m. | DST Ends 2 a.m.
//1990-| |
//2006 | (First Sunday in April) | (Last Sunday in October)
//-----+--------------------------+----------------------------------
//-----+--------------------------+----------------------------------
//Year | DST Begins 2 a.m. | DST Ends 2 a.m.
//2007-| (Second Sunday in March)| (First Sunday in November)
//-----+--------------------------+----------------------------------

if(TimeYear(dt1)<2007)
if ((dt1>first_sunday(TimeYear(dt1),4))&&(dt1<last_sunday(TimeYear(dt1),10)))
return(-4);
else
return(-5);
else
if ((dt1>second_sunday(TimeYear(dt1),3))&&(dt1<first_sunday(TimeYear(dt1),11)))
return(-4);
else
return(-5);

}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GMT9(datetime dt1)
{
return(9);//standard=summer=+9

}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool is_leap_year(int year1)
{

if ((MathMod(year1,100)==0) && (MathMod(year1,400)==0))
return(true);
else if ((MathMod(year1,100)!=0) && (MathMod(year1,4)==0))
return(true);
else
return (false);
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int n_days(int year1,int month1)
{
int ndays1;
if (month1==1)
ndays1=31;
else if(month1==2)
{
if (is_leap_year(year1))
ndays1=29;
else
ndays1=28;
}
else if(month1==3)
ndays1=31;
else if(month1==4)
ndays1=30;
else if(month1==5)//mai
ndays1=31;
else if(month1==6)//iun
ndays1=30;
else if(month1==7)//iul
ndays1=31;
else if(month1==8)//aug
ndays1=31;
else if(month1==9)//sep
ndays1=30;
else if(month1==10)//oct
ndays1=31;
else if(month1==11)//nov
ndays1=30;
else if(month1==12)
ndays1=31;

return(ndays1);

}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int n_sdays(int year1,int month1)
{
datetime ddt2;
int ndays2=n_days(year1,month1);
int i,nsun1=0;
for (i=1;i<=ndays2;i++)
{
ddt2= StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(ddt2)==0)
nsun1=nsun1+1;
}
return(nsun1);
}


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime last_sunday(int year1,int month1)
{
int i,ndays2,nsun1,nsun2;
datetime dt2,dt3;
ndays2=n_days(year1,month1);
nsun2=n_sdays(year1,month1);
nsun1=0;
for (i=1;i<=ndays2;i++)
{
dt2= StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(dt2)==0)
{
nsun1=nsun1+1;
}
if (nsun1==nsun2)
{
dt3=dt2;
break;
}
}
return(dt3);
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime first_sunday(int year1,int month1)
{
int i,ndays2,nsun1,nsun2;
datetime dt2,dt3;
ndays2=n_days(year1,month1);
nsun2=1;//n_sdays(year1,month1);
nsun1=0;
for (i=1;i<=ndays2;i++)
{
dt2= StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(dt2)==0)
{
nsun1=nsun1+1;
}
if (nsun1==nsun2)
{
dt3=dt2;
break;
}
}
return(dt3);
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
datetime second_sunday(int year1,int month1)
{
int i,ndays2,nsun1,nsun2;
datetime dt2,dt3;
ndays2=n_days(year1,month1);
nsun2=2;//n_sdays(year1,month1);
nsun1=0;
for (i=1;i<=ndays2;i++)
{
dt2= StrToTime(DoubleToStr(year1,0)+"."+DoubleToStr(month1,0)+"."+DoubleToStr(i,0)+" 00:00");
if(TimeDayOfWeek(dt2)==0)
{
nsun1=nsun1+1;
}
if (nsun1==nsun2)
{
dt3=dt2;
break;
}
}
return(dt3);
}


Files:
 

How do you use this mq4 file with my current EA?

What code do I put into my current EA?

Thanks,

Regards.

Reason: