OrderClose ne fonctionne pas - page 4

 

Bonjour,

J'ai compilé ce qui suit et j'ai obtenu des erreurs comme celles-ci : Puis-je savoir quelle partie s'est mal passée ?


'postin forum.mq4'      postin forum.mq4        1       1
',' - unexpected token  postin forum.mq4        59      53
expression has no effect        postin forum.mq4        59      54
1 error(s), 1 warning(s)                2       2
//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=300;

double     bar1;
double     bar2;
double     bar3;
int        total,ticket;
//datetime   previousTime; 

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {

  total=OrdersTotal();
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
     Comment("Bar1="+DoubleToString(bar1,Digits)+"\n"+
             "Bar2="+DoubleToString(bar2,Digits)+"\n"+
             "Bar3="+DoubleToString(bar3,Digits)+"\n"
             );
                         
   if(total>0)
   {
   OrderSelect(0,SELECT_BY_POS);
   if (bar3<-2) OrderClose(OrderTicket(),Lots,Bid,3),Green;
   if (bar3>2) OrderClose(OrderTicket(), Lots,Ask,3,Red);
   }
   //if(Time[0]==previousTime) return(0);
   //previousTime=Time[0];
   if(total<1)
     {
      if (bar3>1)
      {  
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      //if(ticket<0)Print("Error OP_BUY order failed, error:"+GetLasterror());
      return(0);
      }
      
      if (bar3<-1)
      {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      //if(ticket<0)Print("Error OP_SELL order failed, error:"+GetLasterror());
      return(0);
      }
     }
   
   return(0);
  }
//+------------------------------------------------------------------+
 
Comparez les deux lignes.
   if (bar3<-2) OrderClose(OrderTicket(),Lots,Bid,3),Green;
   if (bar3>2)  OrderClose(OrderTicket(),Lots,Ask,3,Red);
 

Le rapport d'erreur vous indique où se trouve l'erreur

',' - unexpected token postin forum.mq4 59 53

et si vous double-cliquez sur l'erreur, le curseur est amené directement à la source du problème.

 

Salut GumRai,


Merci, je l'ai corrigé. L'erreur vient des parenthèses insérées accidentellement.

 

Merci WHRoeder.

Est-ce que

 

Salut thrdel,

Est-ce que Time[0] fait référence à l'heure de la mesure 0 ? Existe-t-il un Time[1], un Time[2] etc ? J'ai essayé de le googler mais il n'y a pas beaucoup d'informations sur Internet. De plus, si j'attache cet EA à deux paires de devises, cela signifie-t-il que OrderSelect ne sélectionne que les ordres dans le graphique lui-même ou tous les ordres dans le terminal ?

 

Bonjour thrdel,


Pourquoi ai-je ce message d'avertissement "implicit conversion from 'number' to 'string' postin forum.mq4 69 61" pour le codage " if(ticket<0)Print("Error OP_BUY order failed, error : "+GetLastError()) ;"?

 
chuale:

Est-ce que Time[0] fait référence à l'heure de la mesure 0 ? Existe-t-il un Time[1], un Time[2], etc ?

Oui

chuale:

J'ai essayé de le googler mais il n'y a pas beaucoup d'informations sur Internet.

http://bit.ly/1fJi4XA

chuale:

En outre, si j'attache cet EA à deux paires de devises, cela signifie-t-il que OrderSelect ne sélectionne que les ordres dans le graphique lui-même ou tous les ordres dans le terminal ?

dépend de votre code

 
Merci qiol
 
chuale:

Salut thrdel,


Pourquoi je reçois ce message d'avertissement "implicit conversion from 'number' to 'string' postin forum.mq4 69 61" pour le codage " if(ticket<0)Print("Error OP_BUY order failed, error : "+GetLastError()) ;"?


"La conversion implicite de 'nombre' à 'chaîne'" peut être une douleur dans le cul quand vous avez de grandes boucles.

Cela signifie qu'il faut faire défiler des tas de lignes dans le rapport d'erreur.

Dans votre cas, GetLastError() est un code entier, donc il vous avertit simplement qu'il sera converti en chaîne de caractères pour l'instruction print.

Si vous êtes sûr que ce n'est pas un problème, vous pouvez ajouter (string) pour arrêter ces avertissements ennuyeux.

if(ticket<0)   Print("Error OP_BUY order failed, error:" + (string) GetLastError());

Par ailleurs, si vous ne le saviez pas...

Je place généralement ceci après les Externs/Inputs

#include <stdlib.mqh>

et vous pouvez ensuite utiliser

if(ticket<0)   Print("Error OP_BUY order failed, error: " + ErrorDescription(GetLastError() ) );

pour que la description de l'erreur s'imprime, et pas seulement le code.

Raison: