文章 "MQL5 编程基础: 终端的全局变量"

 

新文章 MQL5 编程基础: 终端的全局变量已发布:

本文重点介绍了面向对象的 MQL5 语言,用于创建对象,并与终端的全局变量协同工作。作为一个实际的例子,我考虑这样一种情况,以全局变量作为控制点实现程序分段。

在 MQL4/5 的环境里有个有趣的工具 - 客户端的全局变量。它允许创建用于终端所有程序的共享数据存储区域。此外,该区域的生存期不会因终端关闭而停止。本文建议采用面向对象编程工具,以便清晰的理解什么是终端的全局变量。

在文章的以后部分,除非另有说明,客户端全局变量将被称作“全局变量”。


1. 全局变量,函数

从一个程序员的角度,全局变量是一个已命名的内存区域,可用于交易终端的所有工作程序。新程序员应该注意的是,如果有几个终端同时工作,它们之中的每一个都有自己独立的全局变量内存空间。它们不会重叠。

该语言的开发者在文档中规定了 11 个函数可与全局变量工作。

有关理论可以在 MQL4 教科书的 "全局变量" 章节找到。

在下一章节我将使用 面向对象编程 工具来实现设置任务。

与全局变量工作的模块阶段跟踪模式,表示在图例.8。

图例.8. 处理标志序列模式

图例.8. 处理标志序列模式

作者:Dennis Kirichenko

 

功能。创建或更改全局变量会对交易环境产生什么影响?

您能否解释一下全局变量的数值代表什么?

相当长一段时间以来,我一直在研究并试图了解终端的全局变量,尽管我还不了解它们的用法和影响。如果可能的话,能否请您举一个简单的例子,说明全局变量的创建如何对我的交易账户余额产生积极影响?

谢谢。

谢谢、

戴尔

 
MetaQuotes Software Corp.:

已发布文章:MQL5 编程基础 - 全局终端变量

作者:Dennis Kirichenko

### 假设 - 您要实现的功能

※ 请先从下面的链接中查看要使用的库文件 2。



作业:

想在 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.

//https://www.mql5.com| //

//+------------------------------------------------------------------+

#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.

//https://www.mql5.com

//+------------------------------------------------------------------+

#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 做了同样的实验,但结果没有变化。

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
The Synchronized Charts script allows comparing bars of different symbols or different periods of the same symbol. Attach the script to a chart and move bars or change the scale, all opened chart will move synchronously with the current one. The bars on different charts aligned to the border according to their open time. CreateGridOrdersTune A...
 

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 .