错误、漏洞、问题 - 页 512

 
Neofit:
设置数组的大小。ArrayResize
 
Neofit:

请告诉我如何正确使用一个元素为Mqlrates结构 的数组。

这正是我想知道的。

MqlRates AdaptedRates[];

ArraySetAsSeries(AdaptedRates,true); 

AdaptedRates[300].open=1;

调试器给出一个错误 - 无效的数组访问。

我理解,使用这种记录形式,我们只能读取 一个结构的元素,而这个结构是一个数组的元素。

问题是如何正确书写 结构元素。我对所有这些都不感兴趣。 重要的是.open.high.low.close的价格。

我提前对一个可能非常平庸的问题表示歉意(我一般不是程序员),但在帮助我没有找到答案。我将感谢任何帮助。

你正在使用一个动态数组AdaptedRates[]。在我的印象中,当使用动态数组时,其大小应使用ArrayResize()函数来设置。但到目前为止,编译器对第三行的索引300进行了抱怨。
 
Swan:
设置数组的大小。ArrayResize
据我所知,如果我设置了大小,例如
MqlRates AdaptedRates[302];  
,我就不能把索引的类型设置为系列。
 
Neofit:
据我所知,如果我定义大小,例如
MqlRates AdaptedRates[302];  
,我就不能把索引类型设置为系列。

:)你不是在设置静态数组,而是用ArrayResize() 设置动态数组的大小。

嗯,比如:ArrayResize(AdaptedRates,302); 等等。

 
Yedelkin:
你正在使用一个动态数组AdaptedRates[]。在我的印象中,在处理动态数组时,你应该用ArrayResize()函数来设置它们的大小。到目前为止,编译器在第三行中指定的索引300上崩溃了。
静态数组不能表示为时间序列,也就是说,ArraySetAsSeries()函数,即设置从数组的末端到开始的数组元素的访问,不适用于它们。如果你想提供对数组的访问,如在时间序列中,使用一个动态数组对象

这是帮助中的一段话。

Swan,Yedelkin谢谢你这么快的反应。

 
Neofit:
据我所知,如果我定义了一个尺寸,比如说
MqlRates AdaptedRates[302];  
,我就不能把索引类型设置为系列。

是的。

MqlRates AdaptedRates[];//因此,让数组保持动态。

ArrayResize(AdaptedRates,302);//并设置正确的大小。

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
Yedelkin:

:)你不是设置一个静态数组,而是用ArrayResize() 设置一个动态数组

嗯,像ArrayResize(AdaptedRates,302); 等。

谢谢你的通俗解释,据我所知,在对动态数组单元的任何引用之前,最好将其ArrayResize到所需的限度,我将尝试一下
 
pusheax:

策略测试器中 的一个小故障。

它突然停止了,所有本地和远程代理都完成了,于是挂掉了。

你能告诉我如何重新开始吗,重头再来很可惜。
我经常这样做:-)更糟糕的是,当它发生在晚上时,它一直开着,直到我醒来:-)
 
Neofit:
谢谢你的通俗解释,据我所知,在对动态数组单元的任何引用之前,最好将其ArrayResize到所需的限度,我将尝试一下

请注意。只有对指示器缓冲区 来说,这就不需要做了。终端的执行子系统自己处理这个问题。

注2:ArrayResize()最好只在有必要改变动态数组的大小时应用,而不是在对其元素进行任何访问之前很可能一个动态数组将被赋予一次大小,然后程序将简单地访问其项目。

 
Yedelkin:

请注意。只有对指示器缓冲区 来说,这就不需要做了。终端的执行子系统自己处理这个问题。

注2:ArrayResize()最好只在有必要改变动态数组的大小时应用,而不是在对其元素进行任何访问之前很可能一个动态数组将被分配一次大小,然后程序将简单地访问其元素。

好吧,我这么说就太傻了,其实我明白,如果我已经把一个动态数组扩展到了302,我就可以不通过ArrayResize来访问0到301的任何元素。