Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 18

 
Artyom Trishkin:
Esto no es bueno. ¿Probablemente te aparezcan advertencias en tiempo de compilación? En estos casos hay que deshacerse de las causas de las advertencias, no de la #propiedadestricta
Cuando se escribió #property strict, el compilador daba errores en cada bucle for() de que las variables debían tener un tipo, así que tenía que escribir int i e int p en cada bucle. Después de eso el compilador no generó errores, pero la línea no se construyó. Cuando eliminé #property strict, el compilador ya no requirió declarar el tipo en cada ciclo, y la línea se construyó.
 

He recargado mi saldo y ahora no encuentro el terminal con la cuenta real.

 
Timur1988:
Cuando se deletrea #property strict, el compilador genera errores en cada bucle for() que las variables deben tener un tipo, por lo que tenía que escribir int i e int p en cada bucle. Después de eso el compilador no generó errores, pero la línea no se construyó. Cuando eliminé #property strict, el compilador no requirió declarar el tipo en cada bucle, y la línea se construyó.

Un caso típico de aprovechamiento de errores implícitos en la lógica. Una vez que el compilador se ha vuelto "más estricto", el autoengaño va desapareciendo poco a poco.

Me preguntaba por qué había tantos bucles idénticos.

¿Y por qué no se molesta de ninguna manera con el error "out of array" al ejecutar el indicador en el gráfico?

Por ejemplo, aquí:

    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:

He recargado mi saldo y ahora no encuentro el terminal con la cuenta real.

El terminal es el mismo, sólo tienes que volver a iniciar sesión con una cuenta real. Cómo hacerlo: Archivo - Conectarse a la cuenta de comercio - especificar el número de cuenta, la contraseña y el servidor en la ventana que aparece. Todos estos datos fueron dados por el DC, en caso de que se les pregunte algo.
 
Timur1988:
Cuando se deletrea #property strict, el compilador da errores en cada bucle for() de que las variables deben tener un tipo, por lo que tuve que deletrear int i e int p en cada bucle. Después de eso el compilador no generó errores, pero la línea no se construyó. Cuando eliminé #property strict, el compilador ya no requirió declarar el tipo en cada ciclo, y la línea se construyó.

la respuesta es muy simple - usted tiene un rebasamiento de matriz trivial - y su indicador deja de funcionar debido a este error

    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);

puede ver este error en tiempo de ejecución - inicie el indicador y mire el archivo de registro en la pestaña Terminal - Expertos:

 
Vitalie Postolache:

Este es un caso típico de explotación de errores lógicos implícitos. ...

Sobrescribir un array es un grave error de lógica -- y no se puede llamar a tal error "implícito".
 
Vitalie Postolache:

Un caso típico de aprovechamiento de errores implícitos en la lógica. Una vez que el compilador se ha vuelto "más estricto", el autoengaño desaparece lentamente.

Me preguntaba, ¿por qué hay tantos bucles idénticos?

¿Y por qué no se molesta de ninguna manera con el error "out of array" al ejecutar el indicador en el gráfico?

Por ejemplo, aquí:

    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];
         }        
      }


¿Cómo calcular la suma de los precios de cierre en cada dimensión?
En cuanto a los mismos ciclos, yo, debido a mis limitados conocimientos de programación y algoritmos, no he pensado en nada mejor para seleccionar el elemento de la matriz de la dimensión requerida, que era necesario para la sustitución en la fórmula.
 
Andrey F. Zelinsky:

la respuesta es muy simple - usted tiene un rebasamiento de matriz trivial - y su indicador deja de funcionar debido a este error

    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);

puede ver este error en la etapa de ejecución - inicie el indicador y mire el archivo de registro en la pestaña Terminal - Expertos:

¿Podría decirme cómo solucionar este error?
 
Timur1988:
Entonces, ¿cómo se calcula la suma de los precios de cierre en cada dimensión?
En cuanto a los mismos ciclos, debido a mis limitados conocimientos de programación y algoritmos, no se me ocurrió nada mejor para seleccionar ese elemento del array de la dimensión deseada, que era necesario sustituir en la fórmula.

Por ejemplo, así:

     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:
¿Pueden decirme cómo solucionar este error?

Para corregir este error, hay que entender la fórmula: qué, por qué y cómo se cuenta.

Y sólo entonces podrás elaborar tu algoritmo y eliminar el error fuera de la matriz.

Con el método de la "corazonada" y sin entender su fórmula, eliminará el error, pero hará un cálculo erróneo.

p.d. Explique detalladamente lo que está calculando -- comente su código en detalle -- y entonces entenderemos cómo solucionar el error.