新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 563

 
Roman Sharanov:

并从指标、图表中获取数据?

一切皆有可能。但要做到这一点,你至少需要熟练掌握这两种语言。

 
Artyom Trishkin:

一切皆有可能。但要做到这一点,你至少需要熟练掌握这两种语言。

我拥有

 
Roman Sharanov:

我拥有

那么你在编写跨平台代码时应该不会有任何问题。

 

有趣的情况

一行代码,有时会导致下面的错误。

在什么条件下会出现这种错误?


   ChartTimePriceToXY(0,0,Time[0],price,x1,y_cord);


2018.06.08 13:41:39.021    program name XAUUSDcheck,H1: array out of range in 'DrawInterfaceLib.mqh' (47,31)


 
Sergey Likho:

有趣的情况

一行代码,有时会导致下面的错误。

在什么条件下会出现这种错误?


超出阵列的范围。传入数组的索引要么大于数组的最大尺寸(如果数组是10,那么这样一个数组的最大索引=9,因为其第一个元素的索引是0),要么小于0。要么阵列的大小为零。

 
Artyom Trishkin:

超出了阵列的范围。传入数组的索引要么大于数组的最大尺寸(如果数组的尺寸为10,这样的数组的最大索引=9,因为其第一个元素的索引为0),要么小于零。要么阵列的大小为零。

谢谢你,当然,我知道。

在访问Time[0] 数组时,在什么条件下会发生这个错误

那么阵列是零?而时间序列怎么会是这样的呢?

 
Sergey Likho:

有趣的情况

一行代码,有时会导致下面的错误。

在什么条件下会出现这种错误?

旧的MT4错误(时间阵列似乎是零大小)。大约两年前,它不断出现在我的一个客户身上。但要重现这个错误似乎是不真实的。服务台承认这个问题,但无法解决这个问题。从那时起,我从不使用直接访问时间序列,只通过iTime、iOpen等。

 
Ihor Herasko:

旧的MT4错误(时间阵列似乎有一个零大小)。大约两年前,它不断出现在我的一个客户身上。但事实证明,重现这个错误是不真实的。服务台承认该问题,但无法解决。从那时起,我从不使用直接访问时间序列,只通过包装器:iTime、iOpen等。

是的,这就是我最后所做的,用iTime 代替。谢谢!

 

你好。出界,如何解决?

 if(TimeFrame>Period()) 
     {
      ArrayCopySeries(santa1,5,Symbol(),TimeFrame);
      summ=CountBars+TimeFrame/Period();
      shift=0;
      for(int iy=0; shift<summ; shift++) 
        {
         if(Time[shift]<santa1[iy]) iy++;//вот эта строка "array out of range" 
         list[shift]=bufbuy[iy];
        }
     }
 
PolarSeaman:

你好。出界,如何解决?

上述代码中shift和iy变量的值没有被检查是否超出了Time和santa1数组。因此,这是有道理的。在使用前检查它们的值,错误就会消失。

而且更具体地说,你需要知道CountBars和TimeFrame变量是如何生成的。

原因: