删除全局变量
如果必要,MQL 程序能够删除已变为冗余的一个或一组全局变量。全局变量列表消耗一些计算机资源,而良好编程风格建议应尽量释放资源。
bool GlobalVariableDel(const string name)
该函数删除 'name' 全局变量。如果成功,该函数返回 true,否则返回 false。
int GlobalVariablesDeleteAll(const string prefix = NULL, datetime limit = 0)
该函数删除在名称中具有指定前缀的全局变量以及使用时间超过 limit 参数值的全局变量。
如果指定了 NULL 前缀(默认)或空字符串,则同时满足“按日期”删除条件(如果已设置)的所有全局变量均满足删除条件。
如果 limit 参数为零(默认),则将删除所有符合前缀条件的全局变量(不考虑日期因素)
如果同时指定这两个参数,则将删除既匹配前缀又匹配时间条件的全局变量。
注意:在没有参数的情况下调用 GlobalVariablesDeleteAll 将移除所有变量。
该函数返回删除变量的数量。
了解脚本 GlobalsDelete.mq5,探索两个新功能。
void OnStart()
|
在开始,尝试按其确切名称和前缀删除不存在的全局变量。二者均对现有变量无影响。
若调用 GlobalVariablesDeleteAll 时筛选了过去时间(超过 4 个星期)也会得到零结果,因为终端自动删除这些旧变量(这些变量不可能存在)。
PRTF(GlobalVariablesDeleteAll(NULL, D'2021.01.01')); |
然后,我们创建一个名称为 "abracadabra" 的变量(如果不存在)并立即删除。这些调用应会成功。
PRTF(GlobalVariableSet(abracadabra, 0));
|
最后,我们删除以 "GlobalsRun" 前缀开头的变量:它们应该是根据有关文件名的前两个章节中的测试脚本(分别为 "GlobalsRunCount.mq5" 和 "GlobalsRunCheck.mq5")而创建。
PRTF(GlobalVariablesDeleteAll("GlobalsRun"));
|
该脚本应将如下字符串系列的内容输出到日志(某些指标取决于外部条件和启动时间)。
GlobalVariableDel(#123%)=false / GLOBALVARIABLE_NOT_FOUND(4501)
|
最后,我们打印剩余全局变量的总数量(在本例中,我们得到 0,即没有变量)。如果全局变量是由其它 MQL 程序或由用户创建,则你的结果可能不同。