[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 209

 
polycomp:


Dossiers :
 
Nous devrons voir, cela prendra du temps.
 
polycomp:
L'une des raisons possibles pour lesquelles le code fonctionne différemment après une réinitialisation est la particularité de l'initialisation des variables statiques dans MT4. Dans la fonction isNewBar() vous utilisez une telle variable. Pendant l'initialisation du primaire, BarTime = 0. Et lors de la prochaine réinitialisation, cette variable contiendra la valeur précédente (pas 0). Pour vérifier cette hypothèse, rendez la variable BarTime globale et vérifiez comment le code fonctionne.
 
polycomp:
alsu:

Tout d'abord, imprimez quelque chose à partir des fonctions de la bibliothèque dans Print, afin de savoir si elles sont appelées

Les objets graphiques sont créés dans les fonctions de la bibliothèque. Après le premier appel à l'indicateur, les objets sont créés et affichés dans la fenêtre du terminal.

Lorsque vous les appelez à nouveau, ils ne sont pas présents dans la liste des objets, ce qui suggère que les fonctions externes ne fonctionnent pas lors du recalcul de l'indicateur pour une raison quelconque, et le terminal est silencieux sur cette question.

Ok. Au lieu de signes indirects, imprimez ( " appel de cette fonction") dans l'indicateur ; nous verrons tout de suite si cette fonction est appelée.

Vous devriez être moins arrogant, alors les erreurs seront trouvées plus rapidement).

 
polycomp:



En général, votre problème se situe très probablement dans la fonction

bool isNewBar()
{
  static datetime BarTime;  
   bool res=false;
    
   if (BarTime!=Time[0]) 
      {
         BarTime=Time[0];  
         res=true;
      } 
   return(res);
}

Le problème est que la statique n'est pas réinitialisée lors de la réinitialisation, donc lorsque vous redémarrez, votre BarTime est toujours égal à l'heure de la dernière barre comptée la dernière fois, c'est-à-dire que isNewBar () est faux jusqu'à ce qu'une nouvelle bougie arrive. Il serait préférable de déplacer la fonction de la bibliothèque vers l'inludeur mqh et de mettre à zéro BarTime=0 explicitement dans init ().

Ce n'est qu'un premier coup d'œil au code, alors ne jugez pas trop sévèrement si je me trompe.

 
polycomp:



Je commencerais par supprimer cette ligne de votre bibliothèque

#property library

Puisque vous n'utilisez pas une bibliothèque, mais un fichier d'inclusion

 
alsu:

Pour autant que je m'en souvienne, vous devez vous souvenir spécifiquement de cette heure lorsque vous définissez l'ordre en attente. Vous pouvez le mémoriser directement dans le commentaire de l'ordre (ou en magik, comme une perversion spéciale :).
Merci beaucoup.
 

QUESTION 1.

Comment coder cette idée.

Pour définir un ordre en attente mais le convertir en ordre au marché uniquement si le prix défini pour l'ordre en attente est le même que le prix d'ouverture d'une bougie TF60.

QUESTION 2.

Comment coder cette idée.

Si un ordre en suspens est converti en un ordre de marché, dans 10 minutes nous devrons définir un autre ordre en suspens avec les mêmes valeurs : prix ouvert, prix stop, volume que dans l'ordre en suspens précédent qui a été converti en un ordre de marché.

Merci.

 
alsu:

Ok. Peut-être qu'au lieu de juger par des signes indirects, il suffit de taper l'indicateur lui-même : Print ("appel de telle ou telle fonction") ; on verra tout de suite si elle est appelée ou non.

Vous devez être moins confiant, les erreurs seront alors trouvées plus rapidement).

alsu:

Et en général, votre problème se situe très probablement dans la fonction

Le problème est que la statique n'est pas remise à zéro lors de la réinitialisation, donc au redémarrage le BarTime est toujours égal au temps de la dernière barre comptée la dernière fois, c'est-à-dire que isNewBar () sera faux jusqu'à ce qu'une nouvelle bougie arrive. Il serait préférable de déplacer la fonction de la bibliothèque vers l'inludeur mqh et de mettre à zéro BarTime=0 explicitement dans init ().

Ce n'est qu'un premier coup d'œil au code, alors ne jugez pas trop sévèrement si je me trompe.


Merci beaucoup !

Suppression de isNewBar () de la bibliothèque et mise dans le fichier indicateur. Tout fonctionne comme sur des roulettes !

 
solnce600:

QUESTION 1.

Comment coder cette idée.

Pour définir un ordre en attente mais le convertir en ordre au marché uniquement si le prix défini pour l'ordre en attente est le même que le prix d'ouverture d'une bougie TF60.

QUESTION 2.

Comment coder cette idée.

Si un ordre en suspens est converti en un ordre de marché, dans 10 minutes nous devrons définir un autre ordre en suspens avec les mêmes valeurs : prix ouvert, prix stop, volume que dans l'ordre en suspens précédent qui a été converti en un ordre de marché.

Merci.


1. Non.


2. Le seul problème est que vous ne pouvez pas placer un ordre qui ne se déclenchera qu'au cours d'ouverture du H1.

Raison: