Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 735

 

Mql5 les gars, pouvez-vous m'aider à faire une demande pour fermer une position dans un compte de couverture ? Situation : nous avons ouvert une position BUY, nous devons la fermer avec une limite de vente. Question : Comment puis-je écrire correctement une demande, pour fermer exactement la position choisie, et ne pas ouvrir de nouveaux SELL bloquant BUY ? Veuillez écrire un morceau de code avec des commentaires ! Merci d'avance !

 

Bonjour. Aidez-nous, s'il vous plaît.

'LastDir' - illegal switch expression type


double LastDir[];
//............... 
switch(LastDir[i]){
                           case 0:
                              if(High[i]>LastHighValue[i]){
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i];                            
                                 PEACK[i]=High[i];
                              }   
                           break;                            
                           case 1:
                              if(High[i]>LastHighValue[i]){
                                 int lhb=iBarShift(NULL,0,LastHighTime[i],false);
                                 ZZ[lhb]=0;
                                 PEACK[lhb]=0;
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i];                            
                                 PEACK[i]=High[i];
                              }                           
                           break;
                           case -1:
                              if(High[i]>=LastLowValue[i]+Point*ZZReverse){
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i]; 
                                 PEACK[i]=High[i];                            
                              }
                        }
 
bij:

Bonjour. Pouvez-vous m'aider ?


L'instruction de commutation doit être de type entier

 
Alekseu Fedotov:

L'instruction de commutation doit être de type entier

Mais"LastDir" est un tampon, il ne peut pas être int.

Comment se sortir de cette situation ?

 
bij:

Mais"LastDir" est un tampon, il ne peut pas être int.

Comment se sortir de cette situation ?

Supprimez l'opérateur de l'interrupteur,

travailler avec l'opérateur if()

 

Il n'y a aucune certitude que cela soit équivalent au premier cas.

                       if(LastDir[i]==0)
 
@Alekseu Fedotov, merci, ça marche) En 2009l'interrupteur aurait pu être double)
 
bij:
@Alekseu Fedotov, merci, ça marche) En 2009l'interrupteur aurait pu être double)

c'était toujours un tout )

 
bij:

Bonjour. Aidez-nous, s'il vous plaît.


Si le tampon ne peut contenir que des valeurs entières représentées par des doubles 0.0, 1.0 et -1.0, je vérifierais cette option

double LastDir[];
//............... 
switch((int) LastDir[i]){
                           case 0:
                              if(High[i]>LastHighValue[i]){
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i];                            
                                 PEACK[i]=High[i];
                              }   
                           break;                            
                           case 1:
                              if(High[i]>LastHighValue[i]){
                                 int lhb=iBarShift(NULL,0,LastHighTime[i],false);
                                 ZZ[lhb]=0;
                                 PEACK[lhb]=0;
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i];                            
                                 PEACK[i]=High[i];
                              }                           
                           break;
                           case -1:
                              if(High[i]>=LastLowValue[i]+Point*ZZReverse){
                                 LastHighValue[i]=High[i];
                                 LastHighTime[i]=Time[i];
                                 LastDir[i]=1;  
                                 ZZ[i]=High[i]; 
                                 PEACK[i]=High[i];                            
                              }
                        }
De plus, je mettrais le cas -1 avant le cas 0.
 
Alexey Viktorov:

Si le tampon ne peut contenir que des valeurs entières représentées par des doubles 0.0, 1.0 et -1.0, je vérifierais cette option

De même, je mettrais le cas -1 avant le cas 0.

Ici, -1 devrait probablement être défini comme valeur par défaut : d'autant plus qu'il n'y a pas de cas par défaut

Bien que... Il faut être un auteur pour savoir lequel est le mieux à définir par défaut.