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

 
Aleksei Stepanenko:

ou créer une fonction d'impression de tableau distincte :

Et appelez-le de n'importe où

Alexey, je suis silencieux depuis longtemps, mais je ne vois pas cela d'un bon œil... Pourquoi utiliser IntegerToString() alors qu'une conversion de type explicite dans ce cas est beaucoup plus facile et moins coûteuse...

eStr+=(string)i+": "+DoubleToString(eArray[i],4)+", ";
 

je ne sais pas, l'habitude :)

 
Aleksei Stepanenko:

ou créer une fonction d'impression de tableau distincte :

Et appelez-le de n'importe où

Merci beaucoup pour votre compréhension et votre clarification. Je fais une pause pour étudier et comprendre les informations qui sont nouvelles pour moi.

 
Alexey Viktorov:

Alexey, j'ai été silencieux pendant longtemps, mais je ne peux pas le voir tranquillement... Pourquoi utiliser IntegerToString() quand une conversion de type explicite est beaucoup plus facile et moins coûteuse dans ce cas...

Et merci aussi pour vos précieux ajouts.

 
Pouvez-vous me dire où chercher et lire sur la création d'une fenêtre externe pour une EA ?
 
MakarFX:
Pouvez-vous me dire où chercher et lire sur la création d'une fenêtre externe pour EA.

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

tcl.Eval("toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko:

ou créer une fonction d'impression de tableau distincte :

Et appelez-le de n'importe où

J'ai décidé de créer une fonction d'impression de tableau personnalisée distincte. Ou plutôt, ne pas en faire, utiliser la fonction ( PrintArray() ) Ce que vous avez déjà fait.

Qu'est-ce que j'ai fait ?

J'ai placé l'appel à la fonction utilisateur PrintArray() à l'intérieur de la fonction OnTick()... comme décrit dans le tutoriel de Kovalev.

2. j'ai placé le corps de la fonction PrintArray() en dehors de la fonction OnTick()... ... comme décrit dans le tutoriel de Kovalev.

Toutes les nouvelles variables du corps de cette fonction sont locales. Ils sont déclarés et initialisés dans cette fonction.

int P1=0;
double LoY[31];
void OnTick()
{
if (P1==0)
{
for(int r=0; r<31;r++)
{
LoY[r]=1.6104+(r*2)*0.0001;
P1=1;
}
}
//*************************************************************  Б Л О К    N 2
for(int x=0; x<31;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

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

Je n'ai apporté aucune modification à votre fonction. Mais le compilateur donne 6 erreurs pour une raison quelconque. Et tous ces éléments sont liés à la fonction utilisateur.

Je vous serais très reconnaissant si vous pouviez me dire ce que j'ai fait de mal.
Merci.

 
ANDREY:

J'ai décidé de créer une fonction d'impression de tableau personnalisée distincte. Ou plutôt, ne pas en faire un, utiliser celui ( PrintArray() ) ce que vous avez déjà fait.

Qu'est-ce que j'ai fait ?

J'ai placé l'appel à la fonction utilisateur PrintArray() à l'intérieur de la fonction OnTick()... comme décrit dans le tutoriel de Kovalev.

2. j'ai placé le corps de la fonction PrintArray() en dehors de la fonction OnTick()... ... comme décrit dans le tutoriel de Kovalev.

Toutes les nouvelles variables du corps de cette fonction sont locales. Ils sont déclarés et initialisés dans cette fonction.

Je n'ai fait aucun changement dans votre fonction. Mais le compilateur produit 6 erreurs pour une raison quelconque. Et tous sont liés à une fonction d'utilisateur.

Je vous serai très reconnaissant si vous me dites ce que j'ai fait de mal.
Merci.

Je ne me souviens pas exactement et je suis trop paresseux pour vérifier. Essayez d'ajouter des crochets

void PrintArray(double &eArray[])
 

Aleksei Stepanenko:

string str="";

for(int r=0; r<31;r++)
   {
   LoY[r]=1.6104+r*0.0001;
   str+="--LoY["+IntegerToString(r)+"]--, "+DoubleToString(LoY[r],4)+", ";
   }
Print(str);


Je crois que j'ai enfin compris (je suis un peu lent) ......

Lors de la première itération, la variable str est vide. Les caractères =+ ordonnent à 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.

À la fin de la boucle, la variable 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.

 
Alexey Viktorov:

Je ne me souviens pas exactement, et je suis trop paresseux pour vérifier. Essayez d'ajouter des crochets

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.