支持MG4脚本和顾问的测试人员 - 页 3

 
AlexeyVik:
好吧,我不打算证明它是真的。对于一个不熟悉C++编程和一般OOP的人来说,它是相当复杂的,根本不是一个好的口碑或创造一个神话。虽然看起来很奇怪,但我在一个星期内就理解了这一切,并写下了我所需要的东西。这是一个完全不同的神话;这表明,即使像我这样的非专业人士也可以学习mql5。
在任何OOP中,你都可以用算法来编程,而把OOP本身只作为一个包装物。当我开始用Java编码时,我一开始也不理解OOP,但我没有看到任何特别的问题。问题出现在后面,因为要读懂算法语言的原始材料非常困难。在算法语言中使用库要难得多,因为你必须在使用它们之前把它们栓上。
 
Reshetov:
你可以在任何OOP中进行算法编程,但只把OOP作为一个包装物。当我开始用Java编码时,我一开始也不理解OOP,但我没有发现任何问题。后来出现了问题,因为要读懂算法语言的原始材料非常困难。在算法中使用库要困难得多,因为你必须在使用它们之前先把它们拧上。
尤里,你为什么要向我解释这有多容易?对一个人来说,它很简单,对另一个人来说,它非常简单,而对某个人来说,它是不可触及的。我并没有说不可能学会...我只是在谈论语言之间的差异...熟悉的和新的。
 
Renat:
完全没有不同。它们是两种相同的语言,只有一个编译器。
在这一点上,C++与JavaScript没有什么不同。这也是事实!
 
Integer:
在这一点上,C++与JavaScript也没有什么不同。这也是事实!

你不能在我们的论坛上看到其他东西。

但没有任何责任。你可以说出你喜欢的任何东西。

 
AlexeyVik:
尤里,你为什么要向我解释这有多容易?有些人发现它很简单,有些人发现它非常简单,有些人发现它无法访问。
如果没有文件,没有例子,没有文章,就很难理解。但是,当你拥有这一切的时候,你可以在论坛上就有问题的情况下提出问题,这是一个烂借口,可以说是无法使用。
 
Reshetov:
如果没有文件,没有例子,没有文章,就很难理解。但是,当这一切都在那里,而且你可以在一个论坛上就有问题的案例提出问题时,谈论不可访问性就是一个烂借口了。

走吧。就我个人而言,我可以毫无问题地掌握这种语言。但有人不能因为他的性格而这样做,你可以给他写任何东西。

我仍然不能理解你进入对话并对一个完全不同的话题表达意见的目的。

 
Renat:

你在这个论坛上没有看到的东西。

为什么,没有责任。你可以说任何事情。

是的,这就对了。特别是利用自己的优势地位的权威。

所有的语言都是一样的,除了奢侈的语言。所有这些都可以在21天内被任何傻瓜学会。所有的for、while、if、switch可能有不同的记号,但在原则上没有任何区别。重要的不是运算符的编写方式,而是语言与之互动的基础设施。在这方面,MT4和MT5是两个不同的世界。

一切的差异。从小处着手--指标中的条形图的编号,在MT4中从右到左,在MT5中从左到右。继续说更重要的一个--总的立场和贸易历史数据的组织。最大的区别在于经常需要的东西--在访问数据报价和指标的方式上,复制数据需要检查,然后从左到右索引,再从右到左索引,条形的时间要么包括在范围内,要么不包括。把CodeBase中关于iBarShift()函数 的讨论单独拿出来。

在MT4中,为确保EA的稳定运行,只需检查OrderSelect()的返回值即可,但在MT5中,有必要在每一步进行检查,甚至在最后一个tick的数据中也要检查。MT5编程也有一些微妙之处,你只有在吃过很多苦头之后才能学会,因为有很多陷阱。

 

我全心全意地支持你的意见!

扩展功能当然是件好事,但在MT5的引擎盖下,我们应该留下MT4的功能以利于兼容。当然,只有那些符合MT5交易模式框架的。

这样一来,MT4的资源将以最小的改动被移植过来。

虽然我使用MT5作为多货币测试器,但不合理的复杂函数调用让我感到厌恶。

同样的功能用于切换到MT5(https://www.mql5.com/ru/articles/81),为什么不在内核本身实现?

为什么你需要重命名函数来转换类型,例如

CharToStr - CharToString,  StrToDouble - StringToDouble

似乎是基本的,但...为改革而改革?

或者用于处理时间的函数,例如

int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

从图表中获取数据的功能

double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

这样的例子有几百个之多!

当然,MT5的功能更多,但MT4更方便!而这有时是更重要的!

 
Integer:

正是如此。特别是利用自己的优越地位的权威。

在讨论MQL4和MQL5的区别时,"C++在这方面也和JavaScript没有区别 "的说法是无稽之谈。还有人突然说了出来。

公信力是通过长期艰苦的工作赢得的。我已经履行了这一卷,我遵循我所说的。


一切都有区别。从一个小问题开始--指标中条形图的编号,在MT4中从右到左,在MT5中从左到右。继续说更重要的一个--总的立场和贸易历史数据的组织。最大的区别在于经常需要的东西--在访问数据报价和指标的方式上,复制数据需要检查,然后从左到右索引,再从右到左索引,条形的时间要么包含在范围内,要么不包含。把CodeBase中关于iBarShift()函数的讨论单独拿出来。

我们的情况真是太奇怪了。任何语言都可以在21天内被一个假人学会,但条形编号和数据访问成为一个问题。

再一次,这些语言几乎是相同的,它们只在少量的功能上有所不同,并且有一个共同的编译器。MQL4有一个过时的处理数据的方法,对于具有深入和详细历史的系统来说,这是不可接受的。在MQL4中使用新的CopyXXX函数,它就会像在MQL5中一样。


在MQL4中,为了确保EA的稳定性,只需检查OrderSelect()的返回值即可,而在MQL5中,每一步都需要检查,甚至在最后一个tick的数据接收时也要检查。MT5编程也有一些微妙之处,你必须在经历了很多打击之后才能学会,因为有很多的陷阱。

在MQL4和MQL5中,你需要到处检查函数的结果。

在MQL4中,许多交易者只是忽略了检查,并按原样接受数据。在MQL5中,他们也是这样写的,然后他们的外汇程序 在启动差价合约、期货或股票时就会崩溃,仅仅是因为作者太懒,没有检查工具的参数或数据的可用性。

 
Nemser:

尽管我使用MT5,作为一个多货币测试员,但不必要的复杂函数调用是令人厌恶的。

想一想新的数据访问功能提供了什么,以及为什么要这样做。

MetaTrader 4的历史深度有限,有独立的时间框架,并可通过开盘/高/低/收盘/时间[xxx]直接访问其符号条。这种直接访问在资源和CPU成本方面的实现非常昂贵。考虑到每个专家顾问都有自己的该数据的本地拷贝,以避免与其他专家顾问和终端本身的冲突。

随着符号数量的增加(例如,在MT5中,你可以有5 000-10 000个符号),并使用一分钟的深度历史作为所有时间框架的基础,基本上不可能使用MT4的方法。没有足够的内存,而且复制大块的数据会影响性能。这就是为什么MT5不再为每个专家自动维护一个隐藏的、昂贵的图表副本。

相反,我们已经转向了非常经济的CopyXXX函数,在这个函数中,开发者正好向本地数组请求他所需要的数据,而不是整个可用图表。接下来是最快的本地数据处理(而不是以前相当昂贵的Open/High/Low/Close/Time[xxx]),另外作者可以缓存这些数据,并在下次调用时节约使用。内存和CPU的节省是巨大的。此外,该平台本身对管理庞大的数据库特别放手--对它们的访问总是按需进行的(而不是无监督的直接访问),这允许对缓存进行灵活管理。

还应注意的是,MQL4中的Open/High/Low/Close/Time[xxx]调用的简单性仅限于当前符号和时间框架,其他符号和时间框架的所有其他数据都是使用iClose/iLow(...)函数获得的,这造成了严重的延迟。在MQL5中过渡到单一的CopyXXX函数模型,从根本上改善了这种情况,允许开发人员在一次请求中获得所需的数据块,而不需要进行多次阻塞调用(想想每次调用iClose时的锁)。


切换到MT5的功能也是如此(https://www.mql5.com/ru/articles/81),那么为什么不在内核本身实现呢?

这些不是我们的职能,这篇文章也不是。这篇文章是一套畸形的拐杖,但放出来是为了说明问题。

我已经反复解释了使用MQL5新功能的必要性,而不是那些可怕的拐杖。


为什么他们需要重新命名类型转换函数,例如

看似简单,但...为改革而改革?

这就是建立高质量语言架构的正确方法。函数名称应该是可理解的,而不是一组缩写。

新的语言和方便的自动完成功能使我们能够修改语言,使其更加简洁。


或者,比如说,时间函数 从图表中获取数据 这样的例子有数百个之多!

这些都是拐杖的例子(他们通常说 "要做带腺孔的扁桃体切除术"),不应该用来比较。

由于MQL4直接缩减为MQL5,现在MQL4有很多兼容的功能,所以理论材料已经过时了。


当然,MT5的功能更多,但MT4更方便!而这有时是更重要的!

我不同意。

MetaTrader 5在软件和语言方面都更方便用户使用。