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

Эксперт, торгующий в ночное время: функция init()

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

Напомню, что основная идея эксперта заключается в том, что определенное время (задается параметром StartTime) эксперт выставляет buy limit ордер на BuyLimit_Diff пипсов ниже Bid и sell limit ордер на SellLimit_Diff пипсов выше цены Ask. Дата эксперации ордеров задается в минутах в параметре Expiration. Если один из отложенных ордеров срабатывает, то второй удаляется (т.е. они OCO ордера - One Cancells Other). Stop Loss ордер выставляется на расстоянии BuyLimit_SL и SellLimit_SL пипсов от цены ордера соответственно.

Величина трейлинг стопа задается в параметре TrailingStop.

В функции init() мы присвоим значения переменным StartHour, StartMinute, CloseHour и CloseMinute, чтобы не вычислять их каждый раз:

    StartHour   = TimeHour(StrToTime(StartTime));
    StartMinute = TimeMinute(StrToTime(StartTime));
    CloseHour   = TimeHour(StrToTime(CloseTime));
    CloseMinute = TimeMinute(StrToTime(CloseTime));

Для получения значения часа для определенной даты мы использовали функцию TimeHour():

   int TimeHour(datetime time)

Параметры эксперта StartTime и CloseTime - строки, поэтому перед вызовом функции TimeHour() мы должны их сконвертировать из строкового формата в формат datetime (количество секунд, прошедших с 00:00 часов 1 января 1970 года) c помощью функции StrToTime():

   datetime StrToTime(string value)

Для получения минуты для указанного времени мы используем функцию TimeMinute():

   int TimeMinute(datetime time)

Далее зададим время, когда последний раз выставлялись отложенные ордера, - переменную LastTradeTime.

  • Если текущее серверное время, возвращаемое функцией TimeCurrent(), меньше StartTime, то присваиваем переменной LastTradeTime нулевое значение (1 января 1970 года, 00:00).
  • Если же текущее серверное время больше StartTime, то присваиваем переменной LastTradeTime текущее серверное время.

Вод кусок кода, который выполняет эту задачу:

    LastTradeTime = 0;
    int c_hour = TimeHour(TimeCurrent());
    int c_minute = TimeMinute(TimeCurrent());
    if ((c_hour>StartHour)||((c_hour==StartHour)&&(c_minute>=StartMinute))) 
    LastTradeTime = TimeCurrent();

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

В следующем выпуске я расскажу о том, как работает функция start() "ночного" эксперта.



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

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

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



Размещение статьи "Эксперт, торгующий в ночное время: функция init()" на Вашем сайте

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

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

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

Журнал FOREX MAGAZINE:



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

Счетчики:

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

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

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


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