« Предыдущий пост | На главную страницу | Следующий пост »

OrderCloseTime() - время закрытия позиции

В прошлом выпуске я слегка модифицировал наш пример определения по какому ордеру была закрыта позиция. Теперь если по ошибке мы выделили с помощью функции OrderSelect() отложенный ордер, а не позицию, эта ситуация выявляется.

Однако возможен случай, когда мы по ошибке выделили открытую позицию. Выявить этот случай нам поможет функция OrderCloseTime().

   datetime OrderCloseTime()

Функцию можно вызвать после того, как ордер или позиция были предварительно выбраны с помощью функции OrderSelect().

Возвращает дату и время закрытия позиции или ордера:

  • Если позиция открыта, то возвращает 0 (ноль).
  • Если позиция закрыта, то возвращает дату и время закрытия позиции.
  • Если отложенный ордер удален, то возвращает дату и время удаления ордера.
  • Если отложенный ордер еще не удален, то возвращает 0 (ноль).

Исходя из этих правил нам надо проверить время закрытия выделенной позиции. Если оно равно нулю, то это открытая позиция и нам надо сообщить об ошибке:

   //---- выбираем ордер/позицию с тикером 77777
   if ( OrderSelect (77777, SELECT_BY_TICKET) == true) 
     {
       // это позиция, а не отложеный ордер?
       if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
         {
            // это закрытая позиция, а не открытая?
            if ( OrderCloseTime() != 0 )
              {
                if ( ((OrderClosePrice() <= OrderStopLoss()) && (OrderType() == OP_BUY)) || 
                     ((OrderClosePrice() >= OrderStopLoss()) && (OrderType() == OP_SELL)) )
                   {
                      // позиция закрылась по Stop Loss
                      // ...
                   }
                else
                   {
                      // позиция закрылась по Take Profit
                      // ...
                   }
              }
            else
               Print("Ошибка: это не закрытая позиция, а открытая");
         }
       else
         Print("Ошибка: это не закрытая позиция, а отложенный ордер");
     }
  else
    Print("OrderSelect() вернул ошибку - ",GetLastError());

То, что это не может быть отложенный ордер, мы уже проверили (см. прошлый выпуск).

Теперь наш пример по определению типа ордера, по которому была закрыта позиция, стал содержать на одну ошибку меньше, но по-прежнему остается небезгрешным. Мы почему-то с первых строчек кода безусловно верим в тот факт, что позиция закрыта именно по Stop Loss или Take Profit ордера. А если нет?

Об этом мы поговорим в следующем выпуске, когда будем рассматривать функцию OrderTakeProfit().



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Разместите свой комментарий по теме "OrderCloseTime() - время закрытия позиции"

Подписаться на мою рассылку



Размещение статьи "OrderCloseTime() - время закрытия позиции" на Вашем сайте

Размещение статьи "OrderCloseTime() - время закрытия позиции" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "OrderCloseTime() - время закрытия позиции" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 3.31