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

Conversion d'un fichier .ex4 en .mq4

  • Magiceyes2

    Bonjour tous le monde, voilà tout est dans le titre. Je sais que ce sujet à déjà été lancé il y a 1 an et demi ou 2 ans mais aucune solution satisfaisante n'a été apportée, je me permet donc de le remettre au goût du jour. Je suis allé sur le site http://www.ex4-to-mq4.com/ où ils me proposaient de décompiler mon fichier sous 24-48h, de renvoyer ce fichier décompilé vers mon adresse email et ce, gratuitement. Mais je l'ai fais il y 3 ou 4 jours et je n'ai toujours rien reçu. Savez-vous s'il s'agit d'un site sérieux? Avez-vous des suggestions de logiciels gratuits ou d'autres sites également gratuits? Merci.
  • _squAces_

    Hello,

    il faut aller dans l'éditeur, ouvrir le fichier ex4 (renommé en .txt), copier le code;
    créer un nouveau document expert advisor, donner un titre, puis coller le code;
    enregistrer le fichier et quitter metatrader.

    Ensuite glisser le .mq4 qui a été créé dans le bon répertoire, par exemple indicators;
    lancer metatarder et ouvrir l'indicateur

    That's it!
  • forexensemble — en réponse à Magiceyes2 dans son message #88722

    Magiceyes2, le 25/12/2013 dit :
    Je suis allé sur le site http://www.ex4-to-mq4.com/ où ils me proposaient de décompiler mon fichier sous 24-48h, de renvoyer ce fichier décompilé vers mon adresse email et ce, gratuitement.

    Depuis le build 500 de Metatrader4, la décompilation d'un .ex4 à l'aide d'un décompilateur ne sers plus à grand chose parce que Metatrader4 reconnaît qu'il s'agit d'un code décompilé et, par conséquent, ne le recompile pas. Il n'envoie aucun message d'erreur ; il ne fait juste pas son job.
    Metaquotes, l'éditeur de Metatrader veut ainsi contribuer à lutter contre le piratage d'EA, d'indicateurs et de scripts MT4. Il veut ainsi mieux protéger ses partenaires fournissant leurs logiciels par le moyen du "Metatrader Market", le "Play Store" par laquel Metaquotes incite les développeurs MT4 à diffuser leurs œuvres dès la prochaine mise à jour de Metatrader4, comme c'est déjà le cas pour MT5.

    Il faut reconnaître que la décompilation et la revente illégale du travail d’autrui était devenu un véritable fléau, causant des dommages financiers très important aux propriétaires de codes sources ayant parfois demandé plus d'un an de travail. En tant que développeur, je ne peux qu'applaudir ce durcissement de ton.

    Tu ne pourras quasiment plus compiler de codes sources ayant au préalable été décompilés. Cela se compliquera encore avec les applications achetées sur le "Market" car chaque code sera numériquement signé et ne pourra simplement plus être décompilé.

    Ne dépenses pas d'argent dans des services de décompilation - tu serais à coup sûr marron, en tout cas à terme.
    Modifié le 2013-12-26 09:56:18 par forexensemble
  • Magiceyes2

    _squAces_, comment renommer un fichier en .txt, s'il-te-plait? Merci pour vos réponses
  • _squAces_

    Magiceyes2, le 26/12/2013 dit :
    _squAces_, comment renommer un fichier en .txt, s'il-te-plait? Merci pour vos réponses


    Il suffit de renommer l'extension .ex4 en .txt en faisant un click-droit dessus. :)
  • forexensemble

    Pour information : un fichier .ex4 contient du pseudo-code* alors qu'un fichier.mt4 contient du code source. Les deux ne sont pas interchangeables.

    *pseudo-code = résultat de la conversion d'un fichier source en une suite d'instructions qui peuvent être exécutées par un logiciel spécialisé appelé "interpréteur". Metatrader4 utilise un interpréteur pour exécuter les fichiers .ex4. Le fichier .ex4 est généré par Metatrader4 au moment ou on compile le fichier source correspondant .mt4.

    Si on copie le contenu d'un .ex4 vers un .mt4, Metatrader4 ne pourra pas compiler le .mt4 résultant pour les raisons évoquées ci-dessus.

    Exemple :

    voici le script "close.mt4" (=code source)
    Code
    //+------------------------------------------------------------------+ //| close.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property show_confirm //+------------------------------------------------------------------+ //| script "close first market order if it is first in the list" | //+------------------------------------------------------------------+ int start() { bool result; double price; int cmd,error; //---- if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); //---- first order is buy or sell if(cmd==OP_BUY || cmd==OP_SELL) { while(true) { if(cmd==OP_BUY) price=Bid; else price=Ask; result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); } else error=0; if(error==135) RefreshRates(); else break; } } } else Print( "Error when order select ", GetLastError()); //---- return(0); } //+------------------------------------------------------------------+
    Voici le fichier "close.ex4" correspondant, lorsqu'on le change en txt :
    Code
    EX4 ¬ | Copyright © 2004, MetaQuotes Software Corp. http://www.metaquotes.net/  @ x L ÿÿÿÿÿÿÿÿ  za?LÙ‰W ÿÿÿÿÿÿB@ & «‘³:°G Äö›5/™$£õEƒëÕ[Ó†ÔePvUMŽ2ëÍm\rŠº‰v£ÌPaoñ¶ÝV\]Z¾ \Æ s©œŠ(§è1|©fc Â3}8¾Å›ftÉ€Åq ª¯@ˆB‘ —[VÞc‹½Ú#Ë<k_¢Nà´Töª°…Xº‡y  0 a LastError = Error when order select   Þu^}¼s¼¬ŠÉ§·ð&q ^áÊìÎz¦·ù/ydCû ¼ô[ L  ,  `î>          ÊÐx• aÚñ%k,ü$³üÕǽ•ÚÁœ·n“îêöû‰¥+ÚÝÊcæIž¥¨ÀœózyÓ£ 8!2‚ÿÍ­ÚøÏùYÝÔðÈyî[åž‘Ý&ß•!»ÑÚµø6N‡ln‡žû˜xC´ž`çÑ$5zÿ&R—úœÐ·cË×$ë.If@ }îé'j2.-û¼U2ü•ZŸˆ Œw‰¬“ŸgtGeE DÚñGà‹œ¥šéœËJ+ë‡ xaq‡3/qÎ0[éiçŒ]RA°‰ìÚäÑŽ™ÝâP¦®Ïµr4|ƒlrK’·˜×eõ’pÉÄM&»Hš–ð‚Y²HÂûFL{e@ }îé$o.úDzŽU¬•ÞЬf÷¾“X´ÃzÅÊu©G8‡Œ…tq MŒ[< øù߆¡Øú6Q# ÝÖ¡±óOÁ^å®™] ËÚ ¬X_µ#>6¾‡¬®‡ž»˜&ƵŽÌgY$5Â&ø’0Ž]¶àFvä¯bPÂ>‹\1äüÌAŠŒÕs¾§èéž žc·þ«IªçuD¤ÂI£ ¢¥®9n3K‰S‚a2¢§Ë?”ÈÊûvÙ¯ÝÖ!°±íiXb?œ‰ÍËÚ ìX_õtvÎ §|¾†wªàæuœà ÑFDB&Kë(nýöئûJ›\hfH<™.)e/l<5¿ºU   È   ÿÿÿ ÿÿÿ É   ÿÿÿ ÿÿÿ Ê   ÿÿÿ ÿÿÿ Ë  ÿÿÿ ÿÿÿ Ì $  ÿÿÿ ÿÿÿ Í (  ÿÿÿ ÿÿÿ   D ” œ ¤ À L  ¤ ¼

    Le code source est destiné à l'opérateur humain.
    Le pseudo-code est destiné au logiciel interpréteur.

    L'opération consistant à "décompiler" consiste retransformer le pseudo-code en un code source "humain". C'est cette opération qui va devenir quasi impossible avec la prochaine version de Metatrader4.
    Modifié le 2013-12-26 20:18:19 par forexensemble
  • _squAces_

    Arrrgh! Tu as raison. J'ai inversé le processus.
    Désolé pour cette fausse joie.
  • Magiceyes2

    Si je comprends bien, il n'existe pas de manières de décompiler un .ex4 de manière légale? Je voudrais juste lire le code source d'un indicateur pour pouvoir utiliser cette indicateur dans un EA
  • forexensemble — en réponse à Magiceyes2 dans son message #88776

    Magiceyes2, le 27/12/2013 dit :
    Si je comprends bien, il n'existe pas de manières de décompiler un .ex4 de manière légale? Je voudrais juste lire le code source d'un indicateur pour pouvoir utiliser cette indicateur dans un EA

    La décompilation est légale dans la mesure ou tu décompiles tes propres œuvres, en cas de perte de tes sources, par exemple. Cela dit, ce n'est pas pour cette raison "légale" que des gens se sont mis à fabriquer des décompilateurs, tu t'en doutes...

    Il existe aussi une immense bibliothèque de codes sources disponibles en libre service sur Internet. L'utilisation de ces codes sources est parfaitement légale dans le mesure ou ils sont mis à disposition par leurs auteurs. Si tu me donnes quelques infos sur ton indicateur, je peux peut-être te le trouver en code source.

    En ce qui concerne l'utilisation d'un indicateur dans un EA, tu n'as pas besoin d'avoir le source de l'indicateur pour l'intégrer dans ton EA. Tu peux utiliser la fonction iCustom() pour cela. Voici la doc MT4 correspondante :

    Code
    double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift) Calculates the specified custom indicator and returns its value. The custom indicator must be compiled (*.EX4 file) and be in the terminal_directory\experts\indicators directory. Parameters: symbol - Symbol the data of which should be used to calculate indicator. NULL means current symbol. timeframe - Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe. name - Custom indicator compiled program name. ... - Parameters set (if necessary). The passed parameters and their order must correspond with the desclaration order and the type of extern variables of the custom indicator. mode - Line index. Can be from 0 to 7 and must correspond with the index used by one of SetIndexBuffer functions. shift - Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago). Sample: double val=iCustom(NULL, 0, "SampleInd",13,1,0);
    Modifié le 2013-12-27 09:59:27 par forexensemble
  • Magiceyes2

    En fait, j'ai déjà intégré cet indicateur dans mon EA mais je voudrais programmer le comportement de mon EA à partir de cet indicateur. Cet indicateur s'appelle "MBFX System" et il mesure en temps réel le centre de gravité du mouvement de cours. Il est composé de 7 lignes : une ligne centrale en bleu qui est le centre de gravité, 3 lignes d'extension (ou niveaux de retracement) au-dessus de la ligne bleue et 3 lignes d'extension en-dessous. J'ai bien mis cet indicateur dans "iCustom ()" mais maintenant je voudrais programmer l'ouverture d'une position de vente et d'achat quand les cours se situe à tels ou tels niveaux de retracement. Je suppose donc qu'il me faut savoir le code des lignes de retracement pour faire celà. Je suis allé dans le dictionnaire de metaeditor et j'ai vu les informations relatives aux indicateurs personnalisés (Custom indicators). Je pense que les lignes sont encodé avec la fonction SetIndexStyle mais je ne sais pas quel numéro correspond à quelle ligne.
  • riden

    Magiceyes2, le 27/12/2013 dit :
    ... je voudrais programmer l'ouverture d'une position de vente et d'achat quand les cours se situe à tels ou tels niveaux de retracement. ..


    Salut,
    Pour cette utilisation, tu n'as pas besoin du code source

    Code
    iCustom(NULL,t,"MBFX System",0,0); // centre iCustom(NULL,t,"MBFX System",1,0); // resistence 1 iCustom(NULL,t,"MBFX System",2,0); // resistence 2 iCustom(NULL,t,"MBFX System",3,0); // resistence 3 iCustom(NULL,t,"MBFX System",4,0); // support 1 iCustom(NULL,t,"MBFX System",5,0); // support 2 iCustom(NULL,t,"MBFX System",6,0); // support 3
  • Magiceyes2

    Ah oui, en effet, suis-je bête. Merci beaucoup riden :)
  • forexensemble

    Une rapide recherche google "MBFX System" m'a dirigé vers http://forexwinners.net/forex/mbfx-system-v3/

    Tu y trouveras peut-être ce que tu cherches.
    En tout cas, cet indicateur est proposé en téléchargement en code source, semble-t-il. Piraté ? Je n'en serais guère surpris...
  • Magiceyes2

    Merci forexomatic :) J'ai téléchargé le fichier mais il ne veut pas s'ouvrir.

    De tout façon je n'ai plus vraiment besoin de ce code source, encore merci pour tout.
    Modifié le 2013-12-28 12:16:34 par AliX : Utilisez la fonction "EDIT" s.v.p pour ne pas poster plusieurs fois d'affilés
  • forexensemble

    Magiceyes2, le 28/12/2013 dit :
    J'ai téléchargé le fichier mais il ne veut pas s'ouvrir.

    Je l'ai téléchargé et testé chez moi. En effet, il est piraté. Cela dit, dans la version actuelle de Metatrader4, il est encore compilable et fonctionne parfaitement.

    Si tu as pu te passer de ce code source, c'est encore mieux, histoire de respecter les droits de l'auteur de ce logiciel.
  • Magiceyes2

    Au fait, voici le EA que j'ai programmé à partir du MBFX System:
    Code
    //+------------------------------------------------------------------+ //| Percy's Strategy.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //Variables externes extern int MAGIC_NUMBER = 123456; extern double LOT = 0.01; //Variables globales double MBFXSystemcc; double MBFXSystemlsu; double MBFXSystemlr1; double MBFXSystemlr2; double MBFXSystemlre; double MBFXSystemlv1; double MBFXSystemlv2; int Ticket; int init() { MBFXSystemcc = iCustom(NULL, 0, "MBFX System", 0, 0); MBFXSystemlsu = iCustom(NULL, 0, "MBFX System", 1, 0); MBFXSystemlr1 = iCustom(NULL, 0, "MBFX System", 2, 0); MBFXSystemlr2 = iCustom(NULL, 0, "MBFX System", 3, 0); MBFXSystemlre = iCustom(NULL, 0, "MBFX System", 4, 0); MBFXSystemlv1 = iCustom(NULL, 0, "MBFX System", 5, 0); MBFXSystemlv2 = iCustom(NULL, 0, "MBFX System", 6, 0); } int deinit() { return(0); } int start() { if(isTraded() == False) { if(Bid >= MBFXSystemlr1 && Bid <= MBFXSystemlr2) { Ticket = OrderSend(Symbol(), OP_SELL, LOT, Bid, 3, Ask + 100 * Point, Bid - 100 * Point, 0, MAGIC_NUMBER, 0, Red); } if(Ask <= MBFXSystemlv1 && Ask >= MBFXSystemlv2) { Ticket = OrderSend(Symbol(), OP_BUY, LOT, Ask, 3, Bid - 100 * Point, Ask + 100 * Point, 0, MAGIC_NUMBER, 0, Green); } } } bool isTraded() { if(OrdersTotal() >= 1) { return(True); } else { return(False); } }

    Je souhaitais ouvrir une position acheteuse quand le cours se situait entre les 2 derniers supports et une position vendeuse quand le cours se situait entre les 2 dernières résistances. Est-ce que ce programme reflète ce que je voulais?
    Modifié le 2013-12-30 15:38:44 par AliX
  • Magiceyes2

    En fait, quand je backtest avec cet EA, il ouvre 2 positions (achat et vente) simultanément, j'ai donc une stratégie de hedging, ce que je ne voulait pas faire, comment celà se fait-il?
  • riden

    Salut,

    1) il faut spécifier le/les TF sur le quel l'EA va travailler:
    ...(NULL, 0...) ----> ...(NULL, 15 ou 60 ou 240 etc... )

    2) si tu trades sur plusieurs TF le cours peut etre en zone d'achat en 15 et en zone de vente en 240, et tu auras 2 positions ouvertes donc :
    Code
    ..... if(isTraded() == False) { if(Bid >= MBFXSystemlr1 && Bid <= MBFXSystemlr2) ........... if(Ask <= MBFXSystemlv1 && Ask >= MBFXSystemlv2)

    ------------>

    Code
    ..... if(Bid >= MBFXSystemlr1 && Bid <= MBFXSystemlr2 && isTraded() == False) ........... if(Ask <= MBFXSystemlv1 && Ask >= MBFXSystemlv2 && isTraded() == False)

    3) le contenu de init() doit être transféré dans start() car le cog et ses sup&res doivent être calculés chaque tick ou chaque x secondes (de ton choix selon TF)
    Modifié le 2013-12-31 00:38:24 par riden
  • Magiceyes2

    Je veux trader sur n'importe quel TF mais un seul TF pour chaque paire (donc les ordres d'achat et vente sont passés sur le même TF), c'est pour celà que j'ai spécifié "NULL" dans la fonction OrderSend pour les 2 ordres. C'est bien là qu'il faut spécifier ?
  • Magiceyes2

    Ah ça y est ça marche, merci riden :)