Функция OrderType() возвращает значение, которое определяет тип операции ордера, который предварительно выбран с помощью OrderSelect():
- OP_BUY — позиция на покупку,
- OP_SELL — позиция на продажу,
- OP_BUYLIMIT — отложенный ордер Buy Limit,
- OP_BUYSTOP — отложенный ордер Buy Stop,
- OP_SELLLIMIT — отложенный ордер Sell Limit,
- OP_SELLSTOP — отложенный ордер Sell Stop.
В предыдущем выпуске я поместил пример, которые определял, как была закрыта позиция — по Stop Loss ордеру или по Take Profit. Вместе с тем в этом примере есть небольшая ошибка: если выделенный ордер является отложенным ордером, то этот кусочек кода будет ошибочно считать, что позиция закрылась по Take Profit. Изменим наш пример, чтобы исключить эту ошибку:
//---- выбираем ордер/позицию с тикером 77777
if ( OrderSelect (77777, SELECT_BY_TICKET) == true)
{
if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
{
// позиция выбрана успешно
if ( ((OrderClosePrice() <= OrderStopLoss()) && (OrderType() == OP_BUY)) ||
((OrderClosePrice() >= OrderStopLoss()) && (OrderType() == OP_SELL)) )
{
// позиция закрылась по Stop Loss
// ...
}
else
{
// позиция закрылась по Take Profit
// ...
}
}
else
Print("Ошибка: это не закрытая позиция, а отложенный ордер");
}
else
Print("OrderSelect() вернул ошибку - ",GetLastError());
Путем добавления дополнительной проверки, нам удастся отделить закрытые позиции от отложенных ордеров:
if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))