Questions des débutants MQL5 MT5 MetaTrader 5 - page 687

 

Comment puis-je savoir pourquoi cette construction ne fonctionne pas ?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
Une erreur est signalée dans '**.mq5' (13,10) : le tableau est hors de portée.
Si je remplace la chaîne double buf[] ; par double buf[10] ; alors il n'y a pas de sortie en dehors du tableau.
 
ivanivan_11:

Pouvez-vous me dire pourquoi cette construction ne fonctionne pas ?

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   for(int i=0; i<10; i++)
     {
      buf[i]= i;
     }
  }
signale une erreur array out of range dans '**.mq5' (13,10)
si je remplace la chaîne double buf[] ; par double buf[10] ; alors il n'y a pas de sortie de tableau.

Soit le double buf[10] ;

Ou double buf[] ;, mais alors nécessairement ArrayResize(buf,10) ;

 
Artyom Trishkin:

Soit le double buf[10] ;

Soit double buf[] ;, mais alors obligatoirement ArrayResize(buf,10) ;

Merci.

Je peux vous expliquer autre chose ?

Par exemple, si j'initialise un tableau et que je le remplis ensuite dans la boucle, sa taille augmentera à chaque itération et je devrai redéfinir sa taille ? Je pensais que cela se faisait automatiquement, quel que soit le nombre d'éléments que j'y ajoute.

Si je le remplis immédiatement avec un certain nombre d'éléments, je n'ai pas besoin de faire cette procédure.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }
 
ivanivan_11:

Merci.

Je peux être plus clair ?

Par exemple, si j'initialise un tableau et que je le remplis dans la boucle, sa taille augmentera à chaque itération, et je devrai redéfinir sa taille ? Je pensais que cela se faisait automatiquement, quel que soit le nombre d'éléments que j'y ajoute.

et si je le remplis immédiatement avec un certain nombre d'éléments, je n'ai pas besoin de faire une telle procédure.

void OnStart()
  {
//---
   double buf[];
   ArrayInitialize(buf,0);
   int closed1=CopyClose("EURUSD",NULL,0,3,buf);
  
  }

La fonction CopyXXXX() remplace automatiquement la taille du tableau qui lui est passé.

Si vous remplissez vous-même le tableau, s'il est dynamique, c'est au programmeur de s'assurer qu'il a la bonne taille.

Vous pouvez, lorsque vous déclarez un tableau, le rendre

  • un tableau dynamique, auquel cas c'est à vous de redéfinir sa taille.
  • non-dynamique : buff[5] - dans ce cas vous devez l'initialiser avec les bonnes valeurs
  • non dynamique : buff[]={10,20,30,40,50} ; - dans ce cas, il est initialisé avec les valeurs à la déclaration
 
Artyom Trishkin:

La fonction CopyXXXX() remplace automatiquement la taille du tableau qui lui est passé.

Si vous remplissez vous-même le tableau, s'il est dynamique, c'est au programmeur de s'assurer qu'il a la bonne taille.

Vous pouvez, lorsque vous déclarez un tableau, le rendre

  • un tableau dynamique, auquel cas c'est à vous de redéfinir sa taille.
  • non-dynamique : buff[5] - dans ce cas vous devez l'initialiser avec les bonnes valeurs
  • non-dynamique : buff[]={10,20,30,40,50} ; - dans ce cas, il sera initialisé avec les valeurs que vous déclarez
merci pour la clarification
 
Qui sait ce que signifient les chiffres du graphique d'exécution dans l'optimisation génétique ? Il y a deux nombres, par exemple 0,637 ou 7,27. Et comment choisir la bonne course. Par exemple, je suis intéressé par le numéro de série 5381. Comment le choisir ?
 
qui sait quel est le signe entre les crochets ?GHPR=(BalanceClose/BalanceOpen)^(1/N)
 
Roma Ivanov:
qui sait quel est le signe entre les crochets ?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Opération OU exclusif par bit
 

Vraiment ? Vraiment ?

J'ai toujours pensé que(^) était une exponentiation.

 
Roma Ivanov:
qui sait quel est le signe entre les crochets ?GHPR=(BalanceClose/BalanceOpen)^(1/N)
Conversion des diplômes.
Raison: