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

Mon premier Robot Expert Advisor (Macd, CCI, BBands)

  • Lorka85

    Bonjour a tous.
    Je me lance dans un robot relativement simples, mais que je ne pense pas moin efficace.

    En gros je m'inspire de la méthode Safe 3 de Forex88 (alias eric david) :
    http://forex-trading-coaching.com/techniques-et-decouvertes/systeme-safe-3/
    En gros pour résumé :
    Si la tendance de fond (MACD 5/35/5 en Daily) + la MACD 5/35/5 en H1 , le CCi 14 en H1, le BBANDS est en valeur positif (trend montant) et bien il prend position a l'achat a l'ouverture de la nouvelle bougie. inversement pour la vente.

    J'ai juste une petit détail a résoudre techniquement :
    Si les valeurs macd, cci, bbands son toujours positif a l'achat, et bien a chaque nouvelle bougie j'ai la même alert BUy (que je remplacerais par un ordre d'achat dans l'ea), donc si je suis en TF 5 mn toutes les 5 minutes j'ai la meme alert. j'aimerais le plus simplement du monde, que l'alert (ou l'ordre d'achat) ne s'enclenche que si precedement l'une des valeurs était négatif, de façon a n'avoir qu'une alert a chaque début de changement de tendance detecté par l'ea !

    voici la partis du code en question, fury le reconnaitra :)

    Code
    bool buySignal, sellSignal; if (newBarFormed()) { buySignal = macdday>0 && macdh1>0 && ccih1>0 && bbands>0; sellSignal = macdday<0 && macdh1<0 && ccih1<0 && bbands<0; } if (buySignal) { Alert("ERIC DAVID - BUY - " ,Symbol()," ",Period()," @ ",Bid); buySignal = false; } if (sellSignal) { Alert("ERIC DAVID - SELL - " ,Symbol()," ",Period()," @ ",Bid); sellSignal = false; }
    Merci pour toutes aides (un petit aperçu de l'ea dans le screenshot)
    Lorka85 a joint une image
    G3027CA
  • ForexAutomatique

    Tu pourrais au moins publier le code en entier ! ^^

    J' ai une technique pour résoudre ton problème technique ( c' est pas très pro, mais ça marche très bien ).
    Exemple ( avec la variable "a" ) :

    extern int a = 0;

    If ( signal d' achat == 1 && a != 1 );
    {...
    a = 1
    }
    If ( signal d'e vente == 1 && a != 2 );
    {...
    a = 2
    }
  • Lorka85

    je comprend ton code. mais a chaque fois que je vais relancer la plateforme mt4 la variable A sera desinitialiser et il reprendra une position dans le sens de tous les indicateurs ?

    bon tu me dira furax m'a donner un code pour empêcher ça, je vais voir :)

    sinon je le mettrais a disposition gratuitement bien sur, il est e phase de développement, avec une gestion intelligente des breakeven, etc :)
  • ForexAutomatique

    A chaque fois que tu relanceras la plateforme, le code sera réinitialisé et la variable "a" reprendra la valeur 0 ( neutre ) grâce à "extern int a = 0;" mais ne produira pas de signaux en série grâce aux conditions "If ( signal de vente == 1".
    C' est possible que je n' ai pas compris exactement ton problème et que ce code ne te convienne pas. Teste et tu verras bien.
  • Lorka85

    Tu a tout a fait compris, pas de soucis :) je l'ai intégré et vais tester ça, hésitez pas a me poser des questions si vous le souhaitez !
    la j'ai decouvert un indicateur qui affiche les corisement macd sous former de bar rouge ou vers, un vrais régal, je vais peu etre intégré ça a l'ea plutot que sous/sur la ligne zero de macd !
  • Lorka85

    Ca marche trés bien ta boucle ForexAutomatique, merci, visitez son site fort sympa (pub gratos ^^) http://forex-automatique.blogspot.com/

    Apres peu etre que pour ne pas que ca prenne position dé le debut au lancement de la plate forme on peu englobé tous ça d'un variable, m'enfin le plus gros est fait !

    j'ai avancer dans mon EA, notement un indicateur que j'ai trouver qui affiche une macd sous forme de barre verte et rouge suivant le cross, bien plus lisible que regarder un cross macd original. et il prendra positon quand un cross MACD h1 se fait dans le sens du cross actuelle de la macd H4 ou daily avec un filtre CCI 50 (supérieur ZERO pour un buy et vis versa) et un filtre ADX qui doit etre superieur a 25.

    Je pense aussi avancer dans les HAS BAR mtf, la le week end je peu pas tester meme sous EA pour simuler car il gere pas le MTF :( donc lundi j'en serais deja plus :)
  • remjie

    @Lorka85: sinon pour éviter les message a répete, tu pouvais nommer une variable "signal" que tu mettais a false une fois qu'il t'a mis une alerte.

    pour la MACD, c'est plus lisible visuellement la MACD qui affiche juste rouge ou bleu, mais c'est plus simple a coder sur un MACD classique, et surtout pas besoin de l'appel a un iCustom, tu peut direct faire iMACD(Symbol(),1440, 5, 35, 5, 0, MODE_MAIN, i).
  • Lorka85

    c'est ce que ej fait rmejie, me imacd, de la macd original, ce qui m'empeche pas d'avoir l'indicateur sous forme de barre en plus, sur le template :) je vous ferez partager l'ea.

    pour l'alert j'aimerais qu'il en mette meme pas la 1er fois que mt4 est lancé, et que la 1ere alert sois que si la tendance devient différente que la tendance ou est le marché au moment ou l'ea est lancé (donc mt4 aussi). mais le plus gros est fait avec la boucle de forexautomatique :)
  • Lorka85

    Petit screenshot de Ma MTF MAD Cross bar, la bar du haut est une MACD H1 et celle du bas une MACD H4 afficher dans un timeframe m30

    Je vos laisse juger de la qualité des signaux (quand 2 carres de meme couleurs s'affichent en vertical, ca prend a l'ouverture de la bougie suivante ) très encourageant !
    Lorka85 a joint une image
    G3051EE
  • Lorka85

    ne regardez pas les fleches blanches, juste la bar du bas ;)
  • Furax

    oui, c'est prometteur Lorka ... :)

    Regardes l'indicateur buysell en H4.
    C'est mon nouveau projet pour trades weekly
    Ton système m'y fait un peu penser.
    Peut-être pourrais-tu regarder le programme de cet indicateur, juste au cas ou ...:)
    Furax a joint une image
    G3052FD
  • Lorka85

    merci Furax.

    Tu parle de l'indicateur buy and sell ? celui qui a comme paramètre ceux du screeshot par defaut ?
    Si oui, c'est tous simplement un bbands stop qui ne repeint pas. mais il faut savoir qu'il prend la position a l'ouverture de la bougie APRES la flèche sur le graphique. je l'ai étudié un bout de temps.

    Et oui un EA de cet indicateur est je pense très simple a faire, assigné deux variables double au ibands :
    peu être ce début de piste de code :
    Code
    double : a, b ; a = iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0) b = iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,0) if (a < 0 ) vente if (b>0) achat
    j'ai pas tester mais ca doit etre proche du résultat voulut. :)
    Lorka85 a joint une image
    G3054CD
  • Lorka85

    En ce moment j'ai un probleme de logique sur un EA basé sur le positionnement de 3 moyenne mobile.

    Code
    MA1 = iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0); MA2 = iMA(NULL,0,16,0,MODE_EMA,PRICE_CLOSE,0); MA3 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0); if( MA1 > MA2 && MA2 > MA3 ) { Alert("HAS BARS UP - BUY - " ,Symbol()," ",Period()," @ ",Bid); }
    Donc si toutes les MA se sont croisés vers le haut, ça prend position, cela fonctionne parfaitement !
    Le problème et que j'aimerais que a chaque fois que la MA1 et MA2 se croisent dans le sens de la MA3 (donc au dessus pour BUY), avoir un signal a chaque fois. Hors, je n'ai le signal que lors du 1er croisement avec toutes les MA (donc beaucoup moins souvent). je suis sur que c'est simple a résoudre mais je bloque :(

    Merci pour toutes aides !
  • roland

    Je suis pas certain d'avoir cerné ton problème, mais si je reformule: tu veux qu'une fois que MA1 ET MA2 soient passé par delà MA3, on est d'autres signaux au moment où MA1 ET MA2 se recroisent tout en étant au dessus de MA3, c'est ça ?
    Si c'est ça j'ai une soluce un peu brutale mais opérationnelle:

    Au lieu de définir:
    Code
    MA1 = iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0); MA2 = iMA(NULL,0,16,0,MODE_EMA,PRICE_CLOSE,0); MA3 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0);

    Définis:
    Code
    MA1_1 = iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0); MA1_2 = iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,1); MA2_1 = iMA(NULL,0,16,0,MODE_EMA,PRICE_CLOSE,0); MA2_2 = iMA(NULL,0,16,0,MODE_EMA,PRICE_CLOSE,1); MA3 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,0);

    Et ensuite ta condition:

    Code
    if( (MA1_1 > MA2_1 && MA1_2 < MA2_2) && MA2_1>MA3 )

    Ca veut dire: "Si à l'instant t-1 la MA1 est inférieure à la MA2 et qu'a l'instant t la MA1 est supérieure à la MA2 et que la MA2 est supérieure à la MA3" => achat
  • Lorka85

    Merci de tes efforts Rolands. cela semble marché (tester en emulateur acceléré), mais je n'ai plus la position au croisement des 3 MA comme precedement, puis j'ai l'impression que quand les croisement son trops serré ça ne prend pas position :(
    Cela sert a quoi le dernier chiffre de MA1_2 = iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,1); ? le Shift ?
    Sans compté que pour une positions sell, le fait d'inversé les < ou > dans la condition ne semble pas marché :(

  • roland

    Hum, d'ailleurs je me pose une question sur ton code. Lorsque tu donnes:
    Code
    if( MA1 > MA2 && MA2 > MA3 ) { Alert("HAS BARS UP - BUY - " ,Symbol()," ",Period()," @ ",Bid); }

    Théoriquement, une fois que la MA1 est au dessus de la MA2 et que la MA2 est au dessus de la MA3 tu devrais avoir des Alert à chaque tour de programme non ?
  • Lorka85

    oui tu a raison, j'ai filtré ça avec une variable :)

    int a = 0;
    if if( MA1 > MA2 && MA2 > MA3 && a != 1 )
    {
    Alert("HAS BARS UP - BUY - " ,Symbol()," ",Period()," @ ",Bid);
    a = 1;
    }
  • Lorka85

    bon la je me content d'un cross de 2 ema , une 10 et une 144 en TF M30 comme le systeme rover north censé être le plus profitable au monde.

    pour revenir a mon EA macd, j'ai implanté les position, gestion breakeven, et le je mat si il peu ne pas prendre de position si une position dans le même sens est deja ouvert :) ca avance !!
  • Lorka85

    Bon ça marche impecable :)
    voici le code que fury a pondu pour empecher de prendre position si une position deja ouverte dans le meme sens existe :

    Code
    int scnt = 0, bcnt = 0, cnt = OrdersTotal(); for (i = 0; i < cnt; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == magicNumber) if (OrderType() == OP_BUY) bcnt++; else if (OrderType() == OP_SELL) scnt++;

    la condition pour une position buy :
    if (bcnt == 0) "on peu prendre position buy car aucune existe en cours"
    position sell
    if (scnt == 0) "on peu prendre position sell" car aucune existe en cours"

    le petit soucis, par contre, et après mon ea sera finalisé, c'est que si une position SELL gbpusd est ouverte par exemple, il ne prendre plus aucunes position sell pour les autres pairs, car il détectera les condition du magicnumber (il reconnais donc les Positions ouvertes de l'ea) + la direction (OP_BUY ou OP_SELL) mais pas le nom de la pair ! il suffirait je pense de rajouter un tous petit code dans cette boucle pour qu'il détecte si aucune pairs dans la même direction est déjà ouverte, j'ai penser a OrderSymbol mais je ne sais pas comme l’implanté.

    Une petit coup de pouce a me suggérer ?
    merci !
  • Lorka85

    je pense avoir résolu mon probleme :

    Code
    int scnt = 0, bcnt = 0, cnt = OrdersTotal(); for (i = 0; i < cnt; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if (OrderMagicNumber() == magicNumber) if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) bcnt++; else if (OrderType() == OP_SELL && OrderSymbol() == Symbol()) scnt++;
    trouvé tous seul comme un grand :)
    Punaise j'ai hate de lancer ça demain, le backtest visuel me semble prometteur !
    Lorka85 a joint une image
    G3075DE