как правельно удалить отложенный ордер

 

парни помогите, пожалуйста

Корочи проблема такая во первый ставится ордер с немедленным исполнениям бай или селл и ставится две отложки при срабатывании профита или стопа надо отложки удалить написал вот такую конструкцию ничего не работает вот не пойму в чем тут ошибка

int delete()
{
//----
    int TekOrd;
       if(OrdersTotal()>0){
       TekOrd=SelectOrder(Symbol(),OP_BUY,Magic_u);
       if(TekOrd==0){                                                         //Если нет BUY  
          TekOrd=SelectOrder(Symbol(),OP_BUYLIMIT,Magic_u);
          if(TekOrd==0){                                                      //Удалим если есть отложенный BUYLIMIT
             if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить SELLSTOP ",TekOrd);}
        }}
       TekOrd=SelectOrder(Symbol(),OP_SELL,Magic_u);
       if(TekOrd==0){                                                         //Если нет SELL 
          TekOrd=SelectOrder(Symbol(),OP_SELLLIMIT,Magic_u);
          if(TekOrd==0){                                                      //Удалим если есть отложенный BUYSTOP
                if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить BUYSTOP ",TekOrd);}
                
     }}}
//----
   return(0);
  }
//+------------------------------------------------------------------+

int SelectOrder(string Sym,int Tip,int Magic_u){
    int TotOrd=OrdersTotal();
    int OrdTick=-1;
    for(int OrdPos=TotOrd-1;OrdPos>=0;OrdPos--){
        if(OrderSelect(OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
           if(OrderSymbol()==Sym){                                           //Есть ли ордера с нужным символом
              if(OrderType()==Tip){                                          //Если ли нужный тип ордера  
                 if(Magic_u==0){Magic_u=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                 if(OrderMagicNumber() == Magic_u){                            //Есть ли ордера с нужным Магик номером
                    OrdTick = OrderTicket(); break;                          
    }}}}}
    return(OrdTick);                                                         //Возвращает тикет найденного ордера или -1
}

по идеи условия TekOrd==0 правильные, а не работает, не знаю почему

или может как то по-другому сделать мне надо просто удалить отложи при отсувтвии рыночного ордера

зарания благодарен за помощь

 
Замени
    if(TekOrd==0){                                                         //Если нет BUY  
       TekOrd=SelectOrder(Symbol(),OP_BUYLIMIT,Magic_u);
          if(TekOrd==0){                                                      
на
if(TekOrd==0){                                                         //Если нет BUY  
      TekOrd=SelectOrder(Symbol(),OP_BUYLIMIT,Magic_u);
          if(TekOrd!=0){                                                      
Поправь Принт, сбивает с толку.
 
Не работает
 
voron писал(а) >>
Не работает

Ваша функция SelectOrder(...) возвращает номер тикета ордера. Если, ордер найден, то тикет будет больше или равен 0.

Попробуйте все условия типа

if(TekOrd==0)

заменить на

if(TekOrd>=0)

 

да я уже и так и сяк и эдок

и функцию принтами пробивал то

то удалят сразу то вопще на отказ

может както по по другому написать

 
//Возвращает тикет найденного ордера или -1
Почему же Вы тогда сравниваете TekOrd с нулём?

    int TekOrd;
       if(OrdersTotal()>0){
       TekOrd=SelectOrder(Symbol(),OP_BUY,Magic_u);
       if(TekOrd==-1){                                                         //Если нет BUY  
          TekOrd=SelectOrder(Symbol(),OP_BUYLIMIT,Magic_u);
          if(TekOrd!=-1){                                                      //Удалим если есть отложенный BUYLIMIT
             if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить SELLSTOP ",TekOrd);}
        }}
       TekOrd=SelectOrder(Symbol(),OP_SELL,Magic_u);
       if(TekOrd==-1){                                                         //Если нет SELL
          TekOrd=SelectOrder(Symbol(),OP_SELLLIMIT,Magic_u);
          if(TekOrd!=-1){                                                      //Удалим если есть отложенный BUYSTOP
                if(!OrderDelete(TekOrd,Black)){Print("Неудалось удалить BUYSTOP ",TekOrd);}
                
     }}}
 
Xupypr писал(а) >>

спасибо огромнейшее все теперь как швейцарские часы работают )))

Причина обращения: