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

OrderExpiration() - дата истечения отложенного ордера

Перед тем, как я перейду к рассмотрению торговых функций для открытия/закрытия позиции или управления ордерами, мне осталось рассказать о двух функциях: OrderExpiration() и OrderMagicNumber().

В этом выпуске я расскажу о торговой функции OrderExpiration().

   datetime OrderExpiration()

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

Если дата истечения не установлена (т.е. ордер может существовать бесконечное время, пока не исполнится или не будет удален), то OrderExpiration() вернет 0.

Для чего используется дата истечения отложенного ордера? Причин может быть множество. Например, довольно разумно удалять отложенные ордера в пятницу поздно вечером - перед закрытием недели.

В качестве примера использования функции OrderExpiration() напишем кусок кода, которых пробегает по всем неудаленным отложенным ордерам и если дата истечения не установлена, то устанавливает ее на 23:59:59 ближайшей пятницы.

   // вычислим 23:59:59 ближайшей пятницы
   datetime friday;
   datetime c_time;
   c_time = CurTime();
   // в friday - дата и время на 00:00:00 текущего дня
   friday = c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time);   
   // в friday - дата и время на 00:00:00 ближайшей пятницы
   friday = friday + (5-TimeDayOfWeek(c_time))*60*60*24;
   // в friday - дата и время на 23:59:59 ближайшей пятницы
   friday = friday + 23*60*60 + 59*60 + 59;
   // пробежимся по отложенным ордерам и изменим эксперацию
   int pos;   
   for(pos=0; pos<OrdersTotal(); pos++)
     {
       // выберем ордер или позицию
       if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
         {
           // это отложенный ордер?
           if (OrderType()>OP_SELL)
             {
               // дата эксперации отсутствует?
               if (OrderExpiration()==0)
                 // изменить дату эксперации
                 OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 
                                      OrderTakeProfit(), friday);
             }
         }
       else
           Print("Ошибка ", GetLastError(), " при выборе ордера номер ", pos);
     }

В этом коде есть несколько неизвестных нам функций:

  • int TimeDayOfWeek(datetime date) - возвращает день недели (0-Воскресенье,1,2,3,4,5,6) для указанной даты;
  • datetime CurTime() - время прихода последней котировки в виде количества секунд, прошедших после 00:00 1 января 1970 года;
  • int TimeHour(datetime time) - возвращает порядковый номер часа для времени time;
  • int TimeMinute(datetime time) - возвращает порядковый номер минуты для времени time;
  • int TimeSeconds(datetime time) - возвращает количество секунд с начала минуты для времени time.

Например, для 02:16:05 среды функции TimeHour, TimeMinute и TimeSeconds вернут соответственно 2, 16 и 5. А функция TimeDayOfWeek вернет 3.

Мы помним, что значение типа datetime представляет собой количество секунд, прошедшее с 00:00 1 января 1970 года. Также мы помним, что в часе 60*60 секунд, а в минуте 60 секунд. Исходя из этого становится понятной наша логика получения в переменной friday даты и времени, которые соответствуют 23:59:59 ближайшей пятницы:

   // вычислим 23:59:59 ближайшей пятницы
   datetime friday;
   datetime c_time;
   c_time = CurTime();
   // в friday - дата и время на 00:00:00 текущего дня
   friday = c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time);   
   // в friday - дата и время на 00:00:00 ближайшей пятницы
   friday = friday + (5-TimeDayOfWeek(c_time))*60*60*24;
   // в friday - дата и время на 23:59:59 ближайшей пятницы
   friday = friday + 23*60*60 + 59*60 + 59;

В следующем выпуске я расскажу о функции OrderMagicNumber().



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

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

Разместите свой комментарий по теме "OrderExpiration() - дата истечения отложенного ордера"

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



Размещение статьи "OrderExpiration() - дата истечения отложенного ордера" на Вашем сайте

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

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

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

Журнал FOREX MAGAZINE:



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

Счетчики:

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

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

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


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