检查是否存在和上次活动时间

我们在前一节已经知道,可以通过尝试读取其值来检查全局变量的存在性:如果未导致 _LastError 中出现错误代码,则全局变量存在,我们已经获取到其值并将其用于算法中。然而,如果在某些情况下你仅需要检查其存在性而不需要读取全局变量,使用另一个专门为此设计的函数会更方便,即:GlobalVariableCheck

还有另一种检查方式,就是使用 GlobalVariableTime 函数。顾名思义,该函数可以找出上次使用变量的时间。但如果该变量不存在,则其使用时间不存在,即等于 0。

bool GlobalVariableCheck(const string name)

该函数使用指定名称检查全局变量的存在性,并返回结果:true(变量存在)或者 false(变量不存在)。

datetime GlobalVariableTime(const string name)

该函数返回具有指定名称的全局变量的上次使用时间。“使用”这一事实可通过变量值的修改或读取来表示。

使用 GlobalVariableCheck 检查变量存在性或通过 GlobalVariableTime 获取其时间并不会更改使用时间。

GlobalsRunCheck.mq5 脚本中,我们对 GlobalsRunCount.mq5 的代码进行了小幅补充,以便在函数 OnStart 的最开始检查变量的存在性及其使用时间。

void OnStart()
{
   PRTF(GlobalVariableCheck(gv));
   PRTF(GlobalVariableTime(gv));
   ...

下面的代码不变。同时,请注意,通过 __FILE__ 定义的 gv 变量这次将包含新的脚本名称 "GlobalsRunCheck.mq5" 作为全局变量的名称(即每个脚本有其自己的全局计数器)。

除了第一次运行外,后续所有所有运行都将在 GlobalVariableCheck 函数显示 true(变量存在)以及该变量前一次运行的时间。下面是一个示例日志:

GlobalVariableCheck(gv)=false / ok
GlobalVariableTime(gv)=1970.01.01 00:00:00 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableGet(gv)=0.0 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableSet(gv,count)=2021.08.29 16:59:35 / ok
This script run count: 1
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:35 / ok
GlobalVariableGet(gv)=1.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:45 / ok
This script run count: 2
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:45 / ok
GlobalVariableGet(gv)=2.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:56 / ok
This script run count: 3