Удаление отложников - страница 2

 
Filya1212:

Да, все верно, я выставляю сетку из отложников с шагом(произвольным) от основного рыночного ордера, для закрытия используется один и тот же стоп лосс и обратные сигналы, все работает так как надо, но хотелось бы удалить все отложники при достижении стоп лосса (как вариант удаление можно производить при закрытии сделок)

P.S. смысл прикреплять весь код, если вопрос только про удаление не реализованных отложников, если схемы есть, то я думаю вряд ли они будут сильно отличаться, если я не прав, тогда поясните)) 

Поясняю во первых у вас в коде очень много логических и синтактических ошибок. Во вторых что бы правильно построить логику удаления нужно видеть полностью всю картину а не ее кусок. Первый код который я вам приводил должен был закрывать рыночные и удалять отложники по сигналу. Я вам сейчас написал функцию которая удаляет отложенные ордера при срабатывании стоплосса, для этого в эту функцию необходимо передать тикет ордера который нужно отследить на срабатывание по стоплоссу.

void Event(int ticket)
  {
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      if(StringFind(OrderComment(),"sl")>=0)
        {
         int total=OrdersTotal();
         bool res;
         for(int i=total-1; i>=0; i--)
           {
            if(!OrderSelect(i,SELECT_BY_POS))continue;
            if(OrderMagicNumber()!=MagicNumber2)continue;
            if(OrderSymbol()!=Symbol())continue;
            if(OrderType()==OP_BUYSTOP)
              {
               res=OrderDelete(OrderTicket(),Violet);
               if(!res)Print("Ошибка удаления ордера ",OrderTicket()," № - ",GetLastError());
              }
           }
        }
     }
  }


 

 
Sergey Gritsay:

Поясняю во первых у вас в коде очень много логических и синтактических ошибок. Во вторых что бы правильно построить логику удаления нужно видеть полностью всю картину а не ее кусок. Первый код который я вам приводил должен был закрывать рыночные и удалять отложники по сигналу. Я вам сейчас написал функцию которая удаляет отложенные ордера при срабатывании стоплосса, для этого в эту функцию необходимо передать тикет ордера который нужно отследить на срабатывание по стоплоссу.

void Event(int ticket)
  {
   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {
      if(StringFind(OrderComment(),"sl")>=0)
        {
         int total=OrdersTotal();
         bool res;
         for(int i=total-1; i>=0; i--)
           {
            if(!OrderSelect(i,SELECT_BY_POS))continue;
            if(OrderMagicNumber()!=MagicNumber2)continue;
            if(OrderSymbol()!=Symbol())continue;
            if(OrderType()==OP_BUYSTOP)
              {
               res=OrderDelete(OrderTicket(),Violet);
               if(!res)Print("Ошибка удаления ордера ",OrderTicket()," № - ",GetLastError());
              }
           }
        }
     }
  }


 

хммм, суть вроде как понял, сегодня к сожалению не успею попробовать, завтра отпишу, спасибо!