После того, как мы выделим ордер или позицию с помощью функции OrderSelect(), мы можем получить об ордере саму различную информацию. В данной статье будет рассказано о функции OrderClosePrice().
Формат функции OrderClosePrice():
double OrderClosePrice()
Функция OrderClosePrice() возвращает цену закрытия ордера или позиции, выделенной с помощью функции OrderSelect().
Рассмотрим пример использования функции OrderClosePrice(). Предположим, что мы знаем, что позиция закрылась по ордеру и нам надо определить по какому: по Stop Loss или Take Profit:
//---- выбираем ордер/позицию с тикером 77777 if ( OrderSelect (77777, SELECT_BY_TICKET) == true) { // позиция выбрана успешно if ( OrderClosePrice() == OrderStopLoss() ) { // позиция закрылась по Stop Loss // ... } else { // позиция закрылась по Take Profit // ... } } else Print("OrderSelect() вернул ошибку - ",GetLastError());
К сожалению, наш пример будет работать только в тех случаях, когда Stop Loss сработал без проскальзывания. В следующих выпусках мы усложним пример и сделаем так, чтобы даже если ордера были сработаны с проскальзыванием, наш кусочек кода правильно это определял.
В этом примере Вам незнакома функция OrderStopLoss(). Эта функция возвращает значение Stop Loss выделенного ордера или позиции. Подробно эту функцию мы рассмотрим в следующей статье.
В предыдущей статье, рассказывая о функции OrderClosePrice(), я рассмотрел пример, как определить по какому ордеру (Stop Loss или Take Profit) была закрыта позиция, если точно известно, что она была закрыта по ордеру.
В этом примере была использована функция OrderStopLoss(). Из названия абсолютно понятно ее предназначение, но лучше все-таки остановиться на ней поподробнее.
Для того, чтобы изучение функции OrderStopLoss() стало не просто скучным теоретическим описанием, попробуем слегка изменить прошлый пример, чтобы получить максимум практической пользы.
Прошлый наш пример работал только в тех случаях, когда Stop Loss был сработан без проскальзывания. Изменим немного наш код:
//---- выбираем ордер/позицию с тикером 77777 if ( OrderSelect (77777, SELECT_BY_TICKET) == true) { // позиция выбрана успешно if ( ((OrderClosePrice() <= orderstoploss()) && (ordertype() == op_buy)) || ((ordercloseprice() >= OrderStopLoss()) && (OrderType() == OP_SELL)) ) { // позиция закрылась по Stop Loss // ... } else { // позиция закрылась по Take Profit // ... } } else Print("OrderSelect() вернул ошибку - ",GetLastError());
Этот пример базируется на том, что:
Таким образом, в любом из этих случаях мы можем быть уверены, что позиция закрылась по Stop Loss ордеру.
В нашем примере мы опять столкнулись с незнакомой функцией - OrderType(). Забегая вперед, скажем, что эта функция возвращает тип ордера, но более подробно я хотел бы рассмотреть ее в следующей статье.
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА