Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 735

 

Chicos de Mql5, ¿podéis ayudarme a hacer una solicitud para cerrar una posición en una cuenta de cobertura? Situación: abierta la posición de COMPRA, necesitamos cerrarla con Límite de Venta. Pregunta: ¿Cómo puedo escribir correctamente una solicitud, para cerrar exactamente la posición elegida, y no para abrir nuevas VENTAS bloqueando las COMPRAS? Por favor, escriba un código con comentarios. Gracias de antemano.

 

Hola. Ayuda, por favor.

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

Hola. ¿Pueden ayudarme, por favor?


La sentencia switch debe ser de tipo entero

 
Alekseu Fedotov:

La sentencia switch debe ser de tipo entero

Pero"LastDir" es un buffer, no puede ser int.

¿Cómo salir de esta situación?

 
bij:

Pero"LastDir" es un buffer, no puede ser int.

¿Cómo salir de esta situación?

Suprimirel operador del interruptor,

trabajar con el operador if()

 

No hay certeza de que esto sea equivalente al primer caso

                       if(LastDir[i]==0)
 
@Alekseu Fedotov, gracias, funciona) En 2009el cambio podría haber sido doble)
 
bij:
@Alekseu Fedotov, gracias, funciona) En 2009el cambio podría haber sido doble)

siempre fue sólo un todo )

 
bij:

Hola. Ayuda, por favor.


Si el búfer sólo puede contener valores enteros representados como dobles 0,0, 1,0 y -1,0 yo marcaría esta opción

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];                            
                              }
                        }
Además, yo pondría el caso -1 antes del caso 0
 
Alexey Viktorov:

Si el búfer sólo puede contener valores enteros representados como dobles 0,0, 1,0 y -1,0 yo marcaría esta opción

Además, yo pondría el caso -1 antes del caso 0.

En este caso, probablemente debería establecerse -1 por defecto : especialmente porque no hay ningún caso por defecto

Aunque... Habría que ser un autor para saber cuál sería mejor establecer por defecto.

Razón de la queja: