Mon EA fait une double entrée - page 6

 
doshur:
Des nouvelles du bureau de service ?
Pas encore.
 
angevoyageur:
Pas encore.

Bonjour,

Des nouvelles du service d'assistance ?

 
doshur:

Bonjour,

Des nouvelles du service desk ?

Vous pouvez être sûr que je posterai la réponse ici si j'en ai une.

Personnellement je ne suis pas encore venu pour reproduire le problème.

 

Mon EA génère un signal très lentement et aujourd'hui il a fait une transaction.

Je n'ai pas de problème avec la taille du lot après avoir utilisé le nouveau code, mais je ne peux pas confirmer que le nouveau code fonctionne.

 
doshur:

Mon EA génère un signal très lentement et aujourd'hui il a fait une transaction.

Je n'ai pas de problème avec la taille du lot après avoir utilisé le nouveau code, mais je ne peux pas confirmer que le nouveau code fonctionne.

Bonjour doshur,

Aucune réponse du ServiceDesk pour le moment. Cependant, votre problème me "perturbe" Pouvez-vous confirmer que vous rencontrez ce problème de double trade sur un compte réel et non sur un compte de démonstration ? (Je n'arrive pas à reproduire ce problème sur mon compte de démonstration).

En vérifiant une fois de plus vos messages, je remarque maintenant ce log :

Forum sur le trading, les systèmes de trading automatisés et le test des stratégies de trading.

Mon EA fait une double entrée

(based on order #40018327) DEAL2 - Entry 3

2013.12.20 08:35:01 Trades '800****' : échange acheter 0.01 EURUSD au marché placé pour exécution dans 331 ms DEAL2 - Entrée 2

2013.12.20 08:35:01 Trades '800****' : deal #27731691 buy 0.01 EURUSD at 1.36353 done (based on order #40018326) DEAL 1 - Entry 3

2013.12.20 08:35:00 Transactions '800****' : échange acheter 0.01 EURUSD au marché DEAL2 - Entrée 1

2013.12.20 08:35:00 Transactions '800****' : échange achat 0.01 EURUSD au marché placé pour exécution en 313 ms DEAL1 - Entrée 2

2013.12.20 08:35:00 Transactions '800****' : achat en bourse 0.01 EURUSD au marché DEAL1 - Entrée 1

Si je comprends bien, cela confirme que le problème est que PositionSelect() est toujours faux, alors qu'une nouvelle position est ouverte. En effet, on peut voir que 1 trade donne lieu à 3 entrées, et que la deuxième transaction est initiée avant que la troisième entrée pour le deal 1 n'arrive (confirmation de la nouvelle transaction/position).

En ce qui concerne la solution de contournement utilisant la fonction Sleep(), je ne suis pas satisfait de cette solution car il n'y a aucun moyen de savoir quel délai utiliser. Bien sûr, plus ce délai est grand, moins il y a de chance d'obtenir un "double trade", mais c'est toujours possible. Je suis donc toujours à la recherche d'une meilleure solution.


 
angevoyageur:

En ce qui concerne la solution de contournement utilisant la fonction Sleep(), je ne suis pas satisfait de cette solution car il n'y a aucun moyen de savoir quel délai utiliser. Bien sûr, plus le délai est grand, moins il y a de chances d'obtenir un "double trade", mais c'est toujours possible. Je suis donc toujours à la recherche d'une meilleure solution.

Désolé si je me trompe car je viens juste d'arriver dans ce sujet, mais il semble que ce code pourrait être une meilleure solution de contournement que juste Sleep(), et aiderait à identifier le problème et la valeur réelle du délai nécessaire :

bool fatalError=false; // atention: declare this as global

....

if (fatalError==false) {
  if (m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) {
    Print("Position opened in ", Symbol());
    int maxTimeout=0;
    while (!PositionSelect(Symbol())) {
       Sleep(100);
       maxTimeout++;
       if (maxTimeout>100) {
          Print("### PositionSelect fatal error!");
          fatalError=true;
          break;
       }
    }
    Print("--> PositionSelect delay=",maxTimeout*100);
    break;
  }
}
 
angevoyageur:

Salut doshur,

Aucune réponse du ServiceDesk pour le moment. Cependant, votre problème me "perturbe". Pouvez-vous confirmer que vous rencontrez ce problème de double trade sur un compte réel et non sur un compte de démonstration ? (Je n'arrive pas à reproduire ce problème sur mon compte de démonstration).

En vérifiant une fois de plus vos messages, je remarque maintenant ce log :

Si je comprends bien, il confirme que le problème est que PositionSelect() est toujours faux, alors qu'une nouvelle position est ouverte. En effet, vous pouvez voir qu'une transaction donne lieu à 3 entrées, et que la deuxième transaction est initiée avant que la troisième entrée de la transaction 1 n'arrive (confirmation de la nouvelle transaction/position).

En ce qui concerne la solution de contournement utilisant la fonction Sleep(), je ne suis pas satisfait de cette solution car il n'y a aucun moyen de savoir quel délai utiliser. Bien sûr, plus le délai est grand, moins il y a de chances d'obtenir une "double transaction", mais c'est toujours possible. Je suis donc toujours à la recherche d'une meilleure solution.


Oui, j'utilise un compte réel.
Encore une transaction effectuée. Pas de double entrée. Peut-être que mon nouveau code fonctionne ?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
 
figurelli:

Désolé si je me trompe car je viens d'arriver ici dans ce sujet, mais il semble que ce code pourrait être une meilleure solution de contournement que juste Sleep(), et aiderait à identifier le problème et la valeur réelle du délai nécessaire :

Idée intéressante. Je vais l'utiliser pour identifier le problème, mais je n'aime pas la fonction Sleep() Bien que chacun soit libre de choisir sa solution.

Merci.

Documentation on MQL5: Common Functions / Sleep
Documentation on MQL5: Common Functions / Sleep
  • www.mql5.com
Common Functions / Sleep - Documentation on MQL5
 
angevoyageur:

Idée intéressante. Je vais l'utiliser pour identifier le problème, mais je n'aime pas la fonction Sleep() Bien que chacun soit libre de choisir sa solution.

Merci.

De rien, cette solution n'est qu'une solution de contournement, je n'aime pas Sleep non plus, car vous allez perdre des ticks. Probablement que des sémaphores/flags ou même des machines à états seraient plus sûrs/efficaces/élégants.
 
figurelli:
Vous êtes le bienvenu, cette solution n'est qu'une solution de contournement, je n'aime pas Sleep aussi, puisque vous allez perdre des ticks. Probablement que les sémaphores/flags ou même les machines d'état seraient plus sûrs/efficaces/élégants.
Mes tests avec votre solution montrent que PositionSelect() est parfois vrai juste après PositionOpen (maxcount=0), ou faux (maxcount=1). Il y a donc manifestement un délai. Il serait intéressant que quelqu'un puisse le tester sur un compte réel.
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
Raison: