MQL4 problème syntaxe!!

Forum sur le trading automatique et algorithmique : systèmes, backtests, robots de trading, résultats et limites, code à l'appui.
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

MQL4 problème syntaxe!!

Message non lu par Se7enRise »

bonjour à tous, chère trader rentable

je suis nouveau sur le forum,
je cherche a programmer un robot mql4 depuis quelques semaines,
ayant fini de l'écrire je test celui-ci sur Metaeditor et le compile...
Mais ça aurai été trop beau que ca marche du premier coup,
j'ai pas moins de 97 erreurs ... qui dit mieux :lol: :oops:
principalement des erreurs de syntaxe ( j'ai debuté il y a moins de 2 mois dans le MQL4).

Même en cherchant un peu je ne comprend pas la plupart des erreurs.
Si des gens peuvent me corriger ;)
Merci D'avance
Fichiers joints
partie 1
partie 1
ea sevenscalp.jpg (143.21 Kio) Vu 1766 fois
partie 2
partie 2
ea sevenscalp1.jpg (53.34 Kio) Vu 1766 fois
Avatar du membre
Amarantine
Modératrice
Messages : 75630
Enregistré le : 16 sept. 2011 19:12

Re: MQL4 problème syntaxe!!

Message non lu par Amarantine »

Bonjour , avant de participer au forum, il faut se présenter dans présentation des membres comme l'exige la Nétiquette. Cela permet aux membres de mieux répondre à tes questions en connaissant ton niveau, ton expérience et ton compte sera débloqué.
Avatar du membre
Amarantine
Modératrice
Messages : 75630
Enregistré le : 16 sept. 2011 19:12

Re: MQL4 problème syntaxe!!

Message non lu par Amarantine »

En attente de présentation.
Avatar du membre
Amarantine
Modératrice
Messages : 75630
Enregistré le : 16 sept. 2011 19:12

Re: MQL4 problème syntaxe!!

Message non lu par Amarantine »

Présentation faite. :mercichinois:
Avatar du membre
BearIsDead
Membre du Conseil Jedi
Messages : 10291
Enregistré le : 09 nov. 2017 20:02

Re: MQL4 problème syntaxe!!

Message non lu par BearIsDead »

J'avais lu "MySQL" au lieu de "MQL"... Donc sorry je :arrow:
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

- comment ça du mql5 !??
sinon j'ai bien vu que c'est la catastrophe
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

