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

 
Igor Makanu:

ce code fonctionne, faites-le par analogie :

Modifications minimes - suppression de l'analyse OrderMagicNumber() et ajout de trois journaux.
Le résultat, malheureusement, est le même - voir pr. - Sur la première capture d'écran, il y a un début (on ne sait pas pourquoi il ne commence pas par 0), et sur la seconde, où il commence par 124 à 99.

int NumberOfOrders()
{
int i,res=0,k=OrdersTotal() ; string sy=Symbol() ;

for(i=0 ; i<k ; i++)
{
log("k = " + k +" ; ") ;
log("i = " + i +" ; ") ;
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy)) res++ ; //if((OrderMagicNumber()==magic_) && (OrderSymbol()==sy)) res++ ;
log("res = " + res +" ; ") ;

}
}
return(res) ;
}

Dossiers :
test_1.png  6 kb
test_2.png  6 kb
 
Alexey Viktorov:
Ce code compile-t-il vraiment sans erreur ??? Je n'y crois pas...
Qu'est-ce qui vous fait douter ? Dans tous les cas, MQL4 ne produit aucune erreur.
 
Algotrader18:

(on ne sait pas pourquoi il ne commence pas par 0), et au deuxième endroit où il passe de 124 à 99.

parce que le terminal a "mangé" une partie de Print(), la sortie en MQL a la priorité la plus basse, ajoutez Slepp(123) avant Print() et il n'y aura pas de sauts.

bien que d'après le journal, vous ne fassiez qu'imprimer le compteur de la boucle.

 
Igor Makanu:

parce que le terminal a "mangé" la partie de Print(), dans MQL la sortie a la plus basse priorité, ajoutez Slepp(123) avant Print() et il n'y aura pas de sauts.

bien que d'après le journal, vous imprimiez juste le compteur de boucle

C'est très intéressant - pouvez-vous être un peu plus précis ? Comment fonctionne ce processus d'"alimentation" ?

Votre réponse me donne l'impression que j'ai "mangé" - il ne l'a simplement pas mis dans le journal parce qu'il y avait des choses plus importantes, mais ma véritable tâche était de passer en revue tous les ordres et d'en supprimer certains et j'ai remarqué que l'EA en sautait certains (il ne sortait pas l'information avec la priorité la plus basse). J'ai simplifié la tâche pour comprendre la raison et comme résultat, nous n'avons que la sortie dans le journal, mais je vois toujours des ordres omis, c'est-à-dire que le Conseiller Expert saute sur plusieurs ordres. La priorité d'ordre la plus basse explique bien la sortie de départ non pas à partir de 0 mais comment elle peut expliquer une sortie incohérente quand elle saute, par exemple, de 124 à 99.

Si par "mangé" on entend autre chose, j'aimerais comprendre quoi ?
Dossiers :
test_2.png  6 kb
 
neverness:

C'est génial !

Roman !

Moi, par exemple, je suis un trader prospère avec 20 ans d'expérience.

Je ne comprends pas pourquoi vous avez besoin de "la différence entre les clôtures des paires que vous avez saisies, etune moyenne mobile de celles-ci".

De plus, savez-vous comment construire une moyenne mobile de ces différences ? - Fantastique !

Pouvez-vous simplement dessiner la moyenne mobile des cotations ? - Pas non plus ?

Alors quel est le problème ?

la différence des moyennes rapprochées n'est pas égale à la différence des moyennes rapprochées, hélas et ah

 
Algotrader18:
Quels sont les doutes ? Quoi qu'il en soit, aucune erreur dans MQL4.

1. Apprenez à insérer du code.

Algotrader18:

J'ai fait des changements minimes - j'ai supprimé l'analyse OrderMagicNumber() et ajouté trois journaux.
Le résultat, malheureusement, est le même - voir ci-dessus. - Sur la première capture d'écran, le début (je ne sais pas pourquoi ça ne commence pas par 0), et sur la seconde - l'endroit où ça commence de 124 à 99.

int NumberOfOrders()
  {
   int i,res=0,k=OrdersTotal(); string sy=Symbol();
  
   for(i=0; i<k; i++)
     {
      log("k = " + k +"; ");
      log("i = " + i +"; ");
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==sy)) res++;  //if((OrderMagicNumber()==magic_) && (OrderSymbol()==sy)) res++;
         log("res = " + res +"; ");
        
        }
     }
   return(res);
  }

2. log est un logarithme ???

Note

Vous pouvez utiliser log()au lieu de MathLog().

MathLog - Математические функции - Справочник MQL4
MathLog - Математические функции - Справочник MQL4
  • docs.mql4.com
MathLog - Математические функции - Справочник MQL4
 
Roman Sharanov:

J'ai aussi trouvé un sérieux inconvénient, trop d'appels à CopyClose()

Pouvez-vous me dire comment copier les cotations d'un tableau de paires de devises dans une boucle ?

Cela semble être un tableau double, mais MQL ne le supporte pas, comme %.

Que voulez-vous dire par "double tableau" ?

 
Alexey Viktorov:

Que voulez-vous dire par "double tableau" ?

Eh bien, en deux dimensions.

 
Roman Sharanov:

Bien en deux dimensions.

Où est-il écrit que CopyClose copie les données dans un tableau 2D ? Pourquoi le tableau 2D a-t-il été mentionné en premier lieu ?

 
Alexey Viktorov:

Où est-il écrit que CopyClose copie des données dans un tableau 2D ? Pourquoi le tableau à deux dimensions a-t-il été mentionné ?

Parce que j'ai besoin de stocker des tableaux de citations dans un tableau

Afin de le copier une fois dans une boucle et ensuite d'effectuer des calculs en utilisant ArrayCopy, mais pas CloseCopy