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

Fermeture de toutes les positions simultanément à un profit précis

  • Sunjo

    salut les traders
    Peut être que vous pouvez m'aider
    Je cherche à fermer automatiquement l'ensemble de mes positions quand j'arrive a un Profit déterminé à l'avance sur MT4

    Merci d'avance
  • riden

    Salut,
    Tu n'as pas déterminé si le profit doit être en pips ou en monnaie investie donc j'ai fait une fonction qui permet les 2 cas

    Code
    double profit_monnaie (){ double a = 0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ a = a+OrderProfit();}}return(a);} double profit_pips (){ double a =0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY) a = a + ((Bid-OrderOpenPrice())/MarketInfo(Symbol(),MODE_POINT))/10; if(OrderType()==OP_SELL) a = a + ((OrderOpenPrice()-Ask)MarketInfo(Symbol(),MODE_POINT))/10; }} return(a);} void close_all (){ for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),3,CLR_NONE); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),3,CLR_NONE);}}} void close_profit(string type, double valeur){ if(type=="monnaie"){ if(profit_monnaie()>=valeur) close_all();} if(type=="pips"){ if(profit_pips()>=valeur) close_all();} } //exemple // close_profit("pips", 65); --> permet de clôturer toute les positions si le profit flottant atteint 65 pips
    Modifié le 2014-02-18 22:43:36 par riden
  • Sunjo — en réponse à riden dans son message #91657

    Salut riden,

    Un grand merci à toi et bravo pour ce code à la volée !!!

    J'ai toutefois une question :

    Qu'est ce que le profit flottant ?

    Est ce que ça prend en compte les trades déjà perdants depuis un instant T? je ne sais pas si je suis clair.

    Par exemple on a un solde de 1000 € au départ

    On ouvre 5 positions dans la matinée, et en général les perdants se clôturent plus rapidement, donc le profit flottant tient il compte des premiers trades perdants pour arrêter les positions à un profit de 65 € déterminé par ton code ?
    Donc tant que le solde n'est pas à 1065 € on ne ferme rien quite à se prendre tous les Stop Loss
  • riden

    Salut,
    Ok j'ai compris, (tu ne l'as pas préciser au début ;) ). Voilà ,cette fois ci, tu détermines une date ,et après, tout les trades fermés et les trades encore ouverts à partir de cette date seront pris en compte

    Code
    datetime j = D'2014.02.20 08:00'; //c'est la date de départ (heure de la plateforme pas l'heure locale) double profit_monnaie (){ double a = 0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if((OrderType()==OP_BUY)||(OrderType()==OP_SELL)){ a = a+OrderProfit();}}}return(a);} double profit_pips (){ double a =0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY) a = a + ((Bid-OrderOpenPrice())/Point)/10; if(OrderType()==OP_SELL) a = a + ((OrderOpenPrice()-Ask)/Point)/10; }} return(a);} double profit_monnaie_his(datetime date){ double a = 0; for(int k=OrdersHistoryTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_HISTORY)){ if((OrderOpenTime()>=date)&&(OrderCloseTime()>0)){ if((OrderType()==OP_BUY)||(OrderType()==OP_SELL)){ a = a+OrderProfit();}}}}return(a);} double profit_pips_his(datetime date){ double a = 0; for(int k=OrdersHistoryTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_HISTORY)){ if((OrderOpenTime()>=date)&&(OrderCloseTime()>0)){ if(OrderType()==OP_BUY) a = a + ((OrderClosePrice()-OrderOpenPrice())/Point)/10; if(OrderType()==OP_SELL) a = a + ((OrderOpenPrice()-OrderClosePrice())/Point)/10; }}} return(a);} void close_all (){ for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); if((OrderType()!=OP_BUY)&&(OrderType()!=OP_SELL)) OrderDelete(OrderTicket());}}} void close_profit(string type, double valeur, datetime date){ if(type=="monnaie"){ if ((profit_monnaie()+profit_monnaie_his(date))>=valeur) close_all();} if(type=="pips"){ if((profit_pips()+profit_pips_his(date))>=valeur) close_all();} } //exemple // close_profit("pips", 65, j); --> permet de clôturer toute les positions si le profit depuis le 20 fév 8:00 atteint 65 pips
  • Sunjo — en réponse à riden dans son message #91711

    T'es doué encore bravo !

    Bon je vais testé ton code et je te tiendrai au courant.

    Comme je code en VBA j'arrive un peu à relire le code que tu as écris, les boucles, les déclarations de variable ... ça ressemble un peu. Par contre tout ce qui concerne MT4, OP_BUY ou CLR_NONE ... cette bibliothèque de commande, tu la trouves à quel endroit ?

    En tout cas c'est vraiment super merci encore
  • riden

    c'est sur le site de mql que tu trouves toute cette bibliothèque
    http://docs.mql4.com/
    c'est un langage facile à maîtriser (très proche du C, ça permet de gagner beaucoup de temps au niveau des tests & optimisations des stratégies)
  • cyrus_romanov2013 — en réponse à riden dans son message #91768

    Cher Riden Merci a vous et à celui qui a voulu cet indicateur sunjo.
    en effet je souhaiterais l'utiliser aussi mais puisque je ne suis pas programmeur et ne sais pas:
    1- comment integrer ce code sur ma plateforme MT4.
    2- si je veux changer la date de depart comment faire.
    3- si je veux changer la valeur du profit au quel il doit fermer les positions comment faire.
    y a t-il aussi une date à laquelle il devra fermer toutes les operations meme si elle son perdantes?
    Merci t'es un genie
  • evasion — en réponse à riden dans son message #91657

    bonjour
    je pense que tout cela est modifiable ?
    et comme je ne comprend rien peu tu compiler le programme 'c'est un ea ou un script etc je ne sait pas )

    merci