Выполнение отложенных ордеров

 

Приветствую.

В MQL коде вызываю выполнение отложенного ордера (OP_BUYLIMIT в примере):

int OpenBuyLimitOrderDolivka(double lots, double StopLossValue, double MaxBuyPrice)
{
   // dMaxPrice - max цена активного BUY ордера, Ask - текущая цена сигнала, DolivkaBackPercent - процент возврата цены от текущей к dMaxPrice //

   int ticket;
   string sComment = WindowExpertName() + globalExpertUniqueNumber;

   Print("Доливка, buy-limit ордер");

   RefreshRates();
   double dPriceDiff = Ask - MaxBuyPrice; // разница в текущей (Ask) и прошлой (MaxBuyPrice) цене
   double dPriceBack = Ask - (dPriceDiff * DolivkaBackPercent / 100.0); // цена с откатом назад
   
   double dOpenPrice = NormalizeDouble(dPriceBack, Digits); // цена открытия
   StopLossValue = NormalizeDouble(StopLossValue - dPriceDiff, Digits); // s/l со сдвигом
   double dProfit = dOpenPrice + TakeProfit * Point;
   
   dOpenPrice = NormalizeDouble(Ask - (50 * Point), Digits); // tmp, debug - отложенный ордер на 50 пунктов ниже текущей цены !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   
   ticket = OrderSend(Symbol(),OP_BUYLIMIT,lots,dOpenPrice,SLIPPAGE,StopLossValue,dProfit,sComment,globalExpertUniqueNumber,0,Green);
   if (ticket < 0)
   {
      int err = GetLastError();
      Print( "OrderSend Error #", err, "; mess: " , ErrorDescription(err)
         , ", MaxBuyPrice = " , MaxBuyPrice, ", dOpenPrice = ", dOpenPrice, ", StopLossValue = ", StopLossValue, ", dProfit = ", dProfit, 
         ", Bid/Ask = ", Bid, "/", Ask);
   }
   Print( "Dolikva BUY-LIMIT OrderSend(): "
         , ", MaxBuyPrice = " , MaxBuyPrice, ", dOpenPrice = ", dOpenPrice, ", StopLossValue = ", StopLossValue, ", dProfit = ", dProfit, 
         ", Bid/Ask = ", Bid, "/", Ask);

   return (ticket);
}


В итоге получаю по логам тестера эксперта такой вызов:

02:58:07 2009.06.29 17:00 exp_1 EURJPY,M15: Доливка, buy-limit ордер
02:58:07 2009.06.29 17:00 exp_1 EURJPY,M15: open #3 buy limit 0.30 EURJPY at 134.05 sl: 133.80 tp: 145.96 ok
02:58:07 2009.06.29 17:00 exp_1 EURJPY,M15: Dolikva BUY-LIMIT OrderSend():, MaxBuyPrice = 133.96, dOpenPrice = 134.05, StopLossValue = 133.8, dProfit = 145.96, Bid/Ask = 134.516/134.546

Суть в том, что отложенный OP_BUYLIMIT-ордер выставлен на уровне ниже, куда цена не возвращалась вниз - Ask по EURJPY 2009.06.29 17:00 был на уровне 134.54, а цена открытия 134.05 на 49 пунктов ниже. Но ордер был исполнен сразу же после постановки, т.е. выполнен не как отложенный.
Я в чём-то ошибся в коде?

 
А откуда видно, что он был исполнен? По журналу вроде встал как отложенный.
 
Roger писал(а) >>
А откуда видно, что он был исполнен? По журналу вроде встал как отложенный.

Мне показалось, что маркер с зелёной стрелкой на графике означает активный, исполненный ордер. Или я не прав, это и есть обычный, отложенный и ещё неисполненный ордер? В этом случае всё в порядке, просто мозг заело.