Эксперт, торгующий в ночное время: функция 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".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: