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

 
ANDREY:

J'ai ajouté des crochets void PrintArray(double &eArray[]) Le compilateur n'a montré aucune erreur ou avertissement.
MAIS..... la fonction Print() n'a pas imprimé une seule fois pour une raison quelconque.

Je comprends votre paresse, car je suis moi-même comme ça. Si vous n'êtes pas trop paresseux et que mon enthousiasme le remplace, je vous serai reconnaissant de me dire ce qui ne va pas avec la fonction personnalisée.

Merci pour votre aide et désolé pour le dérangement.

Peut-être que le tableau est vide ? Vérifiez-le en changeant un peu la fonction

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }
S'il affiche 0, recherchez un problème dans le remplissage du tableau.
 
Alexey Viktorov:

void PrintArray(double &eArray)
   {
   int eSize=ArraySize(eArray);
   string eStr="Размер массива "+eSize+" : ";
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

J'ai trouvé une erreur. Dans la dernière lignePrint(str) ;,vous avez passé str au lieu deestr. Je l'ai réparé et tout est rentré dans l'ordre.

Grâce à vous, j'ai maintenant compris ce sujet non seulement dans les grandes lignes, mais aussi dans les détails. La seule question sans réponse concernait les points positifs de mon message.

Merci pour votre aide et votre soutien.

 
Maxim Kuznetsov:

sur le forum et dans les publications sur C#, Delphi et tout le reste...

Je n'ai jamais fait ça, est-ce que quelqu'un peut faire un lien pour les "nuls" ?
 
ANDREY:

J'ai trouvé une erreur. Dans la dernière lignePrint(str) ;, vous avez passé str au lieu deestr. Je l'ai réparé et tout est rentré dans l'ordre.

Grâce à vous, j'ai maintenant compris ce sujet non seulement dans les grandes lignes, mais aussi dans les détails. La seule question sans réponse concern ait les points positifs de mon message.

Merci pour votre aide et votre soutien.

Ce n'est pas moi qui l'ai transmis,

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Toutes questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.

Aleksei Stepanenko, 2021.03.13 09:04

Print("-LoY[0]-", DoubleToString(LoY[0],4), "---LoY[1]--", DoubleToString(LoY[1],4), "---LoY[2]--" , DoubleToString(LoY[2],4), "---LoY[3]--" , DoubleToString(LoY[3],4),................  "---LoY[30]--" ,  DoubleToString(LoY[30],4) );

Vous pouvez vouloir imprimer un tableau ou créer une fonction distincte pour imprimer un tableau :

void PrintArray(double &eArray)
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=IntegerToString(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(str);
   }

Et appelez-le de n'importe où

PrintArray(LoY);

Je n'y ai pas prêté attention. Je ne comprends pas comment la compilation s'est déroulée sans erreur...

Quelle est la réponse si vous avez compris et écrit toute la séquence ?

ANDREY:

Je crois que j'ai enfin trouvé la solution (je suis un peu lent) ......

Lors de la première itération, la variable str est vide. Les caractères =+ indiquent à str de s'assigner vide (sans valeurs) et à str vide d'ajouter une chaîne avec des valeurs, à savoir"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+"," ;. La valeur de cette chaîne est " --LoY[0]--, --1.6104-- ". Après ces opérations , str obtient la valeur "--LoY[0]--, --1.6104-- " à la première itération. Si j'ai bien compris dans votre terminologie, cela s'appelle le premier élément.

À la deuxième itération, str a déjà le premier élément avec la valeur " --LoY[0]--, --1.6104-- " Les caractères =+ indiquent à str de s'assigner la valeur du premier élément et de lui-même avec la valeur du premier élément, ajoute une chaîne avec d'autres valeurs, à savoir "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+"," ;. La valeur de cette chaîne est déjà " --LoY[1]--, --1.6105--". Après ces opérations, str obtient la valeur"--LoY[0]-- --1.6104-- --LoY[1]-- --1.6105--" à la deuxième itération.C'est-à-dire que str a obtenu le deuxième élément et qu'à la trentième itération, str contiendra 30 éléments avec des valeurs différentes des éléments du tableau.

Après la fin de la boucle, la variable chaîne str contenant 30 éléments sera imprimée une fois en dehors de la boucle.
Il m'a fallu beaucoup de temps pour comprendre cet algorithme, car lorsque vous parliez d'addition, je ne prêtais attention qu'au signe plus rouge "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", et non à str+=.

Donc, c'est toujours un mystère pour moi de savoir quel rôle ces plus rouges "--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" jouent dans cet algorithme.

Merci pour votre aide.

Et quel mystère cela reste, si tout est bien programmé...
 
MakarFX:
Je ne l'ai jamais fait, est-ce que quelqu'un peut faire un lien pour les "nuls" ?

Si vous n'avez jamais écrit en C#, Delphi et similaires auparavant, cela ne vous aidera pas... Les fenêtres sont créées comme partout ailleurs, mais vous devez d'abord apprendre à le faire "partout".

D'abord un petit cours de C#, WinForms (par exemple). Il devrait y avoir un tas d'entre eux sur Internet. Cela dépasse un peu le cadre du forum.

 

Alexey Viktorov .

Alexey Viktorov:


Et quel mystère reste-t-il, si tout est correctement écrit...

Je n'ai pas compris cet algorithme pendant longtemps, car lorsque vous parliez de l'addition, je ne prêtais attention qu'aux plus rouges "--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+", mais pas à str+=.

C'est pourquoi le rôle que jouent ces plus rouges"--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+" dans cet algorithme reste un mystère pour moi.

Il découle sans ambiguïté de la façon dont j'ai décrit mon interprétation que la connexion des chaînes à chaque itération se produit à un seul endroit et une seule fois avec l'opération d'affectation str+=.

C'est-à-dire qu'en utilisant le symbole +, la valeur d'un élément de la variable chaîne str se connecte (plus) avec la valeur d'un autre élément de la même variable chaîne str
Et je ne comprends toujours pas ce que signifient ces + rouges str +="--LoY["+IntegerToString(r)+"]--,"+DoubleToString(LoY[r],4)+"," ;. Il n'y a pas d'opération de sommation effectuée sur les valeurs qui se trouvent entre ces plus rouges ..... comme il me semble. Si j'ai raison, quelle fonction remplissent ces plus rouges ? Et si je me trompe, c'est que je n'ai pas compris quelque chose.

D'ailleurs, dans votre message, dans la ligne jaune, il n'y a qu'un seul plus rouge avant +DoubleToString(LoY[r],4). Mais je ne le vois pas après.

Merci pour votre aide.

 
Alexey Viktorov:

Seulement, il n'est pas clair comment la compilation s'est déroulée sans erreur, il n'est pas clair...


Et j'ai initialisé str dans le corps de la fonction utilisateur moi-même quand j'ai vu que le compilateur signalait que str était indéfini. Mais j'ai oublié de t'en parler.
J'ai ensuite supprimé str de la fonction utilisateur partout et j'ai mis eStr entre parenthèses à la place de str dans la dernière ligne de la fonction utilisateur.

 
Maxim Kuznetsov:

Si vous n'avez jamais écrit en C#, Delphi et similaires auparavant, cela ne vous aidera pas... Les fenêtres sont créées comme partout ailleurs, mais vous devez d'abord apprendre à le faire "partout".

D'abord un petit cours de C#, WinForms (par exemple). Il devrait y avoir un tas d'entre eux sur Internet. Cela dépasse un peu le cadre du forum.

Le formulaire peut être créé.


Je suis plus intéressé par la façon dont l'échange de données entre ma fenêtre et le conseiller expert devrait être fait.

 
void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }
 

