Изучим функцию OrderTakeProfit() идоработаем наш пример. Мыпочему-то спервых строчек кода безусловно верим втот факт, что позиция была закрыта именно поStop Loss или Take Profit ордера. Аесли нет? Это легко проверить.
- Если для позиции напокупку цена закрытия находится нениже уровня Take Profit, топозиция закрыта поTake Profit.
- Если для позиции напродажу цена закрытия находится невыше уровня Take Profit, топозиция закрыта поTake Profit.
Мы знаем, что уровень Stop Loss ордера выделенной позиции или ордера можно определить спомощью функции OrderStopLoss(). Поаналогии уровень Take Profit определяется спомощью функции OrderTakeProfit():
double OrderTakeProfit()
Ордер должен быть предварительно выбран спомощью функции OrderSelect().
Изменим наш пример, чтобы убедиться, что позиция закрыта поордеру, анесрынка:
//---- выбираем ордер/позицию с тикером 77777
if ( OrderSelect (77777, SELECT_BY_TICKET) == true)
{
// это позиция, а не отложеный ордер?
if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
{
// это закрытая позиция, а не открытая?
if ( OrderCloseTime() != 0 )
{
if ( ((OrderClosePrice() <= OrderStopLoss()) && (OrderType() == OP_BUY)) ||
((OrderClosePrice() >= OrderStopLoss()) && (OrderType() == OP_SELL)) )
{
// позиция закрылась по Stop Loss
// ...
}
else
{
if ( ((OrderClosePrice() >= OrderTakeProfit()) && (OrderType() == OP_BUY)) ||
((OrderClosePrice() <= OrderTakeProfit()) && (OrderType() == OP_SELL)) )
{
// позиция закрылась по Take Profit
// ...
}
else
Print("Ошибка: позиция закрыта не по ордеру");
}
}
else
Print("Ошибка: это не закрытая позиция, а открытая");
}
else
Print("Ошибка: это не закрытая позиция, а отложенный ордер");
}
else
Print("OrderSelect() вернул ошибку - ",GetLastError());
Перейти к главе «
функция OrderSymbol».