функция OrderComment


например, forex

Существует еще один способ узнать былали закрыта позиция поStop Loss или Take Profit ордеру. При этом данный способ будет более простым, чем рассмотренные ранее.

В этом нам поможет функция OrderComment().

   string OrderComment()

После того как ордер или позиция выбраны функцией OrderSelect() вызов функции OrderComment() вернет комментарии этого ордера/позиции ввиде строки.

Очень часто сервер пишет вкомментарий ордера или позиции полезные вещи:

  • [sl]— если сработал Stop Loss;
  • [tp]— если сработал Take Profit;
  • cancelled— если отложенный ордер был отменен клиентом;
  • deleted [no money]— если отложенный ордер должен был сработать, нобыл удален сервером из-за недостатка свободных средств насчете;
  • partial close— если позиция была закрыта частично;
  • close hedge by#тикер— если локированная позиция была закрыта полностью другой локированной позицией;
  • [число%]— позиция была закрыта поStop Out (т.е. сервер автоматически закрыл позицию, когда equity стало меньше 20%необходимой маржи);
  • deleted [good for day]— удаленный отложенный ордер поCFD, который имел статус Day Order;
  • expiration [YYYY.MM.DD HH:MM]— отложенный ордер, который был удален сервером при достижении даты эксперации YYYY.MM.DD HH:MM;
  • split from #тикер— при закрытии одной позицией другой сразными объемами появляется врынке новая позиция стаким комментарием; #тикер— номер тикера позиции сбОльшим объемом.

Может быть этот список неполон, новданный момент нас это недолжно волновать. Нас интересуют тепозиции иордера, вкомментарии которых встречается подстрока [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; если найдена— номер позиции встроке, скоторой начинается искомая подстрока.


Перейти к главе «функция OrderSwap».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100