Mon compte
Déjà membre ? S'identifier
Non inscrit ? S'inscrire
 
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Nouveau membre raston est sur la route de la réputation...
    Date d'inscription
    May 2010
    Messages
    3
    Pouvoir de réputation
    4

    comment ajouter un stop loss ? comment ajouter un stop loss ?

    Bonjour a tous,
    je débute, et j'essaie de modifier des choses simples pour commencer....
    je prends l'indicateur macd sample fourni avec metatrader.
    j'aimerais qu'au moment ou il prend une position,
    il ajoute en meme temps directement un stoploss a disons 30 pips d'ecart.
    j'ai essayé plein de choses mais rien n'a fonctionné. comme je ne maitrise pas grand chose pour le moment je dois surement faire des erreurs stupides.
    je m'en remets donc a vos lumieres.
    si vous pouviez me dire quoi ajouter et a quel endroit dans le code ca serait tres sympa de votre part.
    a tout hasard, je vous colle le code de l'indicateur que j'essaie de bidouiller (l'original)
    merci d'avance.
    //+------------------------------------------------------------------+
    //| MACD Sample.mq4 |
    //| Copyright © 2005, MetaQuotes Software Corp. |
    //| MetaTrader 4 Trading Platform / MetaQuotes Software Corp. |
    //+------------------------------------------------------------------+

    extern double TakeProfit = 50;
    extern double Lots = 0.1;
    extern double TrailingStop = 30;
    extern double MACDOpenLevel=3;
    extern double MACDCloseLevel=2;
    extern double MATrendPeriod=26;

    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int start()
    {
    double MacdCurrent, MacdPrevious, SignalCurrent;
    double SignalPrevious, MaCurrent, MaPrevious;
    int cnt, ticket, total;
    // initial data checks
    // it is important to make sure that the expert works with a normal
    // chart and the user did not make any mistakes setting external
    // variables (Lots, StopLoss, TakeProfit,
    // TrailingStop) in our case, we check TakeProfit
    // on a chart of less than 100 bars
    if(Bars<100)
    {
    Print("bars less than 100");
    return(0);
    }
    if(TakeProfit<10)
    {
    Print("TakeProfit less than 10");
    return(0); // check TakeProfit
    }
    // to simplify the coding and speed up access
    // data are put into internal variables
    MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,0);
    MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE _MAIN,1);
    SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MOD E_SIGNAL,0);
    SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MO DE_SIGNAL,1);
    MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRIC E_CLOSE,0);
    MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1);

    total=OrdersTotal();
    if(total<1)
    {
    // no opened orders identified
    if(AccountFreeMargin()<(1000*Lots))
    {
    Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);
    }
    // check for long position (BUY) possibility
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
    MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+ TakeProfit*Point,"macd sample",16384,0,Green);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
    }
    else Print("Error opening BUY order : ",GetLastError());
    return(0);
    }
    // check for short position (SELL) possibility
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
    {
    ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
    if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("SELL order opened : ",OrderOpenPrice());
    }
    else Print("Error opening SELL order : ",GetLastError());
    return(0);
    }
    return(0);
    }
    // it is important to enter the market correctly,
    // but it is more important to exit it correctly...
    for(cnt=0;cnt<total;cnt++)
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()<=OP_SELL && // check for opened position
    OrderSymbol()==Symbol()) // check for symbol
    {
    if(OrderType()==OP_BUY) // long position is opened
    {
    // should it be closed?
    if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
    MacdCurrent>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if(Bid-OrderOpenPrice()>Point*TrailingStop)
    {
    if(OrderStopLoss()<Bid-Point*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
    return(0);
    }
    }
    }
    }
    else // go to short position
    {
    // should it be closed?
    if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
    MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // close position
    return(0); // exit
    }
    // check for trailing stop
    if(TrailingStop>0)
    {
    if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
    {
    if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red);
    return(0);
    }
    }
    }
    }
    }
    }
    return(0);
    }
    // the end.

  2. #2
    Membre Star gillou33 est actif et passionnant gillou33 est actif et passionnant gillou33 est actif et passionnant
    Date d'inscription
    June 2008
    Localisation
    nord
    Messages
    1 293
    Pouvoir de réputation
    28

    bonjour raston ...le fichier que tu as n'a pas la fonction d'ajouter des stop ou des takes profit car il ne fait pas de modifications d'ordres a lui tout seul
    donc si tu desires ajouter des sl ou tp il te faut un autre Expert Advisor (EA) qui est voue a cela ou alors il faut le faire a la main ...c'est tres facile une fois l'ordre en place il te suffit de cliquer dessus et de modififier
    par contre je vais te mettre un ea dont je me sert souvant il va super bien et il est tres simple
    il faut donc le mettre dans le repertoir de ton broker dans la categorie des experts
    attention si tu a une plateforme avec 5decimals il faut multiplier par 10 exemple tu veux un stop loss de 30pips il faut mettre 300...pour les plateformes 4digits pas de soucis ...
    je l'ai regle pour toi a 30 pips de sl et 30pips de tp pour une plateforme 4decimales
    pour le mettre en route il suffit simplement de le mettre sur un autre graph pas d'importance
    regardes sourtout si tu as coche les options trading automatique et si le smiley en haut a gauche sur le graph ou tu as mis l'ea est sur le sourire
    donc si tout va bien des que macd sample va passer un ordre l'expert va te le corriger tout seul sur le sl et tp
    ps) il faut que ce soit superieur au limites autorisees par ton broker exemple FxPro il faut etre au dessus de 5pips (50) en dessous cela marche pas
    si tu as un probleme n'esites pas a demander
    Fichiers attachés
    Dernière modification par gillou33 ; 10/05/2010 à 16h44.

  3. #3
    Nouveau membre raston est sur la route de la réputation...
    Date d'inscription
    May 2010
    Messages
    3
    Pouvoir de réputation
    4

    Salut Gillou33
    merci a toi, je vais essayer ca des que j'aurais les yeux en face des trous, ca fait 2 semaines que je bouffe 10 heures de graphique par jour et je crois que mon cerveau a besoin d'au moins une journée sans voir de lignes vertes rouges ou de bougies
    Si je comprends bien ton explication mon macd sample ouvrirait le thread, et ton auto sl-tp le modifierai pour y ajouter les sl et tp.
    Il n'y a pas moyen de modifier le macd sample pour qu'il fasse tout ca tout seul? par exemple en réunissant le code des 2 dans un seul nouveau expert?
    question peut etre stupide au demeurant mais je ne vois pas ce qui pourrait l'empecher, merci de m'éclairer sur point.
    bonne soirée
    Raston

  4. #4
    Membre Star gillou33 est actif et passionnant gillou33 est actif et passionnant gillou33 est actif et passionnant
    Date d'inscription
    June 2008
    Localisation
    nord
    Messages
    1 293
    Pouvoir de réputation
    28

    re...bon c'est certainement possible mais faut refaire carrement un nouveau expert avec le macd en lui ajoutant des sl et tp
    perso je sais pas faire !! mais l'ea auto st tp ne gene pas du tout on peut le mettre en aveugle sur un autre graph ouvert et il place le sl tp sur le premier tick
    essayes toujours celui la avant de trouver une personne pour faire un macd sample mod...

  5. #5
    Membre lvl 25 ericbully est sur la route de la réputation...
    Date d'inscription
    October 2009
    Localisation
    Lyon
    Messages
    30
    Pouvoir de réputation
    5

    Bonjour,

    Je ne m'y connais pas trop mais pourquoi ne pas mettre le SL dans le Ordersend ???

    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,"macd sample",16384,0,Green);

    Et définir le SL avec extern double StopLoss = 30; au début.

    Le TrailingStop modifie le Stoploss s'il est activé.

    Tu as essayé Raston ?

  6. #6
    Nouveau membre raston est sur la route de la réputation...
    Date d'inscription
    May 2010
    Messages
    3
    Pouvoir de réputation
    4

    j'avais bien mis le extern double, mais pour le reste je ne savais pas comment faire, en tous cas ca ressemble beacoup a ce que j'essayais de faire
    je vais essayer ca aussi
    merci

  7. #7
    Membre lvl 25 pontch est sur la route de la réputation...
    Date d'inscription
    May 2010
    Messages
    46
    Pouvoir de réputation
    4

    La solution d'Eric doit marcher, Tu peux en effet mettre le stop loss directement dans ton order send.

    Voila le code que j'utilise perso.

    res=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-stopLoss*Point,Ask+takeProfit*Point,"",MAGICMA,0,B lue);
    if(res==-1){
    DisplayError(1);
    if (debug==true) Alert("lot:"+lot+" stoploss:"+stopLoss+" takeProfit:"+takeProfit);
    return(-1);
    }
    Dernière modification par pontch ; 16/05/2010 à 06h28.

Discussions similaires

  1. Réponses: 64
    Dernier message: 17/02/2012, 17h16
  2. stop loss garanti??
    Par tyburon88 dans le forum Novice sur le Forex
    Réponses: 4
    Dernier message: 26/04/2010, 15h18
  3. Trailing stop et stop loss
    Par dinemma dans le forum Trading Divers
    Réponses: 61
    Dernier message: 02/10/2009, 09h58
  4. placer son stop loss
    Par SKULL57 dans le forum Novice sur le Forex
    Réponses: 3
    Dernier message: 29/10/2008, 17h01
  5. Stop Loss
    Par cima dans le forum Novice sur le Forex
    Réponses: 9
    Dernier message: 31/01/2008, 18h44

Ajouter aux Favoris | Plan du site | Archives | Forex | Contact