Как избавиться от ошибк 138

 
int CloseOnlyOrder()
{
   SelectOnlyOrder();
   RefreshRates();
   OrderClose(OrderTicket(), OrderLots(), OrderOpenPrice(), 0, 0);
   while(GetLastError()>0)
   {
      SelectOnlyOrder();
      RefreshRates();
      OrderClose(OrderTicket(), OrderLots(), OrderOpenPrice(), 0, 0);
   }
   return(0);
}
int SelectOnlyOrder()
{
   OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   return(0);
}
 
Все время выдает эту ошибку! Почему и как исправить?
 
A почему ты закрываешь ордер ценой его открытия? ... Это немного странно...
 
cloud666:
Все время выдает эту ошибку! Почему и как исправить?


Вы пытаетесь закрыть ордер по цене открытия:

OrderClose(OrderTicket(), OrderLots(), OrderOpenPrice(), 0, 0);

и лучше поставить Slippage больше ноля.

 

Вы закрываетесь по ценами открытия, а нужно по текущей рыночной цене. Для этого вам нужно проанализировать текущий ордер (OrderType) и если было OP_BUY - закрывайте по Bid, если OP_SELL - по Ask.

Говорять, что можно возпользоваться функции OrderClosePrice, хотя по документации она должна показывать цена закрытия уже закрытого ордеера.

 
Спасибо всем! Теперь рвзобрался... Как это у меня раньше асе работало??? :)