Aleksei Stepanenko:

void PrintArray(double &eArray[])
   {
   string eStr="";
   int eSize=ArraySize(eArray);
   for(int i=0; i<eSize; i++)
      {
      eStr+=string(i)+": "+DoubleToString(eArray[i],4)+", ";
      }
   Print(eStr);
   }


Merci pour cette précision.

Au fait, j'ai enlevé les plus jaunes et le compilateur a donné une erreur. Ils jouent donc un certain rôle dans toute cette construction. Mais quoi.... je ne comprends toujours pas. Pourquoi sont-ils nécessaires lorsque l'addition de chaînes de caractères s'effectue uniquement par l'utilisation des plus bleus. A en juger par vos explications, il n'y a rien d'autre dans cette construction ..... si je ne me trompe pas.

Et à propos de la chaîne (i)... À propos de la conversion de type .... est plus ou moins claire pour moi. Ce qui n'est pas clair, c'est que..... string est le nom d'un type de variable. i est une variable de comptage indiquant l'indice d'un élément de tableau. Et pourquoii est entre parenthèses () ? J'ai pensé jusqu'à présent que les parenthèses étaient une caractéristique de la fonction. Par exemple, Print( ). Mais que signifient les parenthèses ou quelle est leur fonction par rapport à i et à toute cette construction - string(i) ? À première vue, il semble qu'avant la variable i avait un type int (entier), puis vous avez changé le type de la variable i de int à string (chaîne) . Mais les parenthèses rondes qui me contiennent ne me permettent pas de le penser.

Merci pour l'explication.