OnTradeTransaction - page 5

 
Anatoli Kazharski:
Oui, c'est à peu près ça. Je ne l'ai pas encore testé de cette façon.

Essayez-le...

Ajouté par

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
    if(trans.symbol==Symbol())
    {
      if(проверяем магик)
      {    
        //Сработал SL или TP
      }
    }
  }
break;
 
prostotrader:

Quel est le problème de cette méthode ?

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
   //Сработал SL или TP
  }
break;

Parce que les dernières positions SL et TP connues peuvent ne pas coïncider avec le prix de la transaction et qu'il n'y aura rien à quoi le comparer.

Et vous n'aimez pas partager vos codes, mais vous regardez ceux des autres avec grand plaisir...

Cela ne fonctionnera pas toujours :

int    G_LastTicket  = 0;   //Последний известный тикет
double G_LastSLlevel = 0.0; //Последний известный уровень SL
double G_LastTPlevel = 0.0; //Последний известный уровень TP
//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
  {
    if(PositionsAny (G_Symbol))
    {
      G_LastSLlevel = GetSLlevel (G_Symbol);
      G_LastTPlevel = GetTPlevel (G_Symbol);
      Print ("SLlevel: " + G_LastSLlevel);
      Print ("TPlevel: " + G_LastTPlevel);
    }
    
    if(trans.deal != G_LastTicket)
    {
      if(trans.price == G_LastSLlevel)
        Print ("Сработал SL");
        
      if(trans.price == G_LastTPlevel)
        Print ("Сработал TP");
    }
  }
}
 
prostotrader:
Essayez-le...
Je vais essayer un jour, c'est sûr. Je vais essayer un jour. Merci. Je suis occupé par d'autres tâches en ce moment.
 
prostotrader:

Quel est le problème de cette méthode ?

Devrait stockermon_bon_de_commande
 
fxsaber:
Vous devez gardermon ticket de commande.

Est-ce que tu sais au moins de quoi tu parles ?

my_order_ticket - cette commande a un endroit où vivre si vous avez

et vous êtes obligé de les garder.

 
fxsaber:
Vous devez stockermon ticket_de_commande
Pas seulement ça.
 
Anatoli Kazharski:
Je vais essayer un de ces jours. Merci. (gloussements) Je suis occupé par d'autres tâches en ce moment.
Bonne chance avec le code !
 
Andrey Dik:
Pas seulement ça.

Oui, il est en fait proposé de maintenir et de stocker l'environnement réel lui-même, en le comparant à ce que produit OnTradeTransaction.

Ce n'est pas une solution.

 
fxsaber:

Oui, il est en fait proposé de maintenir et de stocker l'environnement réel lui-même, en le comparant à ce que produit OnTradeTransaction.

Ce n'est pas une solution.

Vous ne suivez pas le sujet de près. :)

L'auteur du sujet original a écrit :

"Comment puis-je savoir dansOnTradeTransaction() que le SL/TP s'est déclenché ? "

Quelle devrait être la solution ?

Vous ne pouvez rien retenir ou vérifier, sauf la position elle-même, à condition que

Vous n'avez pas opéré d'autres commandes

case TRADE_TRANSACTION_DEAL_ADD:
  if (!PositionSelect(Symbol())
  {
   //Сработал SL или TP

  }
break;
 
prostotrader:

Vous ne suivez pas le sujet de près. :)

L'auteur du sujet original a écrit :

C'est vous qui êtes plutôt inattentif, je ne suis pasl'initiateur du sujet.

Vous devriez également montrer un code comme celui-ci :

//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  
}  

Eh bien, qu'est-ce qui ne va pas - qui en a besoin, le termine lui-même, ne l'aime pas - il y a un joba ! C'est vrai ?