Mon EA fait une double entrée - page 2

 
angevoyageur:

Ceci semble une explication possible, mais si c'est le cas, ce n'est pas normal. Utilisez-vous le mode asynchrone ? Si non, votre EA doit attendre la réponse du serveur et ensuite seulement continuer et traiter le prochain tick.

Si je comprends bien, il s'agit d'un problème aléatoire et vous ne pouvez pas le reproduire ?

Vous pouvez essayer d'imprimer plus d'informations de débogage en ajoutant cette ligne après la déclaration de m_Trade :


Bonjour

Depuis ma solution décrite dans le posthttps://www.mql5.com/en/forum/14327, j' ai eu un autre double trade.

Je pense que le problème est l'exécution (trop lente) de la fonction PositionSelect(Symbol()). Peut-être que les nouveaux ticks arrivent si vite que l'EA envoie un nouvel ordre avant de recevoir une réponse de PositionSelect(Symbol()). Dans mon code, il est théoriquement impossible d'envoyer un nouvel ordre/double ordre si la taille de la position actuelle est égale ou supérieure à la taille maximale autorisée, voir le code.

Le serveur live (ECN) du courtier X génère tellement de ticks lors d'un événement macro-économique, que pour chaque tick que vous voyez sur le serveur de simulation de metaquotes, ce serveur va générer 20, 30 ou 40 ticks !


PositionSelect(Symbol());

// Check of het model al LONG zit.             
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
      {
                                                           
// Check of het model al de maximale size in positie zit.                     
      if(PositionGetDouble(POSITION_VOLUME) >= MAX_Trade_Size)
            {
            return;
            }
      } 


Mon EA inverse automatiquement la double position pour obtenir la taille de position correcte comme sauvegarde supplémentaire.

Problem: Multiple Trades at brokerX
Problem: Multiple Trades at brokerX
  • www.mql5.com
Problem: Multiple Trades at brokerX.
 
snelle_moda:
....

Le serveur live (ECN) du courtier X génère tellement de ticks lors d'un événement macro-économique, que pour chaque tick que vous voyez sur le serveur de simulation de metaquotes, ce serveur va générer 20, 30 ou 40 ticks !

Oui, c'est parce que le DOM est actif.

....

Mon EA inverse automatiquement la double position pour obtenir la taille de position correcte comme sauvegarde supplémentaire.

Merci pour votre contribution. Avez-vous ce problème sur le même courtier que d'autres, ou est-ce indépendant du courtier ?
 
angevoyageur:
Oui, c'est parce que le DOM est actif.
Merci pour votre contribution. Avez-vous ce problème sur le même courtier que les autres, ou est-ce indépendant du courtier ?


Qu'est-ce que "DOM" ???


Seulement sur ce serveur de courtage, je ne l'ai jamais rencontré sur le serveur de simulation (Metaquotes) depuis que ce fil de discussion https://www.mql5.com/en/forum/14327 a été lancé.

Avant cette période, le serveur du courtier X générait approximativement la même quantité de ticks que le serveur de Metaquotes.

Problem: Multiple Trades at brokerX
Problem: Multiple Trades at brokerX
  • www.mql5.com
Problem: Multiple Trades at brokerX.
 
snelle_moda:


Qu'est-ce que "DOM" ???


Seulement sur ce serveur de courtier, je ne l'ai jamais expérimenté sur le serveur de simulation depuis le début de ce fil de discussion https://www.mql5.com/en/forum/14327.

Avant cette période, le serveur du courtier X générait approximativement une quantité égale de ticks que le serveur de Metaquotes.

DOM = Depth of Market, quand il est activé il y a beaucoup plus d'événements Tick.
 
angevoyageur:
DOM = Depth of Market, lorsqu'il est activé, il y a beaucoup plus d'événements Tick.


Est-il possible de le désactiver ?

 
snelle_moda:


Est-il possible de le désactiver ?

Je ne pense pas, pour autant que je sache, c'est activé du côté du courtier. Peut-être pouvez-vous demander au courtier.
 

J'ai minimisé le nombre de ticks entrants en n'autorisant les ticks que lorsque le prix lui-même a été modifié.


// De sum van de BID/LAST 
   static double dPriceSum;   
   double dOldPriceSum = dPriceSum;
   
// To be used for getting recent/latest price quotes
   MqlTick Latest_Price;      
   SymbolInfoTick(Symbol() ,Latest_Price);

   dPriceSum = Latest_Price.bid + Latest_Price.last; 

// Check if the price is (not)changed.
   if(dPriceSum == dOldPriceSum)
         {
         return;
         }
 
snelle_moda:

J'ai minimisé le nombre de ticks entrants en n'autorisant les ticks que lorsque le prix lui-même a été modifié.


Et que se passe-t-il si le cours vendeur change ou si le cours acheteur augmente de 1 point et le dernier diminue de 1 point ? Un tick "normal" est un changement de l'offre et/ou de la demande.
 
angevoyageur:
Et que se passe-t-il si le cours vendeur change ou si le cours acheteur augmente de 1 point et le dernier diminue de 1 point ? Un tick "normal" est un changement du Bid et/ou du Ask.

C'est un bon point. Je devrais peut-être utiliser uniquement la variation du prix BID.

Une barre sur le graphique est également basée sur le prix BID ?


Pour le signal de déclenchement de mon EA, je suis seulement intéressé par le changement du prix sur lequel le BAR 1 minute est basé.

 
Omg. Donc dormir n'aide pas ?

Que pouvons-nous faire pour éviter cela ?