Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 735

 

Ragazzi di Mql5, potete aiutarmi a fare una richiesta per chiudere una posizione in un conto hedge? Situazione: posizione BUY aperta, abbiamo bisogno di chiuderla con Sell Limit. Domanda: Come faccio a scrivere correttamente una richiesta, per chiudere esattamente la posizione scelta, e non per aprire un nuovo SELL bloccando BUY? Per favore, scrivi un pezzo di codice con dei commenti! Grazie in anticipo!

 

Salve. Aiuto, per favore.

'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:

Salve. Potete per favore aiutarmi?


La dichiarazione di switch deve essere di tipo intero

 
Alekseu Fedotov:

La dichiarazione di switch deve essere di tipo intero

Ma"LastDir" è un buffer, non può essere int.

Come uscire da questa situazione?

 
bij:

Ma"LastDir" è un buffer, non può essere int.

Come uscire da questa situazione?

Eliminare l'operatore dell'interruttore,

lavorare con l'operatore if()

 

Non c'è certezza che questo sia equivalente al primo caso

                       if(LastDir[i]==0)
 
@Alekseu Fedotov, grazie, funziona) Nel 2009l'interruttore poteva essere doppio)
 
bij:
@Alekseu Fedotov, grazie, funziona) Nel 2009l'interruttore poteva essere doppio)

è sempre stato solo un intero)

 
bij:

Salve. Aiuto, per favore.


Se il buffer può contenere solo valori interi rappresentati come doppi 0.0, 1.0 e -1.0, controllerei questa opzione

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];                            
                              }
                        }
Inoltre, metterei il caso -1 prima del caso 0
 
Alexey Viktorov:

Se il buffer può contenere solo valori interi rappresentati come doppi 0.0, 1.0 e -1.0, controllerei questa opzione

Inoltre, metterei il caso -1 prima del caso 0.

Qui -1 dovrebbe probabilmente essere impostato come predefinito: soprattutto perché non c'è un caso predefinito

Anche se ... Bisognerebbe essere un autore per sapere quale sarebbe meglio impostare come predefinito.