[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 644

 
Myth63:


Le problème est que je ne suis pas très bon en programmation MQL et que mon EA est basé sur les principes du BASIC =) Une variable est affectée à un ordre ouvert. Le terminal indique que j'ai été reconnecté et que la valeur de cette variable disparaît à l'ouverture de l'ordre. Dans ce cas, le terminal doit vérifier les positions ouvertes et affecter ces valeurs aux variables qui ont été assignées par le robot. Et le conseiller expert montre de bonnes lectures dans le test.

En fonction de ce que vous voulez stocker (quelles informations), différentes options peuvent être utilisées :

  • les informations relatives à l'ordre peuvent être stockées dans son commentaire, puis lues à partir de ce dernier ;
  • les informations que vous voulez peuvent être écrites dans un fichier - un processus lent ;
  • La variante la plus souvent utilisée consiste à l'écrire dans les variables globales du terminal.
 
FelixFX:

Si vous le voulez bien, voici un exemple. Si je comprends bien, les données ne seront pas mises à jour avant l'exécution de la boucle ?
int start()
{
//----
    while (!IsStopped() && IsExpertEnabled())
    {fMineFunction();}
//----
    return (0);
}
 
TarasBY:

Est-ce que seules les mêmes données seront utilisées au cours de ce cycle sans fin ? Les données seront-elles mises à jour avec un nouveau tick ou non ?
 
Myth63:


Le problème est que je ne suis pas très bon en programmation MQL et que mon EA est basé sur les principes de Bacyca =) Une variable est affectée à un ordre ouvert. Le terminal indique que j'ai été reconnecté et que la valeur de cette variable disparaît à l'ouverture de l'ordre. Je me demande comment faire pour qu'il vérifie les positions ouvertes s'il y a un overlog et qu'il affecte ces valeurs aux variables qui ont été définies par un robot.

Vous parlez du nombre magique ? Pas assez d'informations pour vous aider... quelle est la variable et comment elle est assignée - c'est de là que vous devez partir.

Mais mon conseiller expert montre de bons résultats dans le test.

100 métiers, ce n'est pas une lecture, c'est un bon morceau d'histoire. Quelques milliers de transactions sur 2-3 ans, c'est quelque chose de fiable.
 
FelixFX:

Est-ce que seules les mêmes données seront utilisées au cours de ce cycle sans fin ? Les données seront-elles mises à jour avec un nouveau tick ou non ?
Non. Pour qu'il soit mis à jour, il faut que ce soit ça. La question du bouclage est répondue par le moteur de recherche du site, combien de pages il retourne. Lisez-le.
 
FelixFX:

Est-ce que seules les mêmes données seront utilisées au cours de ce cycle sans fin ? Les données seront-elles mises à jour avec le nouveau tick ou non ?
La boucle vous permet d'exécuter votre fonction en "boucle", sans attendre l'arrivée du prochain tick. Quelles sont les données que vous demandez ?
 
Cela semble facile à écrire à la main, mais quand une partie du code est exécutée par ticks, et une autre partie par barres, le programme devient très confus) Merci beaucoup)
 
Qwertee:
Ce n'est pas si difficile à écrire à la main, mais lorsque certains codes sont exécutés par les ticks et d'autres par les barres, le programme devient très confus. Merci beaucoup.

donc vous déterminez simplement quand une nouvelle barre s'ouvre et vous exécutez votre fonction.

Vous pouvez déterminer l'apparition d'une nouvelle barre en mémorisant l'heure d'ouverture de la barre, puis en la comparant à l'heure actuelle de la barre 0. Si le nouveau temps est plus long que le précédent, alors nous avons une nouvelle barre.

 

sergeev merci pour le conseil, cela semble fonctionner)

Ok, encore une chose.

Dans mon EA, j'ai ce branchement :

if(period=="M15")
{
// vérifier l'ouverture d'un achat
Alert(buysell) ;

if(buysell=="buy")

Alerte(1) ;

.............

}

En gros, des "if" imbriqués. MAIS. la condition if(period=="M15") est remplie et Alert donne un résultat, et achète, mais la condition if(buysell=="buy") n'est pas remplie et la commande Alert(1) n'est même pas lancée. diable, les deux conditions sont même syntaxiquement les mêmes, mais pourquoi l'une est remplie et l'autre pas ?

 
sergeev:

donc vous déterminez simplement quand une nouvelle barre s'ouvre et vous exécutez votre fonction.

Vous pouvez déterminer l'apparition d'une nouvelle barre en mémorisant l'heure d'ouverture de la barre, puis en la comparant à l'heure actuelle de la barre 0. Si le nouveau temps est plus long que le précédent, alors vous avez une nouvelle barre.

Je vais l'écrire :

int time.marker;

void start() {
   if(time.marker!=Time[0]) {
      time.marker=Time[0];
      // тут то что буде исполнятся только на открытии бара
      }
   // тут то что буде исполнятся на каждом тике
   }
Raison: