« Предыдущий пост | На главную страницу | Следующий пост »

OrderModify() - изменение параметров отложенных ордеров и открытых позиций

В прошлых выпусках я рассмотрел очень полезную функцию - OrderSend(). А в этом выпуске я расскажу о функции OrderModify().

   bool OrderModify(int ticket, double price, double stoploss, double takeprofit, 
                                datetime expiration, color arrow_color=CLR_NONE)

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

Параметры функции:

  • ticket - тикер отложенного ордера или открытой позиции;
  • price - новый уровень отложенного ордера (для открытых позиций не может быть изменен);
  • stoploss - новый уровень Stop Loss;
  • takeprofit - новый уровень Take Profit;
  • expiration - новые дата и время истечения отложенного ордера (если к этой дате и времени отложенный ордер не сработает, то он будет удален - см. выпуск "OrderExpiration() - дата истечения отложенного ордера");
  • arrow_color - цвет открывающей стрелки на графике. Если параметр отсутствует или его значение равно CLR_NONE, то открывающая стрелка не отображается на графике.

В случае неправильных параметров функция возвращает следующие коды ошибок:

  • 1 (ERR_NO_RESULT) - если ни один из параметров не был изменен;
  • 147 (ERR_TRADE_EXPIRATION_DENIED) - если в настройках торгового сервера запрещено выставлять дату эксперации ордера. В этом случае параметр expiration всегда должен быть равен нулю).

В качестве практического примера применения этой функции рассмотрим установку и управление трейлинг стопом.

Напомню, что Trailing Stop (трейлинг стоп) – это алгоритм управления уровнем Stop Loss ордера. После выставления трейлинг-стопа (например, на Х пипсов) происходит следующее:

  • MetaTrader не предпринимает никаких действий до того момента, пока по открытой позиции не образуется прибыль в Х пипсов. После этого MetaTrader выставляет Stop Loss ордер на расстоянии Х пипсов от текущей цены (в данном случае - на уровне безубыточности).
  • После выполнения первого шага MetaTrader посылает команду на изменение уровня Stop Loss ордера на расстояние Х пипсов от текущей котировки каждый раз, когда расстояние между ней и старым уровнем ордера превысит Х пипсов. В результате этого Stop Loss ордер "подтягивается" к текущей цене.

Реализуем этот принцип на языке MetaQuotes Language 4. Будем полагать, что открытая позиция уже выбрана и мы точно знаем, что эта позиция открыта по инструменту, к которому прикреплен эксперт. Также предположим, что значение трейлинг стопа в пипсах содержится в переменной TrailingStop.

   int err;
   if (OrderType() == OP_BUY)
     {
       // позиция на покупку
       if ((Bid-OrderOpenPrice())>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Bid-TrailingStop*Point);
           else
             {
              err = GetLastError(); 
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }
   else
     {
       // позиция на продажу
       if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point))
         {
           // выставляем Stop Loss
           if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point,
                                    OrderTakeProfit(), 0))
             Print("#", OrderTicket(),": trailing stop ", Ask+TrailingStop*Point);
           else
             {
              err = GetLastError(); 
              Print("#", OrderTicket(),": trailing stop error ", err);
             }
         }
     }

В этом коде Вам могут быть непонятны несколько функций:

  • Bid - Bid последней котировки по инструменту, к которому прикреплен эксперт;
  • Ask - Ask последней котировки по инструменту, к которому прикреплен советник;
  • Point - размер пункта текущего инструмента в валюте котировки (для EURUSD это 0.0001, для USDJPY- 0.01 и т.д.).

В следующем выпуске я расскажу, как удалить отложенный ордер с помощью функции OrderDelete().



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Подписаться на мою рассылку



Размещение статьи "OrderModify() - изменение параметров отложенных ордеров и открытых позиций" на Вашем сайте

Размещение статьи "OrderModify() - изменение параметров отложенных ордеров и открытых позиций" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "OrderModify() - изменение параметров отложенных ордеров и открытых позиций" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 5.04