Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 735

 

Pessoal do Mql5, vocês podem me ajudar a fazer um pedido para fechar uma posição em uma conta de hedge? Situação: aberta posição BUY, precisamos fechá-la com Sell Limit. Pergunta: Como faço para escrever corretamente um pedido, para fechar exatamente a posição escolhida e não para abrir um novo bloqueio de VENDA COMPRAR? Por favor, escreva um pedaço de código com comentários! Agradecemos antecipadamente!

 

Olá. Ajude, 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:

Olá. Você pode, por favor, me ajudar?


A declaração de interruptor deve ser do tipo inteiro

 
Alekseu Fedotov:

A declaração de interruptor deve ser do tipo inteiro

Mas a"LastDir" é um amortecedor, não pode ser int.

Como sair desta situação?

 
bij:

Mas a"LastDir" é um amortecedor, não pode ser int.

Como sair desta situação?

Desligue ooperador do interruptor,

trabalhar com o operador if()

 

Não há certeza de que isto seja equivalente ao primeiro caso

                       if(LastDir[i]==0)
 
@Alekseu Fedotov, obrigado, funciona) Em 2009a troca poderia ter sido dupla)
 
bij:
@Alekseu Fedotov, obrigado, funciona) Em 2009a troca poderia ter sido dupla)

sempre foi apenas um todo )

 
bij:

Olá. Ajude, por favor.


Se o buffer só pode conter valores inteiros representados como duplo 0,0, 1,0 e -1,0, eu marcaria esta opção

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];                            
                              }
                        }
Além disso, eu colocaria o caso -1 antes do caso 0
 
Alexey Viktorov:

Se o buffer só pode conter valores inteiros representados como duplo 0,0, 1,0 e -1,0, eu marcaria esta opção

Além disso, eu colocaria o caso -1 antes do caso 0.

Aqui -1 provavelmente deve ser definido como padrão : especialmente porque não há nenhum caso padrão

Embora ... Você teria que ser um autor para saber qual seria o melhor para definir como padrão.

Razão: