在MT5中强制清算阵列?

 

我从来没有认真地使用过MT5,现在我一下子要把一个巨大的项目转移到它上面。自然,也有一些困难,其中之一就是阵列总是超出范围。事实证明,MT4没有这样的问题,这也是因为数组在公布后不需要特意清空。但在MT5中,这是必要的。我的技术要求逐渐填充内核,同时改变其大小。一些数组的确切大小是事先不知道的。同时,由于在数组的填充过程中,数组上有大量的循环,一切都会失去秩序。 如果单元格中没有垃圾,一切早就可以工作了。

也就是说,一方面是数组中的垃圾,另一方面是超限的关键错误。这就像一个苛刻的条件...

我想了解为什么他们要像MT4那样,取消自动清除数组,并将声明的变量 减少到零?

如果我们可以容忍变量,我们将不得不面对大数组中不断收集垃圾的问题,我们不仅要在声明时清理它们,而且还要在调整大小时清理它们......为什么?

 

出界的原因是,数组在不同的函数中逐渐被填入数值,在这个过程中,一个单元格通过另一个单元格被访问。有些函数被调用两次,并按顺序填充数组。但是,如果牢房里有垃圾,第一次填充就会出现超标。

我想这个问题可以通过提前清除数组来解决,当然,这也是一个额外的头痛问题。遗憾的是。

 
好吧,我们不要抱怨。))只是需要一些时间来适应。 ) )
 

适应它。

我总是声明一个数组,设置预期的大小,用数值填充它(初始化它)。通常情况下,用一个非零值来初始化比较好--这样更容易发现错误。

 
彼得,我不知道你是什么意思?
有一个动态数组,有这个数组的当前大小,有一个溢出控制。
就我个人而言,我尽量避免溢出控制,只在设计阶段使用,因为如果算法是合格的,没有错误,溢出就不会发生。为什么需要不必要的检查?
如果你有溢出的情况发生,请寻找错误。有中断点的调试器可以帮助你,或者没有中断点,因为当溢出发生时,程序会在调试模式下停止,你可以看一下变量。
如果有垃圾,那是你的垃圾,你还没有清理干净。
 
Реter Konow:

我从来没有认真地使用过MT5,现在我一下子要把一个巨大的项目转移到它上面。自然,也有一些困难,其中之一就是阵列总是超出范围。事实证明,MT4没有这样的问题,这也是因为数组在公布后不需要特意清空。但在MT5中,这是必要的。我的技术要求逐渐填充内核,同时改变其大小。一些数组的确切大小是事先不知道的。同时,由于在数组的填充过程中,数组上有大量的循环,一切都会失去秩序。 如果单元格中没有垃圾,一切早就可以工作了。

也就是说,一方面是数组中的垃圾,另一方面是超限的关键错误。这就像一个苛刻的条件...

我想了解为什么他们要像MT4那样,取消自动清除数组,并将声明的变量 减少到零?

如果我们可以容忍变量,我们将不得不面对大数组中不断收集垃圾的问题,我们不仅要在声明时清理它们,而且还要在调整大小时清理它们......为什么?

一开始也遇到了类似的困难。

在我看来,数组是以特定的方式填充的,这一点应该在循环中经常被考虑到。

 
Nikolai Semko:
彼得,我不知道你是什么意思?

都是一样的https://www.mql5.com/ru/forum/293630/page179#comment_10802823

现在是MQL5的错......;)

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2019.02.28
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu:

都是一样的https://www.mql5.com/ru/forum/293630/page179#comment_10802823

现在是MQL5的错......;)

没错,我不习惯MQL4。
什么,真的,不需要控制溢出吗?但这很糟糕。你如何捕捉错误?
 
Nikolai Semko:
是的,我不习惯MQL4。
什么,真的没有必要控制溢出?但这很可怕,不是吗?我怎样才能抓住错误?

尼古拉,不要担心MQL4,那里一切都很好。课题发起人按照自己的意愿填入数组。就这样了。

 
Nikolai Semko:
嗯,是的,我不习惯MQL4。
什么,真的没有必要控制溢出?但这很可怕,不是吗?你如何捕捉错误?

你当然会这样做。

任何尊重自己和自己的程序的程序员都不会让事情溜走。在MQL4中,如果你不使用#property strict,你可以通过索引20来引用一个大小为10的数组。而什么也不会发生--程序将继续工作,但要由程序员决定下一步使用什么。如果他很聪明,他肯定会检查和控制一切,以免得到数组 以外的值,但如果他 "粗略地 "做,他不会考虑这种控制,"主要是它的工作,但它如何工作--不知何故......"。
大多数用户,没有理会这一点,一直在抱怨 "糟糕、邪恶和复杂的MQL5",因为它不允许他们像以前一样伪造自己的创作。但是,那些最初认为并创建了具有检查和控制接收数据的代码的人,没有注意到语言的复杂性有什么不同,现在想知道--"复杂性在哪里--是一样的......"。

 
Реter Konow:

我从来没有认真地使用过MT5,现在我一下子要把一个巨大的项目转移到它上面。

重写数组时的严重差异

关于交易、自动交易系统和交易策略测试的论坛

mql4语言的特点、微妙之处以及技巧

fxsaber, 2019.02.12 13:12

用于多维数 组的ArrayResize的特点
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
原因: