В прошлых выпусках мы научились получать информацию о выделенном с помощью функции OrderSelect() ордере или позиции:
В данной статье будет рассказано о функции OrderType().
int OrderType()
Функция OrderType() возвращает значение, которое определяет тип операции ордера, который предварительно выбран с помощью OrderSelect():
В предыдущем выпуске мы видели пример, который определял, как была закрыта позиция - по 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))
Наш исправленный пример все равно имеет несколько недостатков. Один из них - неправильная работа, если была выделена открытая позиция, а не закрытая. Как устранить этот недостаток будет рассказано в следующей статье, который будет посвящен функции OrderCloseTime().
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА