Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 735

 

Ребята профи Mql5, подсобите с составлением запроса для закрытия позиции на хедж-счете. Ситуация: открыта позиция BUY нужно её закрыть лимитным Sell-ом. Вопрос: как правильно составить запрос, чтобы закрылась именно выбранная позиция, а не открылась новая SELL локирующая BUY??? Прошу, пожалуйста напишите кусок кода с комментариями! Заранее благодарю!

 

Здравствуйте. Помогите, пожалуйста.

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

Здравствуйте. Помогите, пожалуйста.


Выражение оператора switch должно быть целого типа

 
Alekseu Fedotov:

Выражение оператора switch должно быть целого типа

Но "LastDir" это буфер, он не может быть int.

Как выйти из положения?

 
bij:

Но "LastDir" это буфер, он не может быть int.

Как выйти из положения?

Откажитесь от оператора switch,

работайте оператором if()

 

Нет уверенности что это равнозначно первому  case

                       if(LastDir[i]==0)
 
@Alekseu Fedotov, спасибо, работает) В 2009 году switch мог быть double)
 
bij:
@Alekseu Fedotov, спасибо, работает) В 2009 году switch мог быть double)

он всегда был только целый )

 
bij:

Здравствуйте. Помогите, пожалуйста.


Если в буфере могут быть только целые значения представленные как double 0.0, 1.0 и -1.0 я-бы проверил такой вариант

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];                            
                              }
                        }
И ещё, я-бы case -1 поставил-бы раньше чем case 0
 
Alexey Viktorov:

Если в буфере могут быть только целые значения представленные как double 0.0, 1.0 и -1.0 я-бы проверил такой вариант

И ещё, я-бы case -1 поставил-бы раньше чем case 0

Тут наверное -1 нужно как default : задавать, тем более, что там нету дефолтного кейса

Хотя ... тут нужно быть автором, чтобы точно знать какое значение лучше дефолтным ставить.