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

Créer son robot de trading

  • Kaerdid

    Salut a tous. Depuis quelques temps j'essaie de développer une stratégie de trading basée sur un système de moyennes mobiles me permettant de scalper. Si j'en crois la lecture des graphs elle pourrait fonctionner (et m'a déjà permis de prendre quelques pips) mais est très très contraignante dans le sens ou je dois tout le temps être devant l'écran et être rapide.

    Hors au bout de 5 minutes j'en ai marre et je me lance une vidéo youtube, et la quand je reviens et bien "et me*** j'ai rater autant de pips"

    C'est alors que je me suis dit, pourquoi ne pas faire un petit robot ? il sera plus rapide que moi a prendre position, et en plus il se fatiguera beaucoup moins vite que moi.

    J'ai alors fais quelques petites recherches, je n'y connais rien a la programmation et j'étais plutôt parti sur la facilité plutôt que d'apprendre le langage utilisé par metatrader (sachant que c'est toutes les bases de la programmation pure que je devrais apprendre)

    Et la je tombe sur un ancien poste de daily fx et le nom de programme "forex EA generator" qui pourrait me permettre a l'aide de pastilles de me générer le code.

    Mais j'ai beau essayer je ne comprend pas grand chose a son utilisation et pas moyen de trouver un tutoriel sur internet. Alors si quelqu'un a déjà utiliser ce logiciel, connais des tutos, connait un autre logiciel ou pense qu'il pourra m'aider d'une façon ou d'une autre, et bien vous êtes bienvenue :)

    Merci.
  • pako (invité)

    j ai le même souci que toi. J ai un ea en tête mais je ne peux pas le programmer, il fonctionne avec le macd cross over mais je ne trouve pas de robot à télécharger sur le net pour le tester en démo avant.

    Si tu sais comment je peux en avoir un dis le moi.
  • Kaerdid

    Bon me revoilà. Je n'abandonne pas le projet mais j'ai eu énormément de travail en cette fin de semaine.

    J'ai trouver un poste sur daily fx ou une personne tente d'expliquer comment programmer avec forex EA generator 4 mais vraiment pas moyen, bien que je commence a comprendre le principe je n'y arrive pas. J'ai recopier exactement ce qu'il a fait dans le test et contrairement a lui je n'ai aucun ordre de passé quand je test le robot.

    Pour ceux qui veulent voici l'aide pour commencer a programmer :

    exemple EA de base avec 2 moving average :
    part 1 : https://www.youtube.com/watch?v=PchzjiXHw8A&feature=youtu.be
    part 2 : https://www.youtube.com/watch?v=Sz5ui1RSBiE&feature=youtu.be

    et la il poste un exemple de "copie" de l'EA FAPTURBO mais je n'ai pas essayé, je voulais avant tout régler mes problèmes sur un tout petit EA avant de m'attaquer a un gros comme ça :

    part 1 : https://www.youtube.com/watch?v=ypY5bXmULLM&feature=youtu.be
    part 2 : https://www.youtube.com/watch?v=h50ogZ-l6no&feature=youtu.be
    part 3 : https://www.youtube.com/watch?v=X__XMfSmczw&feature=youtu.be
    part 4 : https://www.youtube.com/watch?v=1dW3ymU656I&feature=youtu.be
    part 5 : https://www.youtube.com/watch?v=SH1bd2Fc6RM&feature=youtu.be

    Voila et si sa peut intéresser quelqu'un voici le post daily fx,
    http://www.dailyfx.com/forex_forum/systemes-automatises-expert-advisors-robots-de-trading/452614-mon-robot-de-trading.html
    mais qui s'est vite transformé en poste de commande d'EA plutôt que d'explications et apprentissage.

    PS: j'ai envoyer un message sur fb a l'auteur des vidéos mais il ne répond pas, il ne semble plus actif sur sa chaine depuis quelques mois. Je créerais peut être un compte dailyfx pour voir si il est toujours actif de ce coté la. En espérant avoir plus de temps a moi cette semaine.
  • cyber

    Un coup de main peut être ??? Etant l'auteur des videos ca peut aider ;)
  • Kaerdid

    Je t'avais envoyé des messages sur youtube, mais tu ne dois plus être trop actif :)

    Oui j'aurais besoin d'aide, même si je progresse pour des raisons que je ne comprend pas mon robot ne prend pas les ordres quand je veux. Mais je n'ai pas beaucoup de temps, j'essaie de développer un peu plus si j'ai le temps cette semaine sinon sa attendra ce week end :)
  • cyber

    Bon, bein...j'suis là
  • Kaerdid

    Alors j'ai regardé un peu, j'ai un peu de temps aujourd'hui.

    J'essaie tout d'abord de faire un robot facile, de prendre en main le logiciel avant d'avancer vers plus compliqué.

    Je précise aussi que j'avais suivi ton tuto avec les moyennes mobiles et que même en suivant les instructions mon robot ne passait pas de trade. Quand je fais un "if order exist" je n'ai pas les mêmes propositions que toi, et a chaque foi que j'utilise cette commande, même sur un robot qui passait des trades juste avant et bien sa ne fonctionne plus.

    Donc voici un exemple :

    Deux DEMA une 5 périodes et une 10 périodes.

    Je fais un double test en utilisant technical analys 2 :

    -premier test dema 5 < dema 10 sur bougie précédente
    -second test dema 5 > dema 10 sur bougie actuelle.

    J'ai choisit a prix a l'ouverture de la bougie.

    Je passe un buy si mes conditions sont réunies mais mon robot ne trade pas du tout. Je pense pourtant entrer les bon paramètres pour lui dire d'entrer (en gros croisement des mes deux DEMA vers le haut)

    Ensuite autre petit problème j'avais réussi un robot qui prenait position l'autre foi, je voulais qu'il ferme sur take profit mais il ne fermait jamais les trades et du coup il re faisait un achat a chaque foi (mon nombre de lot se retrouvait multiplié)

    Je précise que je suis sous MT5 et que pour cet exemple j'essaie de le faire en M5 minutes.

    Ma question, qu'est ce que je fais mal ?
    Kaerdid a joint une image
    creer-son-robot-de-trading-8707
  • cyber

    Eh bien voilà ton problème. Je ne développe pas sous MT5 mais MT4. MT5 est une programmation objet et est donc...bien différent de MT4.
  • Kaerdid

    Je pensais que tu allais passer sous mt5 car les backtest étaient plus précis ? :)

    Tu ne vois pas d'où pourrait venir mon problème ?
  • Kaerdid

    J'ai un peu avancer ce matin. J'ai réussi a pondre un nouveau truc.

    J'ai programmer deux lignes différentes, une pour l'achat et une pour la vente. Il me prend bien mes ordres a la vente mais pas a l'achat.

    Et second pb même si je règle bien tp 3 et sl 2 lui quand il passe les ordres il règle le tp a 30 et le sl a 20.

    Voila le code :

    Code
    //+------------------------------------------------------------------+ //| Forex EA and Script Generator version 4.1 EA | //| Copyright 2011, Etasoft Inc. | //| http://www.forexgenerator.com | //+------------------------------------------------------------------+ // Keywords: developer, Forex EA builder, create EA, expert advisor, MT5, MT4 #property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1" #property link "http://www.forexgenerator.com" #include <Trade\Trade.mqh> // exported variables input double Lots3 = 0.1; input int Stoploss3 = 2; input int Takeprofit3 = 2; input double Lots8 = 0.1; input int Stoploss8 = 2; input int Takeprofit8 = 2; // local variables double PipValue=1; // this variable is here to support 5-digit brokers bool Terminated = false; string LF = "\n"; // use this in custom or utility blocks where you need line feeds int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names int current = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- NDigits = Digits(); if (NDigits == 3 || NDigits == 5) PipValue = 10; if (AccountInfoInteger(ACCOUNT_TRADE_EXPERT) == false) { Print("Check terminal options because EA trade option is set to not allowed."); Comment("Check terminal options because EA trade option is set to not allowed."); } if (true) ObjectsDeleteAll(0); // clear the chart Comment(""); // clear the chart //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- if (true) ObjectsDeleteAll(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if (Terminated == true) { Comment("EA Terminated."); } OnEveryTick1(); } //+------------------------------------------------------------------+ //| Get Low for specified bar index | //+------------------------------------------------------------------+ double Low(int index) { double arr[]; double low = 0; ArraySetAsSeries(arr, true); int copied = CopyLow(Symbol(), PERIOD_CURRENT, 0, Bars(Symbol(), PERIOD_CURRENT), arr); if (copied>0 && index<copied) low = arr[index]; return (low); } //+------------------------------------------------------------------+ //| Get the High for specified bar index | //+------------------------------------------------------------------+ double High(int index) { double arr[]; double high = 0; ArraySetAsSeries(arr, true); int copied = CopyHigh(Symbol(), PERIOD_CURRENT, 0, Bars(Symbol(), PERIOD_CURRENT), arr); if (copied>0 && index<copied) high=arr[index]; return(high); } //+------------------------------------------------------------------+ //| Get Close for specified bar index | //+------------------------------------------------------------------+ double Close(int index) { double arr[]; double close = 0; ArraySetAsSeries(arr, true); int copied = CopyClose(Symbol(), PERIOD_CURRENT, 0, Bars(Symbol(), PERIOD_CURRENT), arr); if (copied>0 && index<copied) close = arr[index]; return (close); } //+------------------------------------------------------------------+ //| Get Open for specified bar index | //+------------------------------------------------------------------+ double Open(int index) { double arr[]; double open = 0; ArraySetAsSeries(arr, true); int copied = CopyOpen(Symbol(), PERIOD_CURRENT, 0, Bars(Symbol(), PERIOD_CURRENT), arr); if (copied>0 && index<copied) open = arr[index]; return (open); } //+------------------------------------------------------------------+ //| Get current bid value | //+------------------------------------------------------------------+ double Bid() { return (SymbolInfoDouble(Symbol(), SYMBOL_BID)); } //+------------------------------------------------------------------+ //| Get current ask value | //+------------------------------------------------------------------+ double Ask() { return (SymbolInfoDouble(Symbol(), SYMBOL_ASK)); } //+------------------------------------------------------------------+ //| Is there an error | //+------------------------------------------------------------------+ bool IsError(MqlTradeResult& result, string function) { if (result.retcode != 0 && result.retcode != TRADE_RETCODE_DONE && result.retcode != TRADE_RETCODE_PLACED) { Print("Function: ", function, " Error: ", result.retcode, " ", result.comment); return (true); } else Print("> Executed: [", function, "]"); return (false); } bool IsError(CTrade& trade, string function) { if (trade.ResultRetcode() != 0 && trade.ResultRetcode() != TRADE_RETCODE_DONE && trade.ResultRetcode() != TRADE_RETCODE_PLACED) { Print("Function: ", function, " Error: ", trade.ResultRetcode(), " ", trade.ResultRetcodeDescription()); return (true); } else Print("> Executed: [", function, "]"); return (false); } //+------------------------------------------------------------------+ //| Get indicator value back | //+------------------------------------------------------------------+ double GetIndicator(int handle, int buffer_num, int index) { //--- array for the indicator values double arr[]; //--- obtain the indicator value in the last two bars if (CopyBuffer(handle, buffer_num, 0, index+1, arr) <= 0) { Sleep(5); for(int i=0; i<100; i++) { if (BarsCalculated(handle) > 0) break; Sleep(50); } int copied = CopyBuffer(handle, buffer_num, 0, index+1, arr); if (copied <= 0) { Print("CopyBuffer Failed. Error = ", GetLastError()); return -1; } else { IndicatorRelease(handle); return (arr[index]); } } else { IndicatorRelease(handle); return (arr[index]); } IndicatorRelease(handle); return 0; } //+------------------------------------------------------------------+ //| Building blocks | //+------------------------------------------------------------------+ void OnEveryTick1() { if (NDigits == 3 || NDigits == 5) PipValue = 10; IfPositionDoesNotExist4(); IfPositionDoesNotExist7(); } void IfPositionDoesNotExist4() { bool exists = false; // go through all positions for (int i=PositionsTotal()-1;i>=0;i--) { if (PositionSelect(Symbol())) // position with appropriate ORDER_MAGIC, symbol and order type if (PositionGetInteger(POSITION_MAGIC) == 1 && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) exists = true; } if (exists == false) { TechnicalAnalysis2x2(); } } void TechnicalAnalysis2x2() { if ((GetIndicator(iDEMA(NULL, NULL,5,0,PRICE_OPEN),0,1) < GetIndicator(iDEMA(NULL, NULL,10,0,PRICE_OPEN),0,1)) && (GetIndicator(iDEMA(NULL, NULL,5,0,PRICE_CLOSE),0,0) > GetIndicator(iDEMA(NULL, NULL,10,0,PRICE_CLOSE),0,0))) { BuyOrder3(); } } void BuyOrder3() { //--- prepare a request MqlTradeRequest request; request.action = TRADE_ACTION_DEAL; // setting a deal order request.magic = 1; // ORDER_MAGIC request.symbol = Symbol(); // symbol request.volume= Lots3; // volume in lots request.price = Ask(); request.sl = Ask() - Stoploss3*PipValue*Point(); // Stop Loss specified request.tp = Ask() + Takeprofit3*PipValue*Point(); // Take Profit specified request.deviation= 4; // deviation in points request.type = ORDER_TYPE_BUY; request.comment = "Order"; MqlTradeResult result; OrderSend(request,result); // check the result if (!IsError(result, __FUNCTION__)) { } } void IfPositionDoesNotExist7() { bool exists = false; // go through all positions for (int i=PositionsTotal()-1;i>=0;i--) { if (PositionSelect(Symbol())) // position with appropriate ORDER_MAGIC, symbol and order type if (PositionGetInteger(POSITION_MAGIC) == 2 && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) exists = true; } if (exists == false) { TechnicalAnalysis2x6(); } } void TechnicalAnalysis2x6() { if ((GetIndicator(iDEMA(NULL, NULL,5,0,PRICE_OPEN),0,1) > GetIndicator(iDEMA(NULL, NULL,10,0,PRICE_OPEN),0,1)) && (GetIndicator(iDEMA(NULL, NULL,5,0,PRICE_CLOSE),0,0) < GetIndicator(iDEMA(NULL, NULL,10,0,PRICE_CLOSE),0,0))) { SellOrder8(); } } void SellOrder8() { //--- prepare a request MqlTradeRequest request; request.action = TRADE_ACTION_DEAL; // setting a deal order request.magic = 2; // ORDER_MAGIC request.symbol = Symbol(); // symbol request.volume = Lots8; // volume in lots request.price = Bid(); request.sl = Bid() + Stoploss8*PipValue*Point(); // Stop Loss specified request.tp = Bid() - Takeprofit8*PipValue*Point(); // Take Profit specified request.deviation = 4; // deviation in points request.type = ORDER_TYPE_SELL; request.comment = "Order"; MqlTradeResult result; OrderSend(request,result); // check the result if (!IsError(result, __FUNCTION__)) { } }

    Et une petite image de forex EA générator :

    http://image.noelshack.com/fichiers/2014/09/1393493192-robot.png
  • cyber

    je recommence.... moi pas comprendre MT5.... :)
  • Kaerdid

    c'est si différent de mt4 ?

    Même sans regarder le code, tu ne pense pas savoir d'où pourrait venir mon erreur ? Peut être dans forex EA generator ?
  • cyber

    SL et TP à 2pips...hummm il y a un minimum je crois bien. Ensuite regarde ton technical analysis. Il doit y avoir un soucis. MP moi ton skype si tu en as un.
  • jeanphi0034 — en réponse à Kaerdid dans son message #91260

    Bonjour

    Je ne sais pas si vous etes toujours actif en ce qui concerne votre recherche pour les robtos de trading. En ce qui me concerne j'arrive dans ce monde que je découvre, j'apprends les langage MT4 pour justement pouvoir tester des stratégies mais j'en suis a l'apprentissage du langage qui ne me parait pas insurmontable.
    Si vous avez des conseils je suis bien evidemment preneur

    Jean Philippe
  • IBRAHIM03

    bonjour tout le monde
    moi j'aimerais savoir les differentes etapes pour faire fonctionner son robot en réel.
    je viens de concevoir un robot et je fais juste les tester de strategie mais j'arrive pas à l'utiliser en réel.
    j'aimerais bien avoir un guide.
    merci
  • Tirbo

    73 errors...2 warning