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

 
Artyom Trishkin:
这不是好事。你是否在编译时可能得到警告?在这种情况下,你需要摆脱导致警告的原因,而不是#属性严格#。
在写#property strict的时候,编译器在每个for()循环中都给出错误,说变量必须有一个类型,所以我不得不在每个循环中写int i和int p。此后,编译器没有产生错误,但该行没有构建。当我删除#property strict后,编译器不再需要在每个周期中声明类型,这一行就被构建了。
 

我已经给我的余额充值了,现在我找不到真实账户 的终端了。

 
Timur1988:
当#property strict被拼出来的时候,编译器在每个for()循环中都会产生错误,认为变量必须有一个类型,所以我不得不在每个循环中拼出int i和int p。此后,编译器没有产生错误,但该行没有构建。当我删除#property strict时,编译器不要求在每个循环中声明类型,这一行就被构建了。

一个利用逻辑中隐含错误的典型案例。一旦编译器变得 "更严格",自欺欺人的情况就会慢慢消失。

我在想为什么会有这么多相同的循环?

还有,当在图表上 运行指标 时,你为什么不以任何方式去理会 "超出阵列"的错误?

例如,这里。

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }
 
7u6y5t4r3e2w1q:

我已经给我的余额充值了,现在我找不到真实账户 的终端了。

终端是一样的,你只需要重新登录到一个真正的账户。如何做:文件 - 连接到交易账户 - 在出现的窗口中指定账户号码、密码和服务器。所有这些数据都是由区政府提供的,如果有什么问题可以问他们。
 
Timur1988:
当#property strict被拼出来的时候,编译器在每一个for()循环中都会给出错误,说变量必须有一个类型,所以我不得不在每一个循环中拼出int i和int p。此后,编译器没有产生错误,但该行没有构建。当我删除#property strict后,编译器不再需要在每个周期中声明类型,这一行就被构建了。

答案很简单--你有一个微不足道的数组 超限--你的指标因为这个错误而停止工作。

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

你可以在运行时看到这个错误--启动指标并在终端--专家标签上查看日志文件。

 
Vitalie Postolache:

这是一个利用隐性逻辑错误的典型案例。

重写一个数组 是一个严重的逻辑错误--而且不能把这样的错误称为 "隐含"。
 
Vitalie Postolache:

一个利用逻辑中隐含错误的典型案例。一旦编译器变得 "更严格",自欺欺人的情况就会慢慢消失。

我一直在想,为什么会有这么多相同的循环?

还有,当在图表上 运行指标 时,你为什么不以任何方式去理会 "超出阵列"的错误?

例如,这里。

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }


如何计算每个维度的收盘价之和?
至于同样的周期,由于我对编程和算法的知识有限,我没有想到有什么更好的办法来从所需的维度中选择数组的元素,这对于公式中的替换是必要的。
 
Andrey F. Zelinsky:

答案很简单--你有一个微不足道的数组 超限--你的指标因为这个错误而停止工作。

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

你可以在执行阶段看到这个错误 - 启动指标并在终端选项卡上查看日志文件 - 专家。

你能告诉我如何解决这个错误吗?
 
Timur1988:
那么你如何计算每个维度的收盘价之和呢?
至于同样的周期,由于我对编程和算法的知识有限,我想不出有什么更好的办法来从所需的维度中选择数组中的 那个元素,而这是需要在公式中替代的。

例如,像这样。

     for(int i=1; i<n; i++)

      {    
      for(int p=1; p<m; p++)
         {   
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }         
      }
 
Timur1988:
你能告诉我如何解决这个错误吗?

为了纠正这个错误,你需要了解你的公式--什么、为什么和如何计算。

也只有这样,你才能算出你的算法,消除错误

通过 "直觉 "方法和不理解你的公式--你会消除错误,但你会做出错误的计算。

p.s. 详细解释你正在计算的内容--详细注释你的代码--然后我们就会明白如何解决这个错误。

原因: