[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 131

 
Vinin:

Suite du thème

Précédent ici https://www.mql5.com/ru/forum/111497

Dans le testeur MT4, dans les résultats d'optimisation et les graphiques d'optimisation, rien n'est affiché, juste vide. Au secours !
 
Sergey_Rogozin:

J'essaie de remplir un tableau unidimensionnel ValueArr[].

Je ne suis pas sûr que ce soit correct.

À chaque tic-tac, la fonction GetValue() produit une valeur int. Comment remplir ValueArr[]?

Ma tentative est-elle correcte ?

La taille du tableau doit être augmentée de un à chaque tic ? Sa taille sera alors limitée par la mémoire disponible de l'ordinateur.

Augmentez la taille du tableau ValueArr[] à l'aide de la fonction ArrayResize() et ajoutez les nouvelles données dans le tableau. Encore une fois - où voulez-vous les ajouter ? Au début ou à la fin ?

Si au début, vous devez déplacer les données précédemment écrites, sinon elles seront écrasées par les données nouvellement écrites.

Si à la fin, alors :

On définit d'abord la taille du tableau = zéro, et au départ on l'augmente de 1 (taille++), puis on redimensionne le tableau ( ArrayResize(ValueArr, taille) ;) et on écrit les données dans la cellule ValueArr[] indexée par taille-1 (ValueArr[taille-1]), obtenue par GetValue() ; (ValueArr[taille-1]=GetValue() ;).

 
artmedia70:

Voulez-vous que la taille du tableau augmente d'une unité à chaque tic ? Sa taille sera alors limitée par la mémoire disponible de l'ordinateur.

À chaque tick, augmentez la taille du tableau ValueArr[] à l'aide de la fonction ArrayResize() et ajoutez de nouvelles données dans le tableau. Encore une fois - où voulez-vous les ajouter ? Au début ou à la fin ?

Si au début, vous devez déplacer les données précédemment écrites, sinon elles seront écrasées par les données nouvellement écrites.

Définissez d'abord la taille du tableau = zéro, et au début augmentez-la de 1 (taille++), puis redimensionnez le tableau ArrayResize(ValueArr, taille) ; et ajoutez les données obtenues par la fonction GetValue() dans la cellule du tableau ValueArr[] indexée par la taille-1 (ValueArr[taille-1]) ;

Oui, les données de GetValue() seront écrites à chaque tick dans le tableau ValueArr[].

La taille du tableau est augmentée à chaque tic, mais elle peut être définie en une seule fois, par exemple [10000].


Leséléments du tableau sont disposés dans l'ordre d'arrivée, c'est-à-dire que le premier élément écrit est le premier dans la "file d'attente générale",

le deuxième élément est le deuxième dans la file d'attente.


Si j'ai bien compris, cela ressemble à ceci :


 int size=0;
 int ValueArr[size];
 
//-----------------

int start()
 {
   size++;
   ArrayResize(ValueArr, size);
   ValueArr[size-1] = GetValue();
   
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

J'espère vous avoir bien compris.

 
Sergey_Rogozin:

Les éléments du tableau sont classés par ordre d'arrivée, c'est-à-dire que le premier écrit est le premier dans la "file d'attente générale",

pourquoi ne pas utiliser un tableau chronologique
 
eddy:
pourquoi ne pas utiliser un tableau chronologique ?
Une série chronologique ? Est-ce que cela pourrait aider à enregistrer quelque chose comme l'histoire du teck?
 
Sergey_Rogozin:

J'essaie de remplir un tableau unidimensionnel ValueArr[].

Je ne suis pas sûr que ce soit correct.

À chaque tic-tac, la fonction GetValue() produit une valeur int. Comment remplir ValueArr[]?

Ma tentative est-elle correcte ?

Alors
 int ValueArr[size]; 

vous ne pouvez pas. Lorsque vous déclarez un tableau, vous pouvez soit spécifier une constante comme taille, soit rien, et le tableau est alors considéré comme dynamique.

La méthode correcte est la suivante

int ValueArr[]; 

int init()
{
   ArrayResize(ValueArr,size);
}
 
teck - non
 

Veuillez me conseiller ! Existe-t-il une fonction dans MT4, qui prendrait en compte le résultat d'une transaction précédente pour en ouvrir une nouvelle ? Si oui, comment puis-je le spécifier correctement ?

 
sto_mat:

Veuillez me conseiller ! Existe-t-il une fonction dans MT4, qui prendrait en compte le résultat d'une transaction précédente pour en ouvrir une nouvelle ? Si oui, comment puis-je le spécifier correctement ?


Il n'y a pas de telle fonction intégrée, vous devez l'écrire vous-même, j'ai montré un exemple ici: https://www.mql5.com/ru/forum/131277/page113.
 
alsu:
C'est...

tu ne peux pas. Lors de la déclaration d'un tableau, soit une constante est spécifiée comme taille, soit rien, et le tableau est alors considéré comme dynamique.

La méthode correcte est la suivante


Alors je suppose que c'est tout :

 int size, ValueArr[]; 
//-----------------
 int init()
 {
   ArrayResize(ValueArr,size);
 }
//-----------------

int start()
 {
   ValueArr[size-1] = GetValue();
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

C'est bien ça ?

Raison: