功能。创建或更改全局变量会对交易环境产生什么影响?
您能否解释一下全局变量的数值代表什么?
相当长一段时间以来,我一直在研究并试图了解终端的全局变量,尽管我还不了解它们的用法和影响。如果可能的话,能否请您举一个简单的例子,说明全局变量的创建如何对我的交易账户余额产生积极影响?
谢谢。
谢谢、
戴尔
作业:
想在 MetaQuotes 提供的货币交易工具 MT4 / MT5 中为外部 txt 文件写入和读取全局变量(通常称为全局变量)。
② 状态:
我想使用下面参考页面中描述的 CGlobalVar.mqh 和 CGlobalVarList.mqh 类来实现。
(具体来说,就是使用 CGLobalVarList 类的 Save () / Load () 方法执行全局变量的写入/读取)。
基本上不使用 Windows API(HANDLE CeateFile W () 等)。Д.).
操作文件的存储位置:
目标文件的默认位置遵循该类的规范
/ 文件
或
当 FILE_COMMON 被指定为 FileOpen () 的参数时,它将被存储。
C:\ { User \ User-Name \ AppData \ Roaming \ MetaQuotes \ Terminal \ Common \ Files \ File
和其中一个
④ 创建的文件:
两个简单的脚本文件作为实验样本
WriteGlobalParameters.mq4
и
ReadGlobalParameters.mq4.
创建者
※ 备注
如果只是为了与其他终端共享全局变量,可以考虑使用共享内存等方法。但这次只考虑使用外部 txt 文件的方法。
② 至于导出端的文件(WriteGlobalParamaeters.mq 4),使用 MQL 内置函数 GlobalVariablesTotal()、GlobalVariableName()、GlobalVariableName()、GlobalVariableGet()、GlobalVariableTime(),不使用保存(HANDLE),使用 WriteFile()函数写入(↓)。
For (int i = GlobalVariablesTotal () - 1; i> = 0; i -){
string gName = GlobalVariableName (i);
if (this.CheckGlobalVar (gName)) continue;
double gValue = GlobalVariableGet (gName);
datetime gTime = GlobalVariableTime (gName);
WriteFile (hFile, gName, gValue, gTime);
}, 可以将变量列表写入指定目录下的 txt 文件。
但是,在上述 GlobalVariable 函数组的情况下,即使可以写出,也无法将其添加到全局读取和终端变量列表中,因此没有写入。
#### 遇到的问题 - 错误信息
WriteGlobalParameters.mq 4 Side:
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: uninit reason 0
2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: 文件保存错误
2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: 创建指针错误
ReadGlobalParameters.mq 4 Side:
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: 原因不明 0
2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: 指针创建错误
* 从上述错误信息来看
很明显,由于指针规范中的缺陷和文件操作不当,导致预期操作失败、
由于不知道以下代码的问题出在哪里,我想谈谈这一点(以及不明确的原因 0)
``MQL4/MQL5.
WriteGlobalParameters.mq4> ```MQL4/MQL5.
//+------------------------------------------------------------------+
//| WriteGlobalParameters.mq4
//| Copyright 2018, MetaQuotes Software Corp.
//+------------------------------------------------------------------+
#property copyright "2018年版权所有,MetaQuotes Software Corp."
#property link"https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh> #属性版权 "Copyright 2018 MetaQuotes Software Corp.
#include <CGlobalVar.mqh> #include <CGlobalVar.mqh> #include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh> #Include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//} 脚本程序启动函数
//+------------------------------------------------------------------+
void OnStart(){
//您的文件名
string FileName="Write";
string FileType="txt";
string file=FileName+". "+FileType;
/指针
CGlobalVarList *list = new CGlobalVarList;
if(list!=NULL){
Print("Pointer Create Error");
}
//句柄
int hFile;
hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Save(hFile)){
Print("File Save Error");
删除 list;
FileClose(hFile);
}
//关闭
FileClose(hFile);
}
//释放指针
删除列表;
}
==========================================================================
ReadGlobalParameters.mq4> 读取全局参数
//+------------------------------------------------------------------+
//| ReadGlobalParameters.mq4
//| Copyright 2018, MetaQuotes Software Corp.
//+------------------------------------------------------------------+
#property copyright "2018年版权所有,MetaQuotes Software Corp."
#property link"https://www.mql5.com"
#property version "1.00"
#include <Arrays\List.mqh> #属性版权 "Copyright 2018 MetaQuotes Software Corp.
#include <CGlobalVar.mqh> #include <CGlobalVar.mqh> #include <CGlobalVar.mqh>
#include <CGlobalVarList.mqh> #Include <CGlobalVarList.mqh>
//+------------------------------------------------------------------+
//} 脚本程序启动函数
//+------------------------------------------------------------------+
void OnStart(){
//您的文件名
string FileName="Read";
string FileType="txt";
string file=FileName+". "+FileType;
/指针
CGlobalVarList *list = new CGlobalVarList;
if(list!=NULL){
Print("Pointer Create Error");
}
//句柄
int hFile;
hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE
if(hFile>=0){
if(!list.Load(hFile)){
Print("File Load Error");
删除 list;
FileClose(hFile);
}
//关闭
FileClose(hFile);
}
//释放指针
删除列表;
}
### 我试过
起动 MT 4 并在终端上的全局变量列表中注册任意名称和数值(在 Coco 中可以轻松注册为 0.0 或 1.0)。
(不设置时间,因为注册时会自动设置时间)
================================================== ===============
首先从 Write GlobalParameters.mq4 端 --- 开始
在图表中应用 WriteGlobalParameters.mq4,设置⓪。
→ 如果运行正常,将在上面指定的目录中创建文件,并输入全局变量信息。
② 如果检查目录(C: (User) (User - Name) (AppData) (Roaming) (MetaQuotes) (Terminal) (Common) (Files))、
指定的 "Write.txt "已创建,但文件大小为 0 KB。
→ 打开后,当然没有输入全局变量的名称和值。
================================================== ================
下一步是 ReadGlobalParameters.mq 4 side ---
我创建了一个 "Read.txt "文件,用于读取与 2 相同目录下的一个具有任意名称和数值的全局变量。
(我们创建并测试了两种类型的名称/数字/时间戳,即分割(未指定)和分割制表符(通过在 FileOpen 中指定"\t")())))
④与①类似,即使在图表中应用 ReadGlobalParameters.mq4,上面的错误信息和终端上打开的全局变量列表也是空的。
================================================== ================
※ 备注
为了以防万一,我们用 FileOpen () 函数默认设置的 FILE_CSV、FILE_UNICODE、FILE_BIN 和 FILE_ANSI 做了同样的实验,但结果没有变化。
- www.mql5.com
Now Global Variable are doubles only.
wish can use CMap object with element like key:value pair.
Or use Array or list ..... as Global Variable .
Or use a pointer point to a memory as Global Variable .
新文章 MQL5 编程基础: 终端的全局变量已发布:
本文重点介绍了面向对象的 MQL5 语言,用于创建对象,并与终端的全局变量协同工作。作为一个实际的例子,我考虑这样一种情况,以全局变量作为控制点实现程序分段。
在 MQL4/5 的环境里有个有趣的工具 - 客户端的全局变量。它允许创建用于终端所有程序的共享数据存储区域。此外,该区域的生存期不会因终端关闭而停止。本文建议采用面向对象编程工具,以便清晰的理解什么是终端的全局变量。
在文章的以后部分,除非另有说明,客户端全局变量将被称作“全局变量”。
1. 全局变量,函数
从一个程序员的角度,全局变量是一个已命名的内存区域,可用于交易终端的所有工作程序。新程序员应该注意的是,如果有几个终端同时工作,它们之中的每一个都有自己独立的全局变量内存空间。它们不会重叠。
该语言的开发者在文档中规定了 11 个函数可与全局变量工作。
有关理论可以在 MQL4 教科书的 "全局变量" 章节找到。
在下一章节我将使用 面向对象编程 工具来实现设置任务。
与全局变量工作的模块阶段跟踪模式,表示在图例.8。
图例.8. 处理标志序列模式
作者:Dennis Kirichenko