这里的 客户端全局变量 不要与MQL4程序中定义的 全局变量 混淆。 最后访问的 "客户端全局变量" 可以在客户端内保存4个星期,然后将自动删除。对于 "客户端全局变量" 的访问不仅仅是新值的设定,也可以对其进行读取。 在客户端启动的所有MQL4程序可以同时访问 "客户端全局变量"。 - GlobalVariableCheck() – 检查全局变量是否存在
- GlobalVariableDel() – 删除全局变量
- GlobalVariableGet() – 获取全局变量的值
- GlobalVariableName() – 获取指定索引的全局变量名
- GlobalVariableSet() – 设置全局变量的值
- GlobalVariableSetOnCondition() – 根据条件设置全局变量值
- GlobalVariablesDeleteAll() – 删除全部全局变量
- GlobalVariablesTotal() – 获取全局变量总数
GlobalVariableCheck() – 检查全局变量是否存在bool GlobalVariableCheck(string name)如果 "客户端全局变量" 存在,返回TRUE,否则,返回FALSE。 要获得详细的错误信息,查看 GetLastError() 函数。 参量: name - 客户端全局变量名称。示例: // 使用前先检查变量 if(!GlobalVariableCheck("g1")) GlobalVariableSet("g1",1);GlobalVariableDel() – 删除全局变量bool GlobalVariableDel(string name)删除 "客户端全局变量" 。如果执行成功,返回TRUE,否则,返回FALSE。 参量: name - 客户端全局变量名称。示例: // 删除名称为 "gvar_1"的客户端全局变量 GlobalVariableDel("gvar_1");GlobalVariableGet() – 获取全局变量的值double GlobalVariableGet(string name)返回现有的 "客户端全局变量" 的值,如果发生错误,返回0。 参量: name - 客户端全局变量名称。示例: double v1=GlobalVariableGet("g1"); //---- 检查函数调用结果 if(GetLastError()!=0) return(false); //---- 继续程序GlobalVariableName() – 获取指定索引的全局变量名string GlobalVariableGet(int index)本函数通过全局变量列表中索引号返回 "客户端全局变量" 的名称。 参量: index - 全局变量列表中索引号,该索引号必须大于等于0,或者小于 GlobalVariablesTotal() 返回的值。示例: int var_total=GlobalVariablesTotal(); string name; for(int i=0;i<var_total;i++) { name=GlobalVariableName(i); Print(i,": 全局变量名称 - ",name); }GlobalVariableSet() – 设置全局变量的值datetime GlobalVariableSet(string name, double value)设置 "客户端全局变量" 新的值。如果它不存在,系统将创建个新的全局变量。如果函数成功,其返回值将是最后存取时间,否则,返回值将是0。 参量: name - 客户端全局变量名称。value - 新的数值 示例: //---- 尝试设定新值 if(GlobalVariableSet("BarsTotal",Bars)==0) return(false); //---- 继续程序GlobalVariableSetOnCondition() – 根据条件设置全局变量值bool GlobalVariableSetOnCondition(string name, double value, double check_value)如果 "客户端全局变量" 的当前值等于第三个参数check_value,就设置现有的全局变量的新值。如果全局变量不存在,函数将产生错误ERR_GLOBAL_VARIABLE_NOT_FOUND(4058) 并且返回FALSE;当函数执行成功,返回TRUE,否则,返回FALSE。 如果全局变量的当前值与check_value不同,函数将返回FALSE。 函数为 "客户端全局变量" 提供了强大的访问能力,这就是为什么在一个客户端内同时运行的几个智能交易程序用它作为通信信号进行相互通信的原因。 参量: name - 客户端全局变量名称。value - 新的数值。check_value - 与当前全局变量的值相比较的值。示例: int init() { //---- 创建客户端全局变量 GlobalVariableSet("DATAFILE_SEM",0); //... } int start() { //---- 尝试锁住公共资源 while(!IsStopped()) { //---- 锁住 if(GlobalVariableSetOnCondition("DATAFILE_SEM",1,0)==true) break; //---- 可以删除变量吗? if(GetLastError()==ERR_GLOBAL_VARIABLE_NOT_FOUND) return(0); //---- 等待 Sleep(500); } //---- 资源被锁 // ...做些工作 //----解锁资源 GlobalVariableSet("DATAFILE_SEM",0); }GlobalVariablesDeleteAll() – 删除全部全局变量int GlobalVariablesDeleteAll(void prefix_name)删除 "客户端全局变量"。如果全局变量名称的前缀没有指定,所有全局变量将被删除,否则,只有那些符合指定前缀开头的变量被删除。函数返回被删除的变量个数。 参量: prefix_name - 要被删除的全局变量名称前缀。示例: Print(GlobalVariablesDeleteAll("test_")," test_为开头的变量被删除");GlobalVariablesTotal() – 获取全局变量总数int GlobalVariablesTotal()获取 "客户端全局变量" 的总数。 示例: Print(GlobalVariablesTotal(),"全局变量检测到"); |