[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 309

 
artmedia70:

C'est vrai : il est de bon ton de ranger ses propres déchets...

Mais dans ce contexte, comment savoir si les "déchets" doivent être nettoyés maintenant ou vice-versa : ce ne sont pas des déchets, ce sont les données nécessaires aux calculs ultérieurs.

Si je comprends bien, deinit() devrait être utilisé pour nettoyer la poubelle, mais... il est exécuté non seulement lorsque le graphique d'un instrument commercial est supprimé, lorsque le conseiller expert en est retiré, mais aussi lorsque le TF est modifié. Dans ce cas, toutes les données accumulées pour la TF seront perdues et le conseiller expert recommencera à travailler avec un tableau nul lorsqu'il reviendra à l'horizon temporel précédent. La même chose se produira si nous modifions l'un des paramètres de l'Expert Advisor.

Il s'avère que dans certaines situations, le "ramassage des ordures" est un processus logique complexe, et non un simple changement de la taille du tableau.


Ce n'est pas difficile. Dans la boucle, initialiser le tableau avec des valeurs. Ensuite, nous travaillons avec le tableau résultant. Lorsque le travail est terminé, nous le rendons de longueur zéro. En cas de doute, vous pouvez le faire à la fin du code, juste avant return(0).
 

Veuillez suggérer le code ci-dessous pour lire le fichier journal. Lit automatiquement le fichier journal actuel par date et le sort sur l'imprimante.

Où :

while (result>0) {

Le dossier est en cours d'assemblage à partir de pièces. Mais je n'ai pas besoin de tout le fichier, juste de la dernière ligne. Aidez-nous à corriger, s'il vous plaît.

void ReadWrite() {
   string tekTime=TimeStr1(CurTime(),1);
   string path=TerminalPath()+"\\logs\\"+tekTime+".log";
   string title="Чтение из файла";
   string msg;
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Ошибка открытия файла";
      //MessageBox(msg,title,MB_OK|MB_ICONERROR);
      Print(msg);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   //string char="x                      ";
   string char="x                                                                                                                                                                                                                                                         ";
   int count=0;
   result=_lread (handle,char,250);
   while (result>0) {
      buffer=buffer+char;
      char="x                                                                                                                                                                                                                                                         ";
      count++;
      result=_lread (handle,char,250);
   }
   result=_lclose (handle);
   msg=StringTrimRight(buffer);
   //MessageBox(msg,title,MB_OK|MB_ICONINFORMATION);
   Print(msg);
}

//------------------расчет времени----------------
string TimeStr1(int taim,int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip==1) 
   {
      int GD=TimeYear(taim);                  
      int MN=TimeMonth(taim);                  
      int DD=TimeDay(taim);  
      
      sTaim1 = DoubleToStr(GD,0);
      if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
      else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
      if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
      else sTaim3 = DoubleToStr(DD,0);
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return(sTaim);
}
 
drknn:

Ce n'est pas difficile. Dans la boucle, le tableau est initialisé avec des valeurs. Puis nous avons travaillé avec le tableau résultant. Lorsque le travail est terminé, nous en faisons un tableau de longueur nulle. En cas de doute, vous pouvez le faire à la fin du code, juste avant return(0).

J'ai été mal compris.

Dans le contexte de cette conversation (si j'ai bien compris les prémisses de cette conversation), la boucle est l'EA elle-même. Après tout, à chaque fois qu'un tic-tac se produit, le tableau augmente ou reste le même selon qu'une nouvelle valeur doit y être écrite ou non.

Comment pouvons-nous savoir que le travail est terminé, et non pas, par exemple, qu'une personne a modifié le calendrier ? Même par accident... Dans ce cas, deinit() sera appelé et toutes les données seront perdues. Le conseiller expert commencera à les stocker (écrire dans un tableau dynamique) à nouveau, sur la base des valeurs obtenues dans le nouveau cadre temporel(un nouveau cycle).

C'est ce que je veux dire.

 
artmedia70:

Je n'ai pas été compris.

Dans le contexte de notre discussion (si j'ai bien compris la prémisse de cette discussion), le cycle est le travail du conseiller expert lui-même. Après tout, à chaque tic, le tableau est soit augmenté, soit inchangé, selon qu'une nouvelle valeur doit y être écrite ou non.

Comment pouvez-vous savoir si un travail est terminé et si ce n'est pas simplement une personne qui modifie les délais, par exemple ? Même par accident... Dans ce cas, deinit() sera appelé et toutes les données seront perdues. Le conseiller expert commencera à les accumuler (les écrire dans un tableau dynamique) à nouveau, sur la base des valeurs obtenues dans le nouveau cadre temporel(un nouveau cycle).

Mon point de vue est le suivant.

Si vous entrez dans les détails, vous pouvez utiliser cette fonction. Il vous indiquera la raison de la désinitialisation.
 

J'ai remarqué une particularité du terminal. Comme le calcul du profit de l'ordre ne tient pas compte de l'OrderSwap(), je veux qu'il ferme l'ordre en une seule fois.


Cela signifie que nous devons utiliser cette formule pour clôturer l'ordre avec un bénéfice :

(OrderProfit()+OrderSwap()+OrderCommission())>0

Je n'ai jamais travaillé avec la commission et la commission n'est pas utilisée sur la démo, c'est pourquoi je ne peux pas la vérifier sur le compte.

Mes calculs sont-ils corrects ?

 
Zhunko:
Si vous entrez dans les détails, vous pouvez utiliser cette fonction. Il vous indiquera la raison de la désinitialisation.

C'est vrai... :)

Je l'ai oublié. Maintenant, avec mon habitude d'utiliser "foolproof", nous allons l'utiliser...

 
artmedia70:

ObjectGetValueByShift() pour vous aider.

Et comment vous allez travailler avec elle - vous seul le savez...


Merci, gentil monsieur !
 
Deux questions.

1. Comment puis-je écrire/entrer la première variable et les variables suivantes double abc[10] dans le tableau double ab=a*b?
2. Comment écrire la onzième variable dans un tableau, en supprimant la première ?

L'ordre dans lequel les variables sont écrites dans le tableau (en avant ou en arrière) n'a pas d'importance. Les variables du tableau sont nécessaires pour déterminer la moyenne arithmétique.
 
Puis-je modifier la taille du lot d'un ordre en attente?
 
Parn25:
Puis-je modifier la taille du lot d'un ordre en attente ?


Non, tu ne peux pas.

tout ce que vous pouvez changer est expliqué ici https://docs.mql4.com/ru/trading/OrderModify