Пятница, 03.05.2024, 19:33 Вы вошли как Гость | Группа "Гости" | RSS | Главная | функция OrderOpenPrice. | Мой профиль | Выход | Вход
Вы смотрели фильм-расследование Алексея Навального "Дворец президента"?
Всего ответов: 2
» Меню сайта

» РАЗНОЕ

» Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

функция OrderOpenPrice.

В этом выпуске я рассмотрю функцию 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 и т.д.).
» Поиск


гороскоп
» Мини-чат

» Наш опрос
Оцените мой сайт
Всего ответов: 46

» Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • » Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Copyright MyCorp © 2024
    Бесплатный хостинг uCoz