функция OrderOpenPrice


например, forex

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

Напоминаем, что 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);
             }
         }
     }

Прежде всего нас интересует новая функция OrderOpenPrice():

   double OrderOpenPrice()

Эта функция возвращает цену открытия для выбранного функцией OrderSelect() ордера или позиции.

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

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

Перейти к главе «функция OrderTicket».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100