Alerte : Le terminal MT4 duplique des ordres envoyés par des experts - page 6

 

Il y a une différence entre

bool Buy_Ticket = OrderSend(........)

et ce que vous faites

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

dans le premier cas, si un ordre échoue, une valeur de -1 sera renvoyée, mais le bool interprétera cela comme VRAI.

dans le second, vous utilisez la condition (Ordersend>0) pour assigner vrai ou faux au booléen.

 
GumRai:


Il y a une différence entre

et ce que vous faites

dans le premier cas, si un ordre échoue, une valeur de -1 sera renvoyée, mais le bool interprétera cela comme VRAI.

dans le second, vous utilisez la condition (Ordersend>0) pour assigner vrai ou faux au booléen.



Est-ce vrai ? Je ne suis pas en mesure de le tester sur un compte de démonstration (transaction en direct) pour le moment mais j'ai fait une vérification rapide sur un backtest en perturbant intentionnellement OrderSend() avec un stoploss invalide = ask (prix du marché) pour une transaction longue. Le résultat est que OrderSend() renvoie un "-1" comme prévu et mon bool var Buy_Ticket renvoie également un faux.


** EDIT **

Avez-vous oublié ma condition "> 0" derrière OrderSend() ? Mon code original montre :

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



Est-ce que c'est vrai ? Je ne suis pas en mesure de le tester sur un compte de démonstration (Live trade) maintenant mais j'ai fait une vérification rapide sur un backtest en perturbant intentionnellement OrderSend() avec un stoploss invalide = ask (prix du marché) pour une transaction longue. Le résultat est que OrderSend() renvoie un "-1" comme prévu et mon bool var Buy_Ticket renvoie également un faux.


** EDIT **

Avez-vous manqué mes conditions "> 0" derrière OrderSend() ? Mon code original le montre :


Désolé, oui, j'ai manqué le >0.

Je suppose que c'est juste une façon si étrange de procéder que je ne l'ai pas remarqué.

 

@ BigFisherman vérifiez le code ci-dessous

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

voir ici

L'opérateur d'affectation peut être utilisé plusieurs fois dans une expression . Dans ce cas, le traitement de l'expression s'effectue de gauche à droite :

y=x=3 ;

D'abord, la variable x se verra attribuer la valeur 3, puis la variable y se verra attribuer la valeur de x, c'est-à-dire également 3.

 
GumRai:


Désolé, oui, j'ai manqué le >0.

Je suppose que c'est une façon si étrange de procéder que je ne l'ai pas remarqué.


Pas de problème.

Je suis d'accord pour dire que ce n'est pas une bonne pratique de coder de cette façon ; j'ai codé cette partie au début de mon apprentissage de MQL, mais comme elle me semblait correcte pendant tout ce temps, je l'ai laissée telle quelle jusqu'à ce que ce problème de duplication de transaction se produise. Mais apparemment, maintenant il "semble" que mon code original, bien que déroutant, semble valide, puis il revient au sujet original de ce fil de discussion "Duplicate trades..." ; cela pourrait être un bug "rare" sérieux et très malvenu dans mt4, que malheureusement je ne suis pas en mesure de reproduire en raison de son apparence rare (1 sur plus de 500+ trades).

Pour l'information de quiconque, en raison de la façon dont j'ai codé mon EA (se référer à mon 1er post dans pg5), SL & TP a été assigné seulement après qu'il ait détecté un OrderSend() réussi (IMHO est plutôt infaillible jusqu'à présent). Et ce qui est arrivé à mon précédent trade dupliqué, c'est qu'il n' a JAMAIS réussi à définir le SL & TP pour une raison inconnue ; autre que le retour de "-1" par OrderSend() mais l'ouverture d'un trade quand même OU "il" a ouvert 2 trades simultanés dans un OrderSend() ** juste ma propre spéculation **. Heureusement, j'étais juste en face de mon PC lorsque cela s'est produit, et j'ai pu le fermer manuellement ; imaginez ce qui se passerait si je partais en vacances.

 
qjol:

@ BigFisherman vérifiez le code ci-dessous

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticket renvoie vrai comme prévu. Qu'est-ce que vous essayez de dire ?

 

Je n'essaie pas de dire, je dis !

si tu l'utilises comme ça

bool Buy_Ticket = OrderSend(........) > 0;

bien sûr tu vas obtenir true si OrderSend() a été exécuté

parce que d'abord on examine si le résultat de OrderSend est > 0

et ensuite il a été passé à

Buy_Ticket

mais ce n'est toujours pas la bonne façon de le gérer

 
qjol:

Je n'essaie pas de dire, je dis !

si tu l'utilises comme ça

bien sûr tu vas obtenir vrai si OrderSend() a été exécuté

parce que d'abord on examine si le résultat de OrderSend est > 0

et ensuite il a été passé à

mais ce n'est toujours pas la bonne façon de le gérer



Maintenant je sais à qui appartient le poste à filtrer dans mql4, merci quand même pour votre contribution.
 
y=x=3;
J'ai essayé de le faire mais MetaEditor m'arrête toujours quand j'essaie de compiler.
 
BigFisherman:


Maintenant je sais à qui appartiennent les messages à filtrer dans mql4,

note : mon nom d'utilisateur dans mql5 est le même
Raison: