COMMENT MODIFIER SON STOP LOSS APRÈS LA PRISE DE POSITION AVEC UN BOT !?

 
Bonjour à tous, 

après plusieurs de jours de programmation je suis bloqué. J'aimerai modifier mon STOP LOSS avec un signal. J'ai déjà le signal, mais je n'arrive pas à faire bouger mon SL sur un point fixe prédefinie dans mon BOT (je ne chercher pas un SL suiveur). 

Si vous pouvez m'aider, je vous serais très reconnaissant. 

Merci amis TRADER.
 

Essaie cette syntaxe :


#include <Trade\Trade.mqh>

 CTrade trade;


If (Condition) trade.PositionModify(ticket, sl, tp);

 
Merci de m'avoir répondu  "J M".

Alors j'ai déjà essayé, je te montre un boute mon code et si tu peux jeter un petit coup d'œil 😅. 


   CTrade trade;


   int Signal = (Signal_Stop_Loss (symbolName, timeframe, (ENUM_POSITION_TYPE) PositionGetInteger (POSITION_TYPE)) == 0);  

   ulong ticket = getLastTicket (symbolName);

         

   { if (Signal == 1) trade.PositionModify (ticket, PositionGetDouble(POSITION_SL) * (+ 151), PositionGetDouble(POSITION_TP)); } 

 

Apparemment, tu ne procèdes pas de la bonne manière :

1) D'abord, tu dois commencer par inclure la syntaxe " #include <Trade\Trade.mqh> " avant " CTrade trade ".

2) Les nouvelles valeurs de ton Tp/Sl doivent être calculées plutôt à partir du prix d'entrée de la position, et non à partir des valeurs de Tp/Sl qui sont déjà là. Aussi, ces nouveaux  Tp/Sl doivent être calculées en dehors de la fonction "  trade.PositionModify ", pas dedans.


En d'autres termes, tu as besoin d'une boucle qui te retourne le ticket et prix d'entrée de chaque position ouverte. Et, à partir de ce prix d'entrée, tu calcules ton nouveau  Tp/Sl.


Par exemple :

If (Condition)     // Ta condition, qui, une fois vérifiée, devrait nécessiter une modification de ton Tp/Sl

  {

    for (int i = 0; i < PositionsTotal(); i ++)

       {

         ulong  ticket         = PositionGetTicket(i);

         double priceEntry  = PositionGetDouble(POSITION_PRICE_OPEN),

         nouveauTp             = priceEntry   + 151,

         nouveauSl              =   priceEntry   - 151;


         trade.PositionModify(ticket,  nouveauSl,  nouveauTp);

      }

 }


Voilà ! Ceci n'est qu'un exemple... Mais c'est une logique de ce genre que tu dois implémenter pour pouvoir avoir le résultat que tu recherches. Merci

 

Aussi, j'aimerai ajouter un élément :

Si tu veux calculer ton nouveau Tp/Sl à partir de valeurs des Tp/Sl existantes, selon ta stratégie, ce n'est pas aussi un problème. Tu peux bien le faire. Seulement, je te conseille d'utiliser des variables intermédiaires (telles que nouveauTp/NouveauSl comme je t'ai suggéré là) afin de faire ces calculs en dehors et avant la fonction    trade.PositionModify ", pas dedans.

Et dans ce cas, tu ferais par exemple :

nouveauTp =  PositionGetDouble(POSITION_TP);       // (Ici, on suppose, j'espère, que tu veux conserver la même valeur...)

NouveauSl =  PositionGetDouble(POSITION_SL) + 151;


trade.PositionModify(ticket,  nouveauSl,  nouveauTp);

 
Je te remercie pour tous tes conseils J M, je te tiens au courant 😅