Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1577

 
Mihail Matkovskij:

OnTradeTransaction sera déclenché lorsqu'un ordre stop sur le serveur est déclenché.

Mais la fonction doit être prescrite ?
 
Eugen8519:
Et à travers ?

DEAL_REASON_SL
DEAL_REASON_TP

pas de

il existe un très bon exemple de OnTradeTransaction dans la documentation.

 
MakarFX:
Mais la fonction doit être prescrite ?

Si vous ajoutez une fonction spécifique à cet effet, ce serait pratique. Pourquoi pas... ?

Mais il n'est pas nécessaire d'y suivre les passages à vide, car le serveur s'en chargera et enverra un signal àOnTradeTransaction.

 
Mihail Matkovskij:

Si vous ajoutez une fonction spécifique à cet effet, ce serait pratique. Pourquoi pas... ?

Mais il n'est pas nécessaire d'y tracer le passage des stops, car cela sera fait par le serveur et il enverra un signal àOnTradeTransaction.

Misha, je ne suis pas vraiment bon en mql5, je suis juste au début,

mais je pense que nous devrions d'abord écrire quelque chose comme.

if(OnTradeTransaction(...)==....)  SendNotification ("текст");

Si je me trompe, je serai heureux de le corriger.

 
MakarFX:

Misha, je ne suis pas très bon en mql5, je commence juste à m'y mettre,

mais je pense que tu devrais d'abord écrire quelque chose comme...

Si je me trompe, je serai heureux de vous corriger.

OnTradeTransaction est un tel gestionnaire d'événements. Par conséquent, tout le code de traitement devrait s'y trouver. Ou appelez la fonction de traitement si vous le souhaitez. Voir la description dans la documentation au lien.
 
Mihail Matkovskij:
OnTradeTransaction est un tel gestionnaire d'événements. Par conséquent, tout le code de traitement devrait s'y trouver. Ou la fonction de traitement si vous voulez. Voir la description dans la documentation au lien.

Est-ce qu'on parle de la même chose ?

if(OnTradeTransaction(...)==....)  SendNotification ("текст");
 
Et ça ? Je crois que j'en ai trouvé un chez mql4.
void AlertOrder()

{

   string txt;

   double OCP;

   int i=OrdersHistoryTotal()-1;

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {                                

      OCP=OrderClosePrice();

      if (OCP==OrderStopLoss()) txt="SL";

      if (OCP==OrderTakeProfit()) txt="TP";

      }

      SendNotification(Symbol() + " hit "+txt+"");

 }
 
Eugen8519:
Et ça ? J'en ai trouvé un de mql4.
OrdersHistoryTotal

pas dans mql5

 
MakarFX:

Est-ce qu'on parle de la même chose ?

Non. Vous allez appeler le gestionnaire dans la condition (if). Mais vous n'avez pas besoin de l'appeler n'importe où. Il suffit d'écrire le code de traitement dansOnTradeTransaction et c'est tout. Examinez les paramètres qui sont transmis àOnTradeTransaction lorsqu'un stop est déclenché.

Bien que, vous devez savoir ce que sont les événements et les gestionnaires d'événements, quels sont les événements dans MQL. Alors vous commencerez à comprendre tout cela.

Voici un lien vers ce que sont les gestionnaires d'événementshttps://www.mql5.com/ru/docs/basis/function/events#ontradetransaction.

Pour éviter toute confusion, on les appelle souvent simplement gestionnaires d'événements. Par exemple, comme vous avez confonduOnTradeTransaction avec une fonction ordinaire qui est appelée dans if.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519:
Et ça ? J'en ai trouvé un de mql4.

Essayez ceci (je ne l'ai pas testé)

datetime lastclouse; 
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE) SendNotification (LastClouseProfit());
   .....   
  }  
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   ticket=HistoryDealGetTicket();
   profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
   if(profit!=EMPTY_VALUE) lastclouse=TimeCurrent();
   return(profit);
  }