не получается изменить отложенный ордер BuyLimit

 
int ticket;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(ticket=OrderGetTicket(i)>0)
        {
         if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT)
            if(OrderGetDouble(ORDER_PRICE_OPEN)<Ask-Delta)
              {
               //--- готовим запрос
               MqlTradeRequest request;
               request.symbol=_Symbol;                      // инструмент
               request.action=TRADE_ACTION_MODIFY;         // установка отложенного ордера
               request.price =(int)(Ask-Delta);                     // цена для открытия
               request.type=ORDER_TYPE_BUY_LIMIT;
               request.type_time=ORDER_TIME_DAY;
               //--- отправим торговый приказ
               MqlTradeResult result={0};
               OrderSend(request,result);
               //--- выведем в лог ответ сервера  
               Print(__FUNCTION__,":",result.comment);

              }
         if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_LIMIT)
            if(OrderGetDouble(ORDER_PRICE_OPEN)>Bid+Delta)
              {

               //--- готовим запрос
               MqlTradeRequest request;
                request.symbol=_Symbol;                      // инструмент
               request.action=TRADE_ACTION_MODIFY;         // установка отложенного ордера
               request.price=(int)(Bid+Delta);               // цена для открытия
               request.type=ORDER_TYPE_BUY_LIMIT;
               request.type_time=ORDER_TIME_DAY;
               //--- отправим торговый приказ
               MqlTradeResult result={0};
               OrderSend(request,result);
               //--- выведем в лог ответ сервера  
               Print(__FUNCTION__,":",result.comment);

              }
        }
     }
  }

вот лог журнала

2013.01.15 19:44:29 Trades '1000557': failed modify order #1086247531815370752 buy 0.00 RTS-3.13 at market sl: 0.00000 tp: 0.00000 -> 157900.00000 (0.00000), sl: 0.00000 tp: 0.00000 [Invalid request]

 При этом открыт ордер BuyLimit лотом 1,0 лотов. Похоже что я его не выбрал. Как это сделать ?   


 

Пропущена функция OrderSelect(ticket)

int ticket;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(ticket=OrderGetTicket(i)>0 && OrderSelect(ticket))
        {
         if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT)
            if(OrderGetDouble(ORDER_PRICE_OPEN)<Ask-Delta)
              {

И вот это вызывает некоторые сомнения:

request.price=(int)(Bid+Delta);               // цена для открытия
 
Wahoo:

Пропущена функция OrderSelect(ticket)


OrderGetTicket() по индексу тоже выбирает ордер.
 
Wahoo:

Пропущена функция OrderSelect(ticket)

И вот это вызывает некоторые сомнения:

Используется OrderGetTicket();

Bid определено ранее... 

 
dimeon
Перепутаны обязательные поля запроса. Попробуйте так:

 

int ticket;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(ticket=OrderGetTicket(i)>0)
        {
         if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT)
            if(OrderGetDouble(ORDER_PRICE_OPEN)<Ask-Delta)
              {
               MqlTradeRequest request={0};
               request.action=TRADE_ACTION_MODIFY;                
               request.order=ticket;           
               request.price=NormalizeDouble(Ask-Delta,_Digits);                     
               request.type_time=ORDER_TIME_DAY;
               MqlTradeResult result={0};
               OrderSend(request,result);
               //--- выведем в лог ответ сервера  
               Print(__FUNCTION__,":",result.retcode);
              }
         ...
        }
     }
  }

 

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