The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
这并不是终端全局变量的唯一用途。它们还可用于在不同的 EA 或指标之间交换信息。因此,在这种情况下,只在内存中保存数据而不在终端重启时保留数据也是一种功能。
静态部分非常有趣,我有一个问题和一个评论。
在执行 OnTick() 函数期间,可能会发生某些 EA 从图表中移除,但 Mutex_Release() 函数并未执行的情况。
为什么 EA 会被移除,而 Mutex_Release() 函数却没有被执行?如果以正常方式(关闭图表、移除 EA 或关闭终端)从图表中移除 EA,绝不会停止执行流程。我是不是漏掉了什么?
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
可以通过全局变量 的前缀来解决这个问题。
适合初学者的好文章。
The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
这并不是终端全局变量的唯一用途。它们还可用于在不同的 EA 或指标之间交换信息。因此,在这种情况下,只在内存中保存数据而不在终端重启时保留数据也是一种功能。
静态部分非常有趣,我有一个问题和一个评论。
在执行 OnTick() 函数期间,可能会发生某些 EA 从图表中移除,但 Mutex_Release() 函数并未执行的情况。
为什么 EA 会被移除,而 Mutex_Release() 函数却没有被执行?如果以正常方式(关闭图表、移除 EA 或关闭终端)从图表中移除 EA,绝不会停止执行流程。我是不是漏掉了什么?
因此,我的意见是,Mutex_Release()函数不被执行的唯一情况是 "硬 "停止、电源或硬件故障等,因此您的 mutex 全局变量完全可以使用 GlobalVariableTemp() 函数 创建为临时变量。
全局变量在策略测试期间是否有效?
例如,当指标将值存储到 GV 中并由 EA 读取时,策略测试器 是否会在模拟过程中及时获取这些值?
全局变量在策略测试期间有效吗?
例如,当指标将值存储到 GV 中并由 EA 读取时,策略测试器 是否会在模拟过程中及时获取这些值?
可以。
"当计算机突然断电时,全局变量有可能消失"。关闭 MT5 终端 bild 2361 后,我的全局变量 消失了。 GlobalVariablesFlush() 在 2 个不同的 MT5 终端上执行。胡说八道。终端是用 /portable 键启动的,也许这就是原因?
我试着手动创建,打开并关闭终端,似乎保存了。我把自动优化的结果写入了全局,而这是一个非常漫长的过程。因此,这种存储方式并不可靠。我必须添加一个程序,通过结构将全局变量写入文件。
关闭 MT5 终端 bild 2361 后,我的全局变量 消失了。 GlobalVariablesFlush() 在 2 个不同的 MT5 终端上执行。胡说八道。终端是用 /portable 键启动的,也许这就是原因?
我试着手动创建,打开并关闭终端,结果似乎是保存了。我把自动优化的结果写入了全局,这是一个非常漫长的过程。 因此,这种存储方式并不可靠。我必须添加一个程序,通过结构将全局变量写入文件。
在终端还是在测试器中?在 MT5 中是有区别的。
在终端还是在测试仪中?MT5 中存在差异。
在终端上。
总的来说,我是用以下方法解决问题的。在处理智能交易系统自动优化的类中,除了创建全局变量外,我还将相同的数据写入每个货币对的文件中(每次启动类时都会删除初步文件,因为类仅在重新计算时才会调用,所以在任何情况下都必须更新数据)。这些文件是普通文本文件,文件名是为 Expert Advisor 的特定实例编码的。在初始化过程中,EA 会调用从文件中读取优化数据的功能,并创建或更新全局变量。
这样做也很方便,因为这些文件可以备份,并在策略测试器中运行时使用(文件自然位于终端的公共文件夹中),因为测试器会创建自己的全局变量实例,而且自动优化本身就是一个漫长的过程,从文件中加载准备好的数据可以大大缩短测试时间。
你好,德米特里、
我知道你的文章已经写了好几年了,但我还是想和你分享一些东西,希望也能提出一个问题!
您提到您还没有发现 Temp 全局变量的用途。 我正在开发的东西正是需要它。 我正在绞尽脑汁想办法通过全局变量实现共享 IO 完成端口句柄,特别是在崩溃或正常重启时。 我正在设计一个使用 Windows IO 完成端口的订单处理系统。由于我们可以在 MQL5 中创建 Win32 线程,我无法在创建 IOCP 服务器时创建线程池,所以我使用服务的变通方法是:
如果终端重新启动,不管是异常还是其他原因,我都希望 IOCP 句柄在终端启动时消失,这样我就可以创建一个新的 IOCP 句柄,以便重新启动。这样实现起来会更简洁。
我还想知道,全局变量的速度有多快,可靠性有多高?
感谢您的精彩文章,读来令人受益匪浅、
谢普
新文章MQL5 编程基础:终端的全局变量 已发布:
作者: Dmitry FedoseevDmitry Fedoseev