Comment vérifier si un ordre a été clôturé par un stop loss ?

 

Je suis en train d'écrire un EA, en modifiant mon EA écrit pour MT4. J'ouvre un ordre en utilisant OrderSend.

Simplement si j'ai besoin de comprendre (parhasps à partir de l'historique), si l'ordre envoyé (d'ailleurs.... je dois vérifier Ordre, Deals ou Position ?), a été fermé parce qu'il a atteint le StopLoss.
J'ai vérifié sur les forums, mais je n'ai pas trouvé ce dont j'ai besoin.....

J'utilise HistoryOrderGetDouble avec le paramètreENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

ne donne que le prix actuel du symbole de l'ordre

qui ne peut pas être comparé àORDER_SL. Je suppose que ORDER_PRICE_CURRENT est uniquement le prix actuel du symbole et non le prix de clôture de l'ordre.

Merci à tous pour votre soutien.

EDIT :

Ce sujet est maintenant en grande partie obsolète en raison des nouvelles possibilités offertes par MT5 depuis la build 1640.

Voir les derniers messages du sujet pour quelques exemples.

 

Voir ce sujet, probablement un peu confus mais vous pouvez trouver l'idée.

Le système de trading MT5 est très différent de MT4, vous devez donc changer votre façon de penser.

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
 
frankge973:

Je suis en train d'écrire un EA, en modifiant mon EA écrit pour MT4. J'ouvre un ordre en utilisant OrderSend.

Simplement si j'ai besoin de comprendre (peut-être à partir de l'historique), si l'ordre envoyé (d'ailleurs.... je dois vérifier Ordre, Deals ou Position ?), a été fermé parce qu'il a atteint le StopLoss.
J'ai vérifié sur les forums, mais je n'ai pas trouvé ce dont j'ai besoin.....

J'utilise HistoryOrderGetDouble avec le paramètreENUM_ORDER_PROPERTY_DOUBLE,

ORDER_PRICE_CURRENT

ne donne que le prix actuel du symbole de l'ordre

qui ne peut pas être comparé àORDER_SL. Je suppose que ORDER_PRICE_CURRENT est uniquement le prix actuel du symbole et non le prix de clôture de l'ordre.

Merci à tous pour votre soutien.

Est-ce bien cela ?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
 
Jose Miguel Soriano:

Est-ce que c'est ça ?

La question porte sur mql5, votre code est mql4.

Lecommentaire de commande n'est pas une façon fiable de coder.

 
Alain Verleyen:

La question porte sur mql5, votre code est mql4.

Lecommentaire de commande n'est pas un moyen fiable de coder.

Désolé pour le nécro, mais c'est assez intéressant à mon avis.

Je suis en train de faire la transition de mql4 à mql5, et je trouve les changements de systèmes de trading et d'historique assez difficiles.

Pour savoir si une transaction sur le livre d'historique a été fermée pour un stop-loss, un take-profit, ou autre :

  • dans MT4 vous pouviez comparer OrderStopLoss(), OrderTakeProfit() et OrderClosePrice(), ou simplement vérifier OrderComment().
  • Dans MT5, le seul moyen possible me semble être de vérifier le commentaire d'une transaction : HistoryDealGetString(tk, DEAL_COMMENT)
MT4 et MT5, lorsqu'un ordre se ferme pour un stop-loss ou un take-profit, écrivent [prix SL] ou [prix TP] dans le commentaire (de manière différente... mais quand même).

J'ai lu l'article : https://www.mql5.com/en/forum/11996

C'est intéressant, mais si j'ai bien compris, il s'agit d'identifier les changements de transaction sur la base du traitement des événements, à la volée.

Il faut donc qu'il y ait un programme qui écoute (comme un conseiller expert qui tourne sur un graphique), sinon rien n'est détecté.

A mon avis, la détection de la raison de la fermeture d'une position doit être faite sur le livre de bord de l'historique car c'est (ou devrait être) le moyen le plus sûr de savoir ce qui s'est passé, puisque c'est écrit quelque part et non attrapé dans l'air.

Mon analyse est-elle fausse ? Qu'en pensez-vous ?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
 
Marco: MT4 et MT5, lorsqu'un ordre se ferme pour un stop-loss ou un take-profit, écrivent [prix SL] ou [prix TP] dans le commentaire (de manière différente... mais quand même).
Non, ils ne le font pas. C'est votre courtier.
Ce n'est pas une bonne idée, les courtiers peuvent modifier les commentaires, y compris les remplacer complètement.
 
whroeder1:
Non, ils ne le font pas. C'est votre courtier.

Ok, les deux courtiers MT4 et MT5 mettent cette chaîne sur le commentaire... du moins les quelques uns que j'ai testés.

Et je suis d'accord, ce n'est pas une bonne idée, puisque le commentaire peut être sujet à des changements de la part du courtier.

Mais je ne vois pas comment cela pourrait être fait différemment, puisque je ne peux pas trouver d'autres traces dans le livre de l'historique des transactions.

Existe-t-il un meilleur moyen d'atteindre cet objectif ?

 

J'ai contacté le service d'assistance il y a 2 ans (concernant MT4).

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

et ils m'ont répondu

Cela se fait automatiquement avec chaque courtier. Et aussi le courtier peut changer cette valeur lui-même.

donc c'est fait par le système, pas par le courtier. Ce n'est toujours pas utile si le courtier peut ensuite le changer.

Attention, je n'ai jamais remarqué que le courtier avait modifié le commentaire de l'ordre.

En général, dans mon code, il est plus important de savoir si une transaction s'est terminée avec un profit ou une perte. Lorsqu'on utilise un stop suiveur, une transaction peut toucher le SL, tout en restant bénéficiaire.

 
Keith Watford:

J'ai contacté le service d'assistance il y a 2 ans (concernant MT4).

et ils m'ont répondu

donc c'est fait par le système, pas par le courtier. Ce n'est toujours pas utile si le courtier peut ensuite le modifier.

Attention, je n'ai pas remarqué d'occasion où le courtier a modifié le commentaire de l'ordre.

En général, dans mon code, il est plus important de savoir si une transaction s'est terminée avec un profit ou une perte. Lorsqu'on utilise un stop suiveur, une transaction peut toucher le SL, tout en restant bénéficiaire.

Merci Keith, c'est ce que j'espérais, puisque je n'ai pas trouvé de meilleure solution.

 
honest_knave:
Je crois que les deux posters convertissent MQL4 en MQL5.

Quoi qu'il en soit, il suffit de comparer le prix de clôture avec le prix stoploss.

Note : Dans un compte réel (surtout ECN), le prix de déclenchement a probablement un écart entre le prix du stoploss préétabli, donc utilisez "<=" ou ">=".

 
Xiangdong Guo:

Quoi qu'il en soit, il suffit de comparer le prix de clôture avec le prix stoploss.

Note : Dans un compte réel (surtout ECN), le prix de déclenchement a probablement un écart entre le prix stoploss préétabli, donc utilisez "<=" ou ">=".

Vous ne pouvez pas comparer le prix de clôture au prix stop-loss. Le glissement signifie qu'il pourrait clôturer plus haut ou plus bas que le stop loss.

Donc "<=" ou ">=" n'est pas utile.