Discussion de l'article "Le MQL5 Cookbook : Traitement de l'événement de TradeTransaction" - page 2

 

Voici les entrées du journal d'une position fermée par un Take Profit déclenché. Comment cela peut-il être détecté dans OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) ?

Ni le code de retour du const MqlTradeResult& result (result.retcode) n'est défini (0 n'est pas une option, TRADE_RETCODE_DONE = 10009) ni l'un des ids (Deal ticket, Order ticket, Request ID ) afin de les trouver sans boucler à chaque fois à travers tous les deals.

Voici le Print à la ligne #376 qui affiche les drapeaux pertinents( ?):

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
...// line 376:
   Print(__LINE__," ",counter," prc:",_ToStr2Dig(trans.price)," tckt: ",trans.position //," pTrigg :",_ToStr2Dig(trans.price_trigger)
            ," Tr.Type: ",EnumToString(trans.type)//," DL.Type : ",EnumToString(trans.deal_type)
            ," Tr.OrdType: ",EnumToString(trans.order_type)," Tr.OrdFill: ",EnumToString(trans.order_state)
            ," Tr.tckt:",trans.order," ",trans.position," ",trans.position_by
            ," retCode:",result.retcode," ",result.deal," ",result.order," ",result.deal," ",result.request_id         );
...
  }

Et voici ce que je peux lire dans le journal :

10:04:40   take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   deal #3 buy 0.01 EURUSD at 1.00171 done (based on order #3)
10:04:40   deal performed [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   order performed buy 0.01 at 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40   373  New trade operation dTime1970.01.01 09:03:41
10:04:40   376 0 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_DEAL_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_STARTED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   489 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #3 DEAL_TYPE_BUY EURUSD 0.01 lot   
10:04:40   376 1 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   383 1 prc:trans.price=1.00171   tckt: 2  res.Ord:0 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdFill: ORDER_STATE_FILLED Tr.OrdType: ORDER_TYPE_BUY Tr.tckt:3 2 0 Res::0 0 0 0 0
10:04:40   408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
10:04:40   376 2 prc:trans.price=1.00171   tckt: 2 Tr.Type: TRADE_TRANSACTION_HISTORY_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40   408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
2022.09.26 14:08:33.755    disconnected

Le terminal écrit magnifiquement "take profit triggered #2 sell 0.01 EURUSD 1.00319 sl : 1.00816 tp : 1.00171 [#3 buy 0.01 EURUSD at 1.00171]".

Alors pourquoi n'y a-t-il pas un indicateur comme TRADE_TRANSACTION_TRIGGERED_PT et TRADE_TRANSACTION_TRIGGERED_SL ?

Et le code de retour de la requête est-il toujours désactivé ?

 
Une partie de la confusion est due au fait que ENUM_ORDER_TYPE 0 = ORDER_TYPE_BUY. Un AE ne peut donc pas distinguer si la valeur du champ est définie avec ORDER_TYPE_BUY ou si elle est annulée et donc non définie - génial !!!
 

Denis, merci pour cet article ! Je l'ai lu avec intérêt, mais je n'ai pas encore pleinement réalisé ce que j'ai lu. J'ai également téléchargé votre Expert Advisor TradeProcessor et je l'ai exécuté sur mon terminal, où j'ai actuellement une position ouverte. J'ai regardé les impressions et immédiatement quelques questions sont apparues, auxquelles je veux trouver des réponses par moi-même. Si je n'y parviens pas, je vais devoir vous déranger. ))

Cordialement, Vladimir.

 
MrBrooklin position ouverte. J'ai regardé les impressions et immédiatement quelques questions sont apparues, auxquelles je veux trouver des réponses par moi-même. Si je n'y parviens pas, je vais devoir vous déranger. ))

Cordialement, Vladimir.

Je vous remercie pour votre avis. Vous êtes le bienvenu, M. Brooklin ! ))

 
Denis Kirichenko #:

Je vous remercie pour votre avis. De rien, MrBrooklin ! ))

Denis, désolé, mais sans votre aide mon esprit "explose". Voici le résultat d'une des passes de votre EA (en passant, un EA très cool !!!):

2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Проход : #100
2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Поступил запрос: изменить параметры отложенного ордера
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   ---===Транзакция===---
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет сделки: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип сделки: DEAL_TYPE_BUY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет ордера: 1030195768
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Состояние ордера: ORDER_STATE_PLACED
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера: ORDER_TYPE_SELL_STOP
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена: 1.05853
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Stop Loss: 1.(скрыл значения стоп-лосса)
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Take Profit: 1.05803
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена срабатывания стоп-лимитного ордера: 0.00000
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Торговый инструмент: EURUSDrfd
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Срок истечения отложенного ордера: 2023.10.27 00:00
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера по времени действия: ORDER_TIME_DAY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет позиции: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Объём в лотах: 0.04
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Проход : #101

Ce que je ne comprends pas :

  1. mon EA a placé un ordre en attente SELL_STOP ;
  2. Votre EA écrit - trade type DEAL_TYPE_BY (surligné en jaune). Juste au cas où, je regarde dans le Guide de référence MQL5. Il indique que DEAL_TYPE_BY est :

ENUM_DEAL_TYPE

Identifiant

Description

DEAL_TYPE_BUY

Acheter


Question - comment lors de la modification d'un ordre en attente SELL_STOP le type de transaction est déterminé à BUY ?????))

Cordialement, Vladimir.

 

Et il n'y a pas de transaction. Le placement d'un ordre en attente et son traitement n'entraînent aucune transaction. Trade ticket = 0, type = 0, où 0 est équivalent à DEAL_TYPE_BUY pour l'énumération ENUM_DEAL_TYPE. En d' autres termes, dans la structure MqlTradeTransaction trans , certains champs sont renseignés et d'autres non. Les champs non remplis sont généralement annulés.

Pour plus de détails, voir la documentation sur les ordres en attente.

Le champ deal sera renseigné pour une transaction de ce type:

TRADE_TRANSACTION_DEAL_*

Les champs suivants sont renseignés dans la structure MqlTradeTransaction pour les transactions commerciales liées au traitement des transactions (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE et TRADE_TRANSACTION_DEAL_DELETE) :

  • deal - ticket de la transaction ;
  • ordre - ticket de l'ordre sur la base duquel la transaction a été effectuée ;
  • symbole - nom de l'instrument financier dans la transaction ;
  • type - type de transaction ;
  • deal_type - type de transaction ;
  • price - prix auquel la transaction a été effectuée ;
  • price_sl - prix du Stop Loss (il est renseigné s'il est spécifié dans l'ordre sur la base duquel la transaction a été effectuée) ;
  • price_tp - Take Profit price (il est rempli, s'il est spécifié dans l'ordre, sur la base duquel la transaction a été effectuée) ;
  • volume - volume de la transaction en lots.
  • position - ticket d'une position ouverte, modifiée ou fermée suite à l'exécution d'une transaction.
  • position_by - ticket d'une contre-position. Il n'est rempli que pour les transactions visant à clôturer une position par contrepartie (out by).


Seuls 3 types de transactions appartiennent aux types "deal" : TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Denis Kirichenko #:

Et il n'y a pas de transaction. Le placement d'un ordre en attente n'entraîne aucune transaction. Trade ticket = 0, type = 0, où 0 est équivalent à DEAL_TYPE_BUY pour l'énumération ENUM_DEAL_TYPE . En d' autres termes, dans la structure MqlTradeTransaction trans , certains champs sont renseignés et d'autres non. Les champs non remplis sont généralement mis à zéro.

Pour plus de détails, voir la documentation sur les ordres en attente.

Ahhhh, c'est tout ! !! Bon sang, ça m'a cassé la tête ! ))

Je vous remercie !!!

Bien à vous, Vladimir.