7.3 创造简易定时器
我们可以使用MQL的时间和日期做出一个非常好用的工具到EA中,就是做一个定时器。有些交易员喜欢限定他们的交易在一天当中最活跃的几个小时,例如伦敦和纽约时间。也有的人希望避开一些浮动的市场因素进行交易,例如新闻报道和NFP。
要建构一个定时器,我们需具体指定一个起始时间和一个中止时间。我们使用外部整数变量来输入时间参数,创造出一个日期时间常数字符串,并将其转换成一个日期时间变量。然后将起始时间和中止时间与现在的时间进行比较。若现在的时间比起始时间大,但小于中止时间,则允许交易。
在下列中我们将使用的外部变量。我们将设定一个变量来打开或关掉定时器,并选择目前的时间(服务器时间或当地时间)。我们会为起始时间和中止时间设定其月、日、小时和分。

下列的程序代码用来检查是否允许交易。变量TradeAllowed决定是否开启新的交易。若UseTimer设定为假,TradeAllowed自动设定为真。否则,我们要评估起始时间和中止时间与现在时间的相对关系,以决定我们是否允许交易。


一开始我们要将起始时间转换为一个日期时间变量,即StartTime。用陈述句if(StartMonth ==12 && StartDay ==31 && EndMonth == 1)检查,看起始日期是否为一年的最后一天,中止日期是否在来年的第一天以后。若是,则自动将终止年份加1;否则我们在EndYear中使用目前年份。
然后,我们转换中止时间为一个日期时间变量EndTime,并选择要用在Cur-rentTime中使用哪种时间,服务器时间或当地时间。最后的if区块用来检查目前时间是否介于起始时间和中止时间之间。若是,TradeAllowed被设定为真。
现在我们需要增加程序代码来控制交易执行。最简单的方法是在我们的订单开启例行程序的外围增加一个if区块:


有许多方法可以创造定时器。例如,你可以使用星期几取代月和日,或设定和当日有关的交易次数。另外,我们也提供定时交易语法让读者参考。

【调用语句说明】
iTimeControl(15,00,17,30);//从系统时间15:00~17:30开始自动交易,函数返回true在程序中就可以这样使用:
If(iTimeControl(15001730))
{
//规定时间段内自动交易的程序代码