获取全局变量列表

通常,需要 MQL 程序来浏览现有全局变量并选择满足某些条件的全局变量。例如,如果一个程序使用变量名称的一部分来存储文本信息,则仅前缀为事先已知。该前缀的目的是识别“其自己的”变量,而附加到前缀的“有效载荷”不允许按确切名称来搜索变量。

MQL5 API 有两个函数可用于枚举全局变量。

int GlobalVariablesTotal()

该函数返回全局变量总数。

string GlobalVariableName(int index)

该函数按其在全局变量列表中的索引号返回全局变量的名称。带有请求变量编号的 index 参数其范围必须在 0 到 GlobalVariablesTotal() - 1 之间。

如果出错,则该函数返回 NULL,错误代码可从服务变量 _LastError 或从 GetLastError 函数获取。

我们使用脚本 GlobalsList.mq5 来测试这对函数。

void OnStart()
{
   PRTF(GlobalVariableName(1000000));
   int n = PRTF(GlobalVariablesTotal());
   for(int i = 0i < n; ++i)
   {
      const string name = GlobalVariableName(i);
      PrintFormat("%d %s=%f"inameGlobalVariableGet(name));
   }
}

第一个字符串故意请求一个大编号变量的名称,而该变量很可能不存在,这样应会导致错误。接下来,请求真实变量数量以及贯穿所有变量的循环,并输出名称和值。下面的日志包括由先前的测试脚本创建的变量以及一个第三方变量。

GlobalVariableName(1000000)= / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariablesTotal()=3 / ok
0 GlobalsRunCheck.mq5=3.000000
1 GlobalsRunCount.mq5=4.000000
2 abracadabra=0.000000

未定义终端按索引返回变量的顺序。