ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests

Re: MQL4 problème syntaxe!!

par Boom » 21 Fév 2018 07:11

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 AlgoFlex.

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

Re: MQL4 problème syntaxe!!

par Se7enRise » 27 Fév 2018 13:33

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: Tout sélectionner
//+------------------------------------------------------------------+
//|                                          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);
   
  }

Re: MQL4 problème syntaxe!!

par Boom » 27 Fév 2018 21:03

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: Tout sélectionner
//+------------------------------------------------------------------+
//| 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;
         }
      }
   }

Re: MQL4 problème syntaxe!!

par Se7enRise » 27 Fév 2018 21:41

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.

Re: MQL4 problème syntaxe!!

par Boom » 28 Fév 2018 00:49

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

Re: MQL4 problème syntaxe!!

par Se7enRise » 28 Fév 2018 12:51

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

Code: Tout sélectionner
//+------------------------------------------------------------------+
//|                                          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

Re: MQL4 problème syntaxe!!

par Se7enRise » 28 Fév 2018 12:54

voici le lien des erreurs

https://www.andlil.com/forum/ressources/image/69681?sid=17c2c0888c51e478d017d9652f998d0d
https://www.andlil.com/forum/ressources/image/69681?sid=17c2c0888c51e478d017d9652f998d0d

Re: MQL4 problème syntaxe!!

par Boom » 28 Fév 2018 15:37

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

Re: MQL4 problème syntaxe!!

par Boom » 28 Fév 2018 21:09

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

Re: MQL4 problème syntaxe!!

par Se7enRise » 28 Fév 2018 22:07

ok je corriger ca
et tenter de comprendre.
merci!

Articles en relation
Aide Technique MQL4
par Gacanga » 06 Oct 2017 16:43 (2 Réponses)
Aide mql4, grrr !!
par BilouZ36 » 26 Oct 2017 14:40 (5 Réponses)
besoin d'aide en mql4
par Philippe56380 » 09 Fév 2019 13:04 (6 Réponses)
Un seul trade par bougie - mql4
par Gacanga » 24 Mar 2017 11:31 (3 Réponses)
MQL4 - MagicNumber et Trailing Stop
par Gacanga » 04 Avr 2017 11:39 (5 Réponses)
HELP mql4 codage Expert Advisor
par Eversa » 12 Avr 2019 18:39 (1 Réponses)
Programmation en MQL4 : récupérer le contenu d'un email/SMS
par oscar » 15 Fév 2017 18:18 (3 Réponses)
Calculer la moyenne mobile du rsi en mql4 dans un indicateur
par Gacanga » 09 Nov 2017 12:27 (2 Réponses)
probleme codage Prt !
par pascal67 » 14 Aoû 2015 21:00 (3 Réponses)
Problème d'heure GMT/pas GMT sur DAX ?
par VB6backtester » 09 Déc 2019 20:04 (7 Réponses)

ProRealTime