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

EA Close all trade

  • thebud49

    Bonjour a tous,

    je suis à la recherche d'un EA et non pas un script qui tournerait constamment en parallèle d'un Expert sur un autre graph pour clôturer tous mes trades sur un montant definie de perte et sur un nombre de trade.
    exemple: je m'autorise a prendre une série de 10 position avec un autre EA et si une 11 eme est lancé l'ea coupe toutes les positions en cours .

    Vous me seriez d'une aide précieuse car je cherche sur le net mais je trouve pas ce que je veux
    Modifié le 2013-10-19 17:04:33 par thebud49
  • greg3395

    tu veut créer un EA money mpanagement , c'est pas bête.
    il faut que tu utilise la fonction OrderProfit
    qui sert a récupérer le profil d'un ordre que tu as ouvert, il retourne une variable double mais pas gênant
    Modifié le 2013-10-19 18:22:05 par greg3395
  • riden — en réponse à thebud49 dans son message #83899

    thebud49, le 19/10/2013 dit :
    .... pour clôturer tous mes trades sur un montant definie de perte ET sur un nombre de trade.



    thebud49, le 19/10/2013 dit :
    .... exemple: je m'autorise a prendre une série de 10 position avec un autre EA et si une 11 eme est lancé l'ea coupe toutes les positions en cours ..


    Ta demande manque de précision
    Tu voulez dire ET ou OU ? (dans le 1er paragraphe)
    ça prend en charge les ordre diff ? les ordres manuel ?

    je t'ai fais la fonction que tu as besoin :
    tu as le choix entre ET et OU
    ça ne prend pas en charge les ordres diff
    ça ne prends pas en charge les ordres manuel (sauf si tu enlèves magic number)
    (n'oublie pas de mettre le magic number de l'autre EA, et de bien remplir "choix"



    Code
    int magic = 777; void fonction (int profit,int posmax, string choix){ int a = 0; int b = 0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ a = a+OrderProfit();}}} for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_SELL) b++; if(OrderType()==OP_BUY) b++;}}} if(choix == "profitETposmax" ){ if ( (a<profit) && (b>=posmax)){ for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);} if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);}}}}}} if(choix == "profitOUposmax" ){ if ( (a<profit) || (b>=posmax) ){ for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);} if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);}}}}}} }
    Modifié le 2013-10-19 21:31:07 par AliX
  • thebud49

    Merci Riden^^

    et bien pour la petite précision c'est soit l'EA coupe sur le montant de finie de perte ou soit il coupe au nombre maxi de Trade ouvert.

    Si un des 2 paramètres est atteint il coupe tous

    Je te remercie pour ta réponse rapide et pour ton aide très précieuse
  • forexensemble — en réponse à thebud49 dans son message #83899

    thebud49, le 19/10/2013 dit :
    Bonjour a tous, je suis à la recherche d'un EA et non pas un script qui tournerait constamment en parallèle d'un Expert sur un autre graph pour clôturer tous mes trades sur un montant definie de perte et sur un nombre de trade. exemple: je m'autorise a prendre une série de 10 position avec un autre EA et si une 11 eme est lancé l'ea coupe toutes les positions en cours . Vous me seriez d'une aide précieuse car je cherche sur le net mais je trouve pas ce que je veux

    Pourquoi n'ajoutes-tu pas cette fonction dans ton ea plutôt que d'en créer un deuxième ?
    Modifié le 2013-10-20 21:26:38 par forexensemble
  • forexensemble

    @ridden,

    je trouve risqué de ne pas gérer les erreurs dans le code que tu proposes car, s'il est intégré à un processus automatique, le risque de voir un ou plusieurs OrderClose rejetés par le serveur est bien réel. S'il s'agit d'un script qu'on exécute en manuel, on le voit. Par contre, s'il est exécuté en mode EA, là, le risque existe vraiment. C'est d'autant plus important que si seul un ordre est fermé au lieu de tout le panier ouvert, l'autre EA pourra ouvrir un nouvel ordre sans que cela ne réenclenche le processus de clôture automatique.

    Qu'en penses-tu ?
  • riden — en réponse à forexensemble dans son message #84011

    Salut,
    Oui tu as raison,
    mais, il a demandé une fonction pour la mettre dans un EA séparé, j'ai donné le corps principale de la fonction c'est tout. Car la gestion des erreurs entre deux EA est un peu complexe, les 2 EA doivent communiquer (via un fichier texte par exemple puis il faut gérer toute les combinaisons possibles) .
    Si la fonction est incluse dans le EA ça devient plus simple mais après c'est au trader de voir ce qu'il faut faire selon les erreurs (arrêter des fonctions et laisser tourner d'autres ou autres plans...)




    Code
    int magic = 777; void fonction (int profit,int posmax, string choix){ int a = 0; int b = 0; for(int k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ a = a+OrderProfit();}}else Print("error",GetLastError());} for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_SELL) b++; if(OrderType()==OP_BUY) b++;}}else Print("error",GetLastError());} if(choix == "profitETposmax" ){ if ((profit!=0) && (posmax!=0) && (a<profit) && (b>=posmax)) { for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_BUY){ if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE))Print("error",GetLastError());} if(OrderType()==OP_SELL){ if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE))Print("error",GetLastError());}}}else Print("error",GetLastError());}}} if(choix == "profitOUposmax " ){ if ( ((profit!=0) && (a<profit)) || ((posmax!=0) && (b>=posmax)) ) { for(k=OrdersTotal()-1;k>=0;k--){ if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==magic){ if(OrderType()==OP_BUY){ if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE))Print("error",GetLastError());} if(OrderType()==OP_SELL){ if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE))Print("error",GetLastError());}}}else Print("error",GetLastError());}}} }
    Modifié le 2013-10-22 16:59:13 par AliX
  • forexensemble

    En effet, c'est délicat.

    Le plus simple, si tu veux faire communiquer 2 EA ou scripts ou indicateurs, c'est de passer les paramètres par des variables globales.

    J'utilise par exemple cette solution pour séparer les sessions lorsque j'utilise le même EA sur plusieurs graphiques de la même paire. Cela permet de trader, par exemple, des stratégies différentes sur la même paire sans qu'il y ait collision.

    Les variables globales sont mémorisées sur la plateforme. Ainsi, le système les conserve même en cas de plantage (si, si, sous Windows, ya des plantages... ;) ).