В прошлых выпусках мы решали задачу определения того, была ли закрыта позиция по Stop Loss или Take Profit ордеру. Существует еще один способ узнать это. При этом данный способ будет более простым, чем рассмотренные ранее.
В этом нам поможет функция OrderComment().
string OrderComment()
После того как ордер или позиция выбраны функцией OrderSelect() вызов функции OrderComment() вернет комментарии этого ордера/позиции в виде строки.
Очень часто сервер пишет в комментарий ордера или позиции полезные вещи:
Может быть этот список неполон, но в данный момент нас это не должно волновать. Нас интересуют те позиции и ордера, в комментарии которых встречается подстрока [sl] (позиция закрыта по Stop Loss ордеру) или подстрока [tp] (позиция закрыта по Take Profit ордеру):
//---- выбираем ордер/позицию с тикером 77777 if ( OrderSelect (77777, SELECT_BY_TICKET) == true) { // это позиция, а не отложеный ордер? if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { // это закрытая позиция, а не открытая? if ( OrderCloseTime() != 0 ) { if ( StringFind(OrderComment(), "[sl]") != -1 ) { // позиция закрылась по Stop Loss // ... } else { if ( StringFind(OrderComment(), "[tp]") != -1 ) { // позиция закрылась по Take Profit // ... } else Print("Ошибка: позиция закрыта не по ордеру"); } } else Print("Ошибка: это не закрытая позиция, а открытая"); } else Print("Ошибка: это не закрытая позиция, а отложенный ордер"); } else Print("OrderSelect() вернул ошибку - ",GetLastError());
В этом примере есть неизвестная пока нам функция - StringFind():
int StringFind ( string text, string matched_text, int start=0 )
Эта функция ищет в строке text подстроку matched_text начиная с позиции start (если третий параметр не указан, то поиск идет с нулевой позиции, т. е. с первого элемента). Если подстрока не найдена, то функция возвращает -1; если найдена - номер позиции в строке, с которой начинается искомая подстрока.
В следующей статье мы продолжим рассмотрение торговых функций.
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА