序幕:
MQL4 的世界不断发展。人们可能会试图规避这一事实,但最终,令自己失望的是,试图避免进化的尝试迟早会徒劳无功。
由于需要重新设计跨越几个人*几十年的代码库,我可以告诉你很多关于什么有效,什么无效的故事。
一个“旧代码”v/sa新-MQL4.56789
如果只应该从中汲取一点,永远不要试图“规避”New-MQL4,而是审查代码并重构“旧代码”——这是一种更安全的生存方式(更长的时间)。
是的,有机会(零保证,暂时只剩下几个机会)新的编译器版本将仍然能够生成代码的可执行版本,但鉴于一套新的规则已经出现在城市中,游戏不会持续很长时间。
Ad 1 + 2 )
编译器仍然允许多个声明,但不在一个范围内
如果新版本的编译器定义了任何变量的声明仅与它的有效性范围相关,那么认真的程序员应该将此作为一般原则。上面的代码实际上还有其他问题,与有效范围有关:
2 ...
3 if ( 1 == 2 ) {
4 ...
5 double myVar = 1; // myVar declared & known |since HERE >
6 ... // masking any other,|known HERE :
7 ... // |known HERE :
8 } else // |till HERE . Undef further
9 {
10 ...
11 double myVar = 2; // myVar declared & known |since HERE >
12 // masking any other,|known HERE :
13 ... // |known HERE :
14 } // |till HERE . Undef further
因此,如果有任何_global_
具有相同名称的作用域变量myVar
,则在存在本地声明的变量时,它不会是“可见的”,具有相同的名称。
最后,如果代码执行从第 8 行或第 14 行中的任何一个进一步逃脱,本地声明的变量double myVar
就不再存在,并且这种行为基本上是正确的(并且“旧”编译器版本容忍了一种危险的习惯副作用,在多年来容忍有效范围溢出的情况下,因此是时候清理规则,以达到相当水平的 C/S 标准。
广告 3) 语言从 MQL5 中获得了很多,即使在 MQL4 中没有使用
是的,MetaEditor 会正确地将 MQL4 代码编译成.mq4
代码执行格式,这里没有问题。甚至自动更新过程也开始独立于 MT4 终端平台(自动)更新(因此您会经常看到新的帮助文件出现并强制将所有本地主机可见.MQ4
资产重新编译为更新.EX4
格式,所以“不要惊慌。 ”
最好永远不要安装与经纪商无关的 MT4,始终前往您的经纪商支持并从您的经纪商处获取安装包和帮助。这是您在合同中签署的业务关系,因此请保留这些字符串,因为您将在他们根据设定的条款和条件操作的桌子上交易您的资金。一些经纪人有平台定制的手段,所以宁愿从他们的定制设置中受益,这将与他们的服务器端自动化相匹配。
这更多的是研发工作的经济性问题。(可以在 IDE 编辑器 MQL4 帮助中阅读大量关于从 MQL5 域注入的语言组件)。这是产品设计策略的自然意志,不是双线加倍努力。毫无疑问,帮助文件有很多细节可以改进和更好地维护,这里的常识是接受事实并重新了解哪些新引入的功能对 MQL4 代码库保持中立,以及哪些新事物可能真正帮助一个人在很多方面,旧的编译器能力不足。
如果有人认为某些编译器/平台重新设计步骤不好,我会同意单线程、平台关键、潜在阻塞、集中CustomIndicator
在一个 SPoF 线程中执行所有 -s。
但是 C'est La Vie,在系统架构师不会审查此 SPoF 之前,该平台将仍然容易受到此功能崩溃的影响,但球在球场的另一侧,必须在那里进行更改。