home

Функция 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))