Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 18

 
Artyom Trishkin:
Ce n'est pas très bon. Avez-vous probablement obtenu des avertissements au moment de la compilation ? Dans de tels cas, vous devez vous débarrasser des causes des avertissements, pas de la #propriété stricte.
Lorsque #property strict a été écrit, le compilateur a donné des erreurs dans chaque boucle for() que les variables doivent avoir un type, donc j'ai dû écrire int i et int p dans chaque boucle. Après cela, le compilateur n'a pas généré d'erreurs, mais la ligne ne s'est pas construite. Lorsque j'ai supprimé #property strict, le compilateur n'a plus eu besoin de déclarer le type dans chaque cycle, et la ligne a été construite.
 

J'ai rechargé mon solde et maintenant je n'arrive pas à trouver le terminal avec le vrai compte.

 
Timur1988:
Lorsque #property strict était écrit en toutes lettres, le compilateur générait des erreurs dans chaque boucle for() indiquant que les variables devaient avoir un type, et je devais donc écrire int i et int p dans chaque boucle. Après cela, le compilateur n'a pas généré d'erreurs, mais la ligne ne s'est pas construite. Lorsque j'ai supprimé #property strict, le compilateur n'a pas eu besoin de déclarer le type dans chaque boucle, et la ligne a été construite.

Un cas typique d'exploitation d'erreurs implicites de logique. Une fois que le compilateur est devenu plus "strict", l'auto-illusion disparaît lentement.

Je me demandais pourquoi il y avait tant de boucles identiques ?

Et pourquoi ne vous préoccupez vous pas du tout de l'erreur "out of array" lorsque vous exécutez l'indicateur sur le graphique?

Par exemple, ici :

    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:

J'ai rechargé mon solde et maintenant je n'arrive pas à trouver le terminal avec le vrai compte.

Le terminal est le même, vous devez juste vous reconnecter à un compte réel. Comment faire : Fichier - Se connecter au compte de trading - spécifier le numéro de compte, le mot de passe et le serveur dans la fenêtre qui apparaît. Toutes ces données ont été données par le DC, au cas où quelque chose les demanderait.
 
Timur1988:
Lorsque #property strict a été épelé, le compilateur a donné des erreurs dans chaque boucle for() que les variables doivent avoir un type, et donc j'ai dû épeler int i et int p dans chaque boucle. Après cela, le compilateur n'a pas généré d'erreurs, mais la ligne ne s'est pas construite. Lorsque j'ai supprimé #property strict, le compilateur n'a plus eu besoin de déclarer le type dans chaque cycle, et la ligne a été construite.

la réponse est très simple - vous avez un dépassement de tableau trivial - et votre indicateur cesse de fonctionner à cause de cette erreur.

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

vous pouvez voir cette erreur au moment de l'exécution - démarrez l'indicateur et regardez le fichier journal dans le Terminal - onglet Experts :

 
Vitalie Postolache:

C'est un cas typique d'exploitation d'erreurs logiques implicites. ...

La surcharge d'un tableau est une erreur de logique grossière - et on ne peut pas appeler une telle erreur "implicite".
 
Vitalie Postolache:

Un cas typique d'exploitation d'erreurs implicites de logique. Une fois que le compilateur est devenu plus "strict", l'auto-illusion disparaît lentement.

Je n'arrêtais pas de me demander pourquoi il y avait autant de boucles identiques.

Et pourquoi ne vous préoccupez vous pas du tout de l'erreur "out of array" lorsque vous exécutez l'indicateur sur le graphique?

Par exemple, ici :

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


Comment calculer la somme des prix de clôture dans chaque dimension ?
Quant aux mêmes cycles, je n'ai pas trouvé mieux, en raison de ma connaissance limitée de la programmation et des algorithmes, pour sélectionner l'élément du tableau à partir de la dimension requise, ce qui était nécessaire pour la substitution dans la formule.
 
Andrey F. Zelinsky:

la réponse est très simple - vous avez un dépassement de tableau trivial - et votre indicateur cesse de fonctionner à cause de cette erreur.

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

vous pouvez voir cette erreur au stade de l'exécution - lancez l'indicateur et regardez le fichier journal dans l'onglet Terminal - Experts :

Pourriez-vous me dire comment corriger cette erreur ?
 
Timur1988:
Ensuite, comment calculer la somme des prix de clôture dans chaque dimension ????
Pour ce qui est des mêmes cycles, en raison de mes connaissances limitées en matière de programmation et d'algorithmes, je n'ai rien trouvé de mieux pour sélectionner l'élément du tableau de la dimension souhaitée, qui était nécessaire pour le substituer dans la formule.

Par exemple, comme ceci :

     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:
Pouvez-vous me dire comment corriger cette erreur ?

Pour corriger cette erreur, vous devez comprendre votre formule - ce que vous comptez, pourquoi et comment.

Ce n'est qu'alors que vous pourrez élaborer votre algorithme et éliminer l ' erreur.

En utilisant la méthode de l'intuition et en ne comprenant pas votre formule, vous éliminerez les erreurs, mais vous ferez un mauvais calcul.

p.s. Expliquez en détail ce que vous calculez -- commentez votre code en détail -- et alors nous comprendrons comment réparer l'erreur.