OrderOpenTime() - время открытия ордера или позиции, выделенного функцией OrderSelect()
В прошлом выпуске мы посчитали прибыль по закрытым позициям. Теперь усложним задачу: сосчитаем прибыль только по закрытым позициям, которые были открыты сегодня.
С помощью функции OrderOpenTime() мы можем получить дату и время открытия ордера или позиции, выделенного предварительно с помощью функции OrderSelect().
datetime OrderOpenTime()
- В случае отложенного ордера функция OrderOpenTime() возвращает дату и время выставления ордера.
- В случае открытой или закрытой позиции функция возвращает дату и время открытия позиции.
Для того, чтобы определить, что позиция открыта сегодня, нам нужно знать значение типа datetime для сегодняшней даты в 00:00:00 часов.
В этом нам помогут четыре новых функции:
- 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.
Мы помним, что значение типа datetime представляет собой количество секунд, прошедшее с 00:00 1 января 1970 года. Также мы помним, что в часе 60*60 секунд, а в минуте 60 секунд. Поэтому, зная текущее время (мы можем получить его с помощью CutTime), мы можем получить время текущего дня на 00:00:00 часов:
int c_time = CurTime(); datetime day_start; day_start=c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time);
А полный код, который подсчитывает прибыль по всем закрытым позициям, которые открыты сегодня, будет таким:
//---- вычислим начало дня - переменная day_start int c_time = CurTime(); datetime day_start; day_start=c_time-TimeHour(c_time)*60*60-TimeMinute(c_time)*60-TimeSeconds(c_time); //---- подсчитаем прибыль int profit = 0; int pos; for ( pos = 0; pos<HistoryTotal(); pos++ ) { // выделим позицию if (OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY) == true) { // это не отложенный ордер? if ( OrderType() <= OP_SELL) { // ордер был открыт сегодня? if (OrderOpenTime()>=day_start) profit += OrderProfit(); } } else Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket()); } Print("Суммарный профит по закрытым позициям = ", profit);
В следующем выпуске я продолжу рассмотрение торговых функций и расскажу о функции OrderLots().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: