Функция 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);
}
}
}
Перейти к главе «
функция OrderDelete».