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 programmer un EA, 0% de perte

  • Mojolesinge

    Bonjour à tous et à toutes,

    Je suis actuellement en train d'essayer de programmer (avec mon humble niveau) un EA pour trader en micro sur l'EURUSD.

    Je bloque sur une condition qu'il m'est impossible avec mes connaissances (et après avoir tout essayé) de programmer correctement afin que l'EA fonctionne correctement.

    Le concept en deux mots est très simple :

    - en micro lorsque l'on ouvre un trade le spread n'est pas pris en compte à cause de l'arrondi au centime d'euro aussi cela permet si le cours n'est pas favorable de clore des positions sans pertes aucunes jusqu'à 3,5pips maximum (au-delà l'arrondi de MT4 crée une perte de -0,01).

    - de plus l'arrondi de mt4 permet de faire un profit de 0,01 à partir de 5,5pips

    - aussi l'idée est d'ouvrir simultanément deux positions opposées BUY et SELL et de fermer automatiquement celle qui quelques minutes plus tard n'est pas dans la bonne direction pour la rouvrir au cours actuel dans le cas ou le vent tournerait, et ainsi de suite quelque soit la position.

    - en clair, on ouvrirai et fermerai des positions en continu jusqu'à valider le trade qui rapporterai 0,01 (souvent assez rapidement)

    - et l'on recommence.


    Evidemment cela ne fait pas forcement très envie de gagner seulement quelques centimes peut-être euros par jour mais pour ma part n'ayant que des moyens limités pour l'instant et désirant aller jusqu'au bout de mon idée, cela me convient totalement.

    Manuellement c'est très facile et ca marche à chaque fois : 0 pertes pour 100% de profit.

    Le but maintenant est de créer un robot qui fasse cela en automatique.

    Voici le code que j'ai réussi à faire jusque là, les notes sont adjointes directement dessus pour faciliter la lecture.

    En vous remerciant de l'intérêt que vous portez à ma requête.


    Code
    //+------------------------------------------------------------------+ //| Test3.mq4 | //+------------------------------------------------------------------+ double lots=0.01; double takeprofit=5.5; double point=0.0001; int ticket; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() // Ouvrir à l'initialisation deux position opposé avec TakeProfit, OK fonctionne { //--------------------- ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Red); ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Blue); //--------------------- //--------------------- int totalorders = OrdersTotal(); for(int i=totalorders-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS); if ( OrderSymbol()==Symbol()) { if ( OrderType() == OP_BUY ) { OrderModify(OrderTicket(),OrderOpenPrice(),NULL,OrderOpenPrice()+takeprofit*point,0,Blue);} if ( OrderType() == OP_SELL ) { OrderModify(OrderTicket(),OrderOpenPrice(),NULL,OrderOpenPrice()-takeprofit*point,0,Red);} } } //--------------------- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() //A chaque tick vérifier que pour la position BUY : Ask soit < OrdenOpenPrice //alors fermer position BUY et ouvrir nouvelle position BUY avec TakeProfit //sinon ne rien faire { //--------------------- int totalorders = OrdersTotal(); for(int i=totalorders-1;i>=0;i--) { OrderSelect(i, SELECT_BY_TICKET); if ( OrderSymbol()==Symbol()) { if ( OrderType() == OP_BUY) { if ( Ask < OrderOpenPrice() ) //<<<<<<< la condition en question sur laquelle //<<<<<<< je bloque et qui ne fonctionne pas { OrderClose(OrderTicket(),lots,OrderOpenPrice(),0,Blue); OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Blue); if ( OrderType() == OP_BUY ) { OrderModify(OrderTicket(),OrderOpenPrice(),NULL,OrderOpenPrice()+takeprofit*point,0,Blue); } } } } } //--------------------- //A chaque tick vérifier que pour la position SELL : Bid soit > OrdenOpenPrice //alors fermer position SELL et ouvrir nouvelle position SELL avec TakeProfit //sinon ne rien faire //--------------------- for(i=totalorders-1;i>=0;i--) { OrderSelect(i, SELECT_BY_TICKET); if ( OrderSymbol()==Symbol()) { if ( OrderType() == OP_SELL) { if ( Bid > OrderOpenPrice() ) //<<<<<<< la condition en question sur laquelle //<<<<<<< je bloque et qui ne fonctionne pas { OrderClose(OrderTicket(),lots,OrderOpenPrice(),0,Blue); OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Blue); if ( OrderType() == OP_BUY ) { OrderModify(OrderTicket(),OrderOpenPrice(),NULL,OrderOpenPrice()+takeprofit*point,0,Blue); } } } } } //--------------------- } //+------------------------------------------------------------------+
  • PetitTrader

    L'idée est bonne ;). Tu a avancé sur ton projet ?
  • Mojolesinge — en réponse à PetitTrader dans son message #108202

    Oui j'ai finalisé le code entre temps et je l'ai testé.
    Résultat 100% de gain, 0 de perte comme prévu.
    Le seul Hic : trop de positions ouvertes et fermés par jour et je me suis fait viré de mon broker.
    Ils ne rigolent pas...
    Je me serai fais tout de même 24 euros et quelques en un jour donc j'en sors gagnant ^^
  • ArtWave

    Salut Mojo !

    Effectivement ils rigolent pas les brokers... Tu avais pris lequel ?
    Ecoute j'ai peut être une proposition pour toi.

    Contacte moi par mp si tu veux en savoir plus,
    Joseph.