Русский

Справочник MQL4 Торговые функции OrderModify

OrderModify

Изменяет параметры ранее открытых или отложенных ордеров.

bool  OrderModify(
   int        ticket,      // номер ордера
   double     price,       // цена открытия
   double     stoploss,    // stop loss
   double     takeprofit,  // take profit
   datetime   expiration,  // время истечения ордера
   color      arrow_color  // цвет
   );

Параметры

ticket

[in]  Уникальный порядковый номер ордера для модификации.

price

[in]  Новая цена открытия отложенного ордера.

stoploss

[in]  Новое значение StopLoss.

takeprofit

[in]  Новое значение TakeProfit.

expiration

[in]  Время истечения отложенного ордера.

arrow_color

[in]  Цвет стрелок модификации StopLoss и/или TakeProfit на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.

Возвращаемое значение

Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Цену открытия и время истечения можно изменять только у отложенных ордеров. Если в качестве параметров функции передать неизмененные значения, то в этом случае будет сгенерирована ошибка 1 (ERR_NO_RESULT).

На некоторых торговых серверах может быть установлен запрет на применение срока истечения отложенных ордеров. В этом случае при попытке задать ненулевое значение в параметре expiration будет сгенерирована ошибка 147 (ERR_TRADE_EXPIRATION_DENIED).

Пример:

void OnStart()
  {
   int TrailingStop=50;
//--- модифицирует цену Stop Loss ордера на покупку №12345
   if(TrailingStop>0)
     {
      OrderSelect(12345,SELECT_BY_TICKET);
      if(Bid-OrderOpenPrice()>Point*TrailingStop)
        {
         if(OrderStopLoss()<Bid-Point*TrailingStop)
           {
            bool res=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue);
            if(!res)
               Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
            else
               Print("Цена Stop Loss ордера успешно модифицирована.");
           }
        }
     }
  }