Nan le site mql5 c'est juste l'adresse qui fait partie de l’entête type du template vierge j'imagine,
mon fichier est bien en .mq4
sinon pour le reste
le" ;" je l'avais rectifier juste après l'avoir posté. (je m'en suis rendu compte après dsl)
et pour la variable numérique tu as bien raison, c'est bien ça pour cette ligne.
merci.
Ano782345

Re: MQL4 problème syntaxe!!

Message non lu par Ano782345 »

Tu trouveras la doc ici
https://docs.mql4.com

Si tu es débutant tu trouveras surement un code de départ dans https://www.mql5.com/en/code/mt4
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

voilà je viens de corriger une bonne partie du programme,
j'en suis maintenant à 45 erreurs,
Je pense que maintenant c'est plus lisible pour vous autres, connaisseurs en la matière.
ce qui m’embête le plus maintenant c'est tout ce que j'ai inscrit dans la fonction start.
si quelqu'un a des idées car j'ai beau cherché j'ai un peu du mal à comprendre.
encore merci pour votre aide.
Fichiers joints
ea correction1.jpg
ea correction1.jpg (99.59 Kio) Vu 1725 fois
ea correction2.jpg
ea correction2.jpg (108.09 Kio) Vu 1725 fois
ea correction3.jpg
ea correction3.jpg (42.2 Kio) Vu 1725 fois
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

OK ?je vais voir ça et je reprendrai le programme!
merci quand même.
Boom
Apprenti Jedi
Messages : 801
Enregistré le : 09 janv. 2017 10:56

Re: MQL4 problème syntaxe!!

Message non lu par Boom »

Je rejoins -, il y a énormément d’erreurs de syntaxe, tu déclare un Time dans un int, il te manque des ; à certains endroits, les | sont utilisés pourquoi? Si tu veux faire un « ou » c’est ||, certaines variables selon l’endroit dans le programme où elles sont utilisées doivent être déclarées dans le Global, chose dont je pense que tu ignore l’existence vu que tu déclare un extern dans ton ordersend, tu déclare des double pour tes comparaisons critxx alors que le résultat sera forcément booléen (0 ou 1), mais là après c’est plus de l’optimisation de ressources.

Lorsque j’ai commencé le mql, je me suis aidé de ce site https://www.eole-trading.com/wp-content/uploads/2012/03/mql4.pdf et du site donné par Ano782345.

Quelques heures de réflexion et tu t’en sortiras, ça ne sert à rien que l’on te corrige ton code si tu ne sais pas ce que tu fait, c’est comme si tu apprenais une langue et que l’on te disait quoi dire sans que tu connaisse la signification des mots, enfin c’est mon point de vue.

Après recherche sur ces sites, tu te rendras compte très facilement de tes erreurs, et si tu butte toujours sur certaines, reposte ton code, avec la liste des erreurs, qui au passage si tu double clic dessus, t’emmène directement à l’endroit où elle se trouve.

Bon courage
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

bonjour, tout le monde
c'est encore moi, après avoir galéré a corriger mon EA j'y suis enfin arrivé!!! j'ai pu le compiler.
mais celui-ci ne marche pas tout a fait comme je voudrais
en fait je voudrais qu'il me passe un trade par bougie a l'ouverture de celle ci, et non pas a chaque tick
j'ai essayé plusieurs fonctions, mais rien à faire
ca ne fonctionne pas!
j'ai essayer de mettre une variable lastone, Current pour qu'il detecte un changement de
bougie mais j'ai du me foirer quelquepart.
si quelqu'un peut m'expliquer parce que je n'y arrive vraiment pas

Code : #

//+------------------------------------------------------------------+
//|                                          SEVEN_SCALP_BUYSTOP.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double lots;
extern double magic;
extern double tp;

//----VARIABLES
double a,b,c;

//--- bougie 2 (a)
double Closea;                      
double Opena;                          

//--- bougie 1 (b)
double Closeb;                         
double Openb;                             

//--- bougie 0 (c)
double Closec;                          
double Openc;                          

double cours;                           
double mbuystop;
 
double low2;                            
double low1;                            
double low0;                             
double sl;
 
int Current;                            
int lastone;                              
 
//----FONCTIONS
 
double coursactuel()
    {double res;
    res = (Bid + Ask)/2.0;
    return(res);
    }
     
double mbuy()
    {double res;
    res = (a+b+c)/3.0;
    return(res);     
    }

int ticket;    
    
    
    
int init()
  {
 
 
   return(0);
  }


int start()
  {  
  
//--- bougie 2 (a)
Closea = iClose (NULL, PERIOD_M5, 2);
Opena  = iOpen (NULL, PERIOD_M5, 2);

//--- bougie 1 (b)
Closeb = iClose (NULL, PERIOD_M5, 1);
Openb = iOpen (NULL, PERIOD_M5, 1);  
 
//--- bougie 0 (c) 
Closec = iClose (NULL, PERIOD_M5, 0);
Openc = iOpen (NULL, PERIOD_M5, 0);  

cours = coursactuel();
mbuystop = mbuy();

low2 = iLow (NULL, PERIOD_M5, 2);
low1 = iLow (NULL, PERIOD_M5, 1);
low0 = iLow (NULL, PERIOD_M5, 0);

Current = TimeMinute (TimeCurrent());
//lastone = TimeCurrent = 0;

//--- bougie 2

/*  if (Closea > Opena)
        a = Closea;
     
  else if(Opena > Closea)
        a = Opena;    */
  a = MathMax(Closea,Opena);
  
//--- bougie 1  
  
/*  if (Closeb > Openb)
        b = Closeb; 
        
  else if (Openb > Closeb)
        b = Openb; */
        
  b = MathMax(Closeb,Openb);
  
//--- bougie 0        
        
/*  if (Closec > Openc)
        c = Closec; 
        
  else if (Openc > Closec)
        c = Openc; */
      
  c= MathMax(Closec,Openc);  
  
//--- determiner sl
/*       if(low0 < low1 && low0 < low2) 
     sl = low0;
    else if(low1 < low0 && low1 < low2)
     sl = low1; 
    else if(low2 < low0 && low2 < low1)
     sl = low2;         
*/        
sl = MathMin(low0, MathMin(low1,low2)); 
 
  
  
  
//--- posez les 2 conditions nécessaire pour déclencher Ordre BUYSTOP
   if(lastone != Time[0] && cours < mbuystop) {
   
      ticket = OrderSend(NULL,OP_BUYSTOP,lots,mbuystop,3,sl,tp,"",magic,PERIOD_M5*3,Blue); 
   }
   return(0);
   
  }
Boom
Apprenti Jedi
Messages : 801
Enregistré le : 09 janv. 2017 10:56

Re: MQL4 problème syntaxe!!

Message non lu par Boom »

Salut Se7enRise, content que tu t'en sois sortie :bravo:

Pour éviter qu'un ordre soit ouvert à chaque ticks, appel cette fonction quand tu le souhaite, puis utilise la valeur OpenedOrder (1 pour buy, 2 pour sell) afin de bloquer une nouvelle ouverture tant que le trade ouvert ne soit pas clôt.

Par contre il y a toujours des problèmes dans ton code, je comprend pas trop tes fonctions (ce qu'il y a en copie dessous le texte en est une et comme tu peux le voir n'a absolument pas la même structure que les tiennes), et l'autre gros problème c'est que tout ce qu'il y a après tes /* n'est pas prise en compte donc faut les enlever

Après je pense qu'il faut que tu te repenche sur la doc car il y a encore pas mal d'erreur, et pense à poster le détail des erreurs, c'est plus facile pour les trouver que de lire le code

Code : #

//+------------------------------------------------------------------+
//| Contrôle Ordre                                                   |
//+------------------------------------------------------------------+ 
void CheckTrade() {
    OpenedOrder = 0;
    for(int i= OrdersTotal()-1;i>=0;i--)
    {
      OrderSelect(i, SELECT_BY_POS);
      int type   = OrderType();
      if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) 
      {
         switch(type)
         {
            case OP_BUY       : OpenedOrder = 1;
                                break;
            case OP_SELL      : OpenedOrder = 2;
                                break;
         }
      }
   }
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

salut Boom
je viens de corriger les erreurs
y'a un truck que comprend pas c'est que ton code je le met avant mon ordersend??
et sinon quelles sont les fonctions que tu ne comprend pas parce que moi j'avais reussi a le compiler
mais bien sur sans aucun effet sur Mt4.
Boom
Apprenti Jedi
Messages : 801
Enregistré le : 09 janv. 2017 10:56

Re: MQL4 problème syntaxe!!

Message non lu par Boom »

Le code en lui même tu le met où tu veux c’est selon l’organisation de ton programme.
Ensuite dans le start, tu met Checktrade(); , puis dans les conditions d’ouverture de ton ordre, tu ajoute OpenedOrder == 1 pour bloquer les buy, et == 2 pour bloquer les sell, ou si tu as des conditions communes tu peux mettre == 0.

Pour les fonctions, tu doit les commencer par void le nom que tu lui donne puis (), après tu ouvre les { et tu rentre ta fonction
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

bonjour Boom
Je viens de mettre le code que tu m'a dis mais il ya quelques erreurs encore!!

Code : #

//+------------------------------------------------------------------+
//|                                          SEVEN_SCALP_BUYSTOP.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double lots;
extern double magic;
extern double tp;

void CheckTrade();

//----VARIABLES
double a,b,c;

//--- bougie 2 (a)
double Closea;                      
double Opena;                          

//--- bougie 1 (b)
double Closeb;                         
double Openb;                             

//--- bougie 0 (c)
double Closec;                          
double Openc;                          

double cours;                           
double mbuystop;
 
double low2;                            
double low1;                            
double low0;                             
double sl;
 
int Current;                            
int lastone;                              
int OpenenOrder;
//----FONCTIONS
 
double coursactuel()
    {double res;
    res = (Bid + Ask)/2.0;
    return(res);
    }
     
double mbuy()
    {double res;
    res = (a+b+c)/3.0;
    return(res);     
    }


int ticket;    
    
    
    
int init()
  {
 
 
   return(0);
  }

  void CheckTrade() {
    OpenedOrder = 0;
    for(int i= OrdersTotal()-1;i>=0;i--)
    {  
      OrderSelect(i, SELECT_BY_POS);
      int type   = OrderType();
      if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
      {
         switch(type)
         {
            case OP_BUY       : OpenedOrder = 1;
                                break;
            case OP_SELL      : OpenedOrder = 2;
                                break;
         }
      }
   }

  }

int start() 
     {  
  
//--- bougie 2 (a)
Closea = iClose (NULL, PERIOD_M5, 2);
Opena  = iOpen (NULL, PERIOD_M5, 2);

//--- bougie 1 (b)
Closeb = iClose (NULL, PERIOD_M5, 1);
Openb = iOpen (NULL, PERIOD_M5, 1);  
 
//--- bougie 0 (c) 
Closec = iClose (NULL, PERIOD_M5, 0);
Openc = iOpen (NULL, PERIOD_M5, 0);  

cours = coursactuel();
mbuystop = mbuy();

low2 = iLow (NULL, PERIOD_M5, 2);
low1 = iLow (NULL, PERIOD_M5, 1);
low0 = iLow (NULL, PERIOD_M5, 0);

Current = TimeMinute (TimeCurrent());
//lastone = TimeCurrent = 0;

//--- bougie 2

  if (Closea > Opena)
        a = Closea;
     
  else if(Opena > Closea)
        a = Opena;    
  a = MathMax(Closea,Opena);
  
//--- bougie 1  
  
  if (Closeb > Openb)
        b = Closeb; 
        
  else if (Openb > Closeb)
        b = Openb; 
        
  b = MathMax(Closeb,Openb);
  
//--- bougie 0        
        
  if (Closec > Openc)
        c = Closec; 
        
  else if (Openc > Closec)
        c = Openc; 
      
  c= MathMax(Closec,Openc);  
  
//--- determiner sl
       if(low0 < low1 && low0 < low2) 
     sl = low0;
    else if(low1 < low0 && low1 < low2)
     sl = low1; 
    else if(low2 < low0 && low2 < low1)
     sl = low2;         
        
sl = MathMin(low0, MathMin(low1,low2)); 
  
  
//--- posez les 2 conditions nécessaire pour déclencher Ordre BUYSTOP

    if(OpenedOrder == 1; && OpenedOrder == 2;){

    {
     ticket = OrderSend(NULL,OP_BUYSTOP,lots,mbuystop,3,sl,tp,"",magic,PERIOD_M5*3,Blue); 
    }
   return(0);
           
 } 
Fichiers joints
errors.jpg
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

voici le lien des erreurs
Image jointe
https://www.andlil.com/forum/ressources/image/69681?sid=17c2c0888c51e478d017d9652f998d0d
Image jointe
https://www.andlil.com/forum/ressources/image/69681?sid=17c2c0888c51e478d017d9652f998d0d
Boom
Apprenti Jedi
Messages : 801
Enregistré le : 09 janv. 2017 10:56

Re: MQL4 problème syntaxe!!

Message non lu par Boom »

Relis mon message.

Enlève le void devant l’appel de la fonction CheckTrade(); et tu la mis dans Global et non Start comme je te l’ai précisé.

Déplace la fonction dans le Start, où tu veux mais dans le Start, sinon elle ne marchera qu’au lancement de ton robot.

Et pour finir, remplace MagicNumber par la variable que tu as mis pour ton nombre magique, je crois que tu as mis number, et corrige la variable int OpenedOrder tu as mis OpenenOrder

Repenche toi sur le manuel, tu fais beaucoup d’erreur basique
Boom
Apprenti Jedi
Messages : 801
Enregistré le : 09 janv. 2017 10:56

Re: MQL4 problème syntaxe!!

Message non lu par Boom »

Petite correction, la fonction qui commence par VOID met la en dehors du programme, après le dernier return(0), et enlève aussi les ; lorsque tu met OpenedOrder dans les conditions d'ouverture de ton ordre, et en plus aucun ordre ne sera ouverture puisque tu lui dit d'en ouvrir un si tu as un ordre BUY et un ordre SELL ouvert, et aussi il faut que tu modifie légèrement ce que je t'ai donné comme code puisque tu utilise des BUYSTOP et non des BUY
Se7enRise
Ewok
Messages : 11
Enregistré le : 19 févr. 2018 14:27

Re: MQL4 problème syntaxe!!

Message non lu par Se7enRise »

ok je corriger ca
et tenter de comprendre.
merci!