Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading

Cherche aide pour adapter l'EA "Stop Loss Mover" qui ne fonctionne plus

  • Phil968

    Bonjour à toutes et tous,

    Je souhaiterais pouvoir utiliser à nouveau cet EA qui apparemment ne fonctionne plus. (Le code se trouve en fin de message).
    Je trouve plus facile de pouvoir définir un seuil précis qui permet de déplacer le SL au BE une fois ce seuil atteint.
    Dans la majorité des autres EA's se rapportant au BE, la valeur à définir est le nombre de pips.
    Personnellement, cela ne me convient pas.

    Merci d'avance à toute personne qui pourrait répondre à ma demande.

    Cordialement.
    Philippe.


    Code
    //+------------------------------------------------------------------+ //| TPSL-Insert.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" //---- input parameters //extern double TakeProfitPips=35; //extern double StopLossPips=100; extern double Move_SL_at = 0.9175; int Faktor, Digt, cnt; double TPp, SLp, Total, i; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init(){} //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit(){} //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { double OP = OrderOpenPrice(); double BCP = High[0]; double SCP = Low[0]; Total=OrdersTotal(); if(Total>0) { for(i=Total-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol()){ if(OrderStopLoss()==0 ) { if(OrderType()==OP_BUY && BCP>Move_SL_at) {SLp = OP; OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0); SendMail("","Stop Loss has just been moved to : "+DoubleToStr(SLp,5)+"" ); } if(OrderType()==OP_SELL && SCP<Move_SL_at) {SLp = OP; OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0); SendMail("","Stop Loss has just been moved to : "+DoubleToStr(SLp,5)+"" ); } } else SLp = OrderStopLoss(); }}} } Comment( "\nStop Loss will move to BE at ", Move_SL_at); /* //---------------Modify Order-------------------------- if (OrderType()==OP_BUY || OrderType()==OP_SELL) OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0); //----------------------------------------------------- */ Print ("Order Type= ",OrderType()); Print ("Open= ",OrderOpenPrice()); Print ("Ticket= ",OrderTicket()); Print ("Chart= ",OrderSymbol()); Print ("BCP= ",BCP); Print ("SCP= ",SCP); return(0); }// Start() //+------------------------------------------------------------------+
    Modifié le 2018-06-23 08:34:46 par AliX
  • kaliloup

    Vous lancez un trade manuel puis utilisez cet Expert pour modifier vos ordres ? Est ce bien cela?
  • Phil968 — en réponse à kaliloup dans son message #111404

    Oui c'est bien ça.
    Ensuite le SL est censé se déplacer au BreakEven une fois le seuil atteint (défini dans l'EA).
  • kaliloup

    Et il ne fonctionne plus chez vous? Vous n'avez trouvé aucune solution pour l'instant?
  • Phil968 — en réponse à kaliloup dans son message #111406

    Non pour le moment il ne fonctionne plus.
    Peut-être est-il trop ancien pour la version actuelle de MT4 ?
  • kaliloup

    je regarde quand j'ai un moment de libre, j’espère dans le week-end
  • Phil968

    Merci :)
  • kaliloup

    J'ai testé votre E-A et chez moi il place le stop loss au prix d'achat/ou vente, une fois que le (Move_SL_at, donc le prix que vous indiquez ) est dépassé. Bien sur nous sommes le weekend et j'ai du lancer un trade depuis ce même E-A. Un SELL en H1 le 01.05.2018 pour être précis. Je vous envoi le code que j'ai testé, essayez le et tenez moi au courant du résultat svp.


    //+------------------------------------------------------------------+
    //| TPSL-Insert.mq4 |
    //| |
    //| |
    //+------------------------------------------------------------------+
    #property copyright ""
    #property link ""

    //---- input parameters
    //extern double TakeProfitPips=35;
    //extern double StopLossPips=100;
    extern double Move_SL_at = 1.2010;


    int Faktor, Digt, cnt;
    double TPp, SLp, Total, i;

    //+------------------------------------------------------------------+
    //| expert initialization function |
    //+------------------------------------------------------------------+
    int init(){}

    //+------------------------------------------------------------------+
    //| expert deinitialization function |
    //+------------------------------------------------------------------+
    int deinit(){}

    //+------------------------------------------------------------------+
    //| expert start function |
    //+------------------------------------------------------------------+



    int start()
    {


    double OP = OrderOpenPrice();
    double BCP = High[0];
    double SCP = Low[0];
    int Ticket;

    Total=OrdersTotal();
    if (Total==0){Ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"EAName",2018,0,Red);}
    if(Total>0)
    {
    for(i=Total-1; i>=0; i--)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
    if(OrderSymbol() == Symbol()){


    if(OrderStopLoss()==0 )
    {
    if(OrderType()==OP_BUY && BCP>Move_SL_at)
    {SLp = OP;
    OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0);
    SendMail("","Stop Loss has just been moved to : "+DoubleToStr(SLp,5)+"" );
    }

    if(OrderType()==OP_SELL && SCP<Move_SL_at)
    {SLp = OP;
    OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0);
    SendMail("","Stop Loss has just been moved to : "+DoubleToStr(SLp,5)+"" );
    }
    } else SLp = OrderStopLoss();
    }}} }


    Comment(

    "\nStop Loss will move to BE at ", Move_SL_at);

    /*
    //---------------Modify Order--------------------------
    if (OrderType()==OP_BUY || OrderType()==OP_SELL)
    OrderModify(OrderTicket(),OrderOpenPrice(),SLp,TPp,0);
    //-----------------------------------------------------
    */

    Print ("Order Type= ",OrderType());
    Print ("Open= ",OrderOpenPrice());
    Print ("Ticket= ",OrderTicket());
    Print ("Chart= ",OrderSymbol());
    Print ("BCP= ",BCP);
    Print ("SCP= ",SCP);


    return(0);
    }// Start()
    //+------------------------------------------------------------------+
  • Phil968

    Parfait merci.

    Je teste cela en début de semaine et je vous tiens informé !
  • Phil968 — en réponse à Phil968 dans son message #111411

    J'ai testé l'EA mais il me semble qu'il y a un dysfonctionnement car je pense qu'une seule opération lui est nécessaire pour déplacer le SL au seuil défini.
    dans le fichier joint, vous pouvez constater un nombre important d'opération pour déplacer le SL.
    Est-ce normal ?

    Merci.
    Phil968 a joint une image
    cherche-aide-pour-adapter-l-ea-stop-loss-mover-qui-ne-fonctionne-plus-10871
  • kaliloup

    Je le test sur metatrader 4 et il fonctionne bien, sur quelle plateforme l'essayez vous?
  • Phil968 — en réponse à kaliloup dans son message #111419

    Sur MT4 également.
    je vais tenter à nouveau de placer une opération et je vous tiens informé.
  • kaliloup

    tenez moi informé car ce n'est pas normal
  • Phil968

    je constate qu'une fois le TP atteint, cet EA ouvre une nouvelle opération !!!
  • kaliloup

    Vous n'avez pas bien compris mon message.
    "J'ai testé votre E-A et chez moi il place le stop loss au prix d'achat/ou vente, une fois que le (Move_SL_at, donc le prix que vous indiquez ) est dépassé. Bien sur nous sommes le weekend et j'ai du lancer un trade depuis ce même E-A. Un SELL en H1 le 01.05.2018 pour être précis. Je vous envoi le code que j'ai testé, essayez le et tenez moi au courant du résultat svp."
    j''ai rajouté cette ligne de code:
    if (Total==0){Ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"EAName",2018,0,Red);}

    Pour lancer un trade, si aucun n'est ouvert (pour le test)
  • kaliloup

    Rajoutez simplement // devant la ligne
    if (Total==0){Ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"EAName",2018,0,Red);}

    Comme ceci:
    //if (Total==0){Ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"EAName",2018,0,Red);}
  • Phil968 — en réponse à kaliloup dans son message #111478

    Cela fonctionne bien en enlevant cette ligne.

    Un grand merci pour votre aide :)