Как ограничить работу советника в заданные часы с помощью MQL4?

Если вы занимаетесь трейдингом какое-то время, вы знаете, что некоторые часы лучше всего подходят для торговли, чем другие. Некоторые инструменты более активны в какой-то период времени, а иногда вы хотите избежать торговли в определенные моменты дня. В этой статье я расскажу, как можно использовать MQL4 для ограничения торговли в заданное время.

Валютный рынок — это круглосуточный рынок. Рынок форекс прекращает свою работу только в выходные дни, в остальное время он открыт и активен. Будучи глобальным децентрализованным рынком, вы всегда можете найти торговые возможности в любой точке земного шара и в любое время суток. Также вы должны знать, что в некоторые моменты времени рынок более активен, чем в другие. Например, пересечение европейской сессии и открытие американской сессии отличаются наибольшей волатильностью.

24-часовой рынок, безусловно, дает много преимуществ, но что если вы предпочитаете алготрейдинг? Тогда у вас появляется еще больше возможностей! Когда торговая стратегия управляется компьютером, она может выполняться 24 часа без остановки. Некоторые стратегии работают лучше только в течение нескольких часов дня, и в этом случае вам нужно найти способ включить свой советник в работу только в заданное время.

Как можно ограничить торговлю на форекс в определенное время?

С помощью MQL4 вы можете выполнять некоторые действия только в течение определенных периодов времени.

Как и во многих других случаях, MQL4 предоставляет некоторые полезные инструменты для достижения данной цели, в этом случае это функция Hour(). Функция Hour() возвращает последний час сервера MetaTrader. Это текущий час со значением от 0 до 23.

Помните, что Hour() возвращает значение часа на сервере, которое может отличаться от вашего местного времени, если вы находитесь в другом часовом поясе.

Вы можете увидеть время сервера в окне «Обзор рынка»:

окно обзор рынка

Нам нужно создать скрипт или советник с двумя внешними параметрами:

  • Стартовый час, числа от 0 до 23 — это будет начало операции.
  • Час остановки, числа от 0 до 23 — для установки последнего часа работы.

Стартовый час и час остановки могут совпадать, тогда операции будут разрешены. Стартовый час может быть до или после часа остановки. Если он установлен после часа остановки, тогда операции будут разрешены в ночное время.

К примеру, время начала 7, время остановки 19, операции разрешены с 7:00 до 19:00. Начало в 20, время остановки 6, операции разрешены с 8 вечера до 6 утра.

У нас получится следующий код:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
 
#property strict
#property show_inputs
 
 
//Перечисление всех часов. Это необходимо для меню ввода часа.
enum Enum_Hour{
   h00=00,     //00:00
   h01=01,     //01:00
   h02=02,     //02:00
   h03=03,     //03:00
   h04=04,     //04:00
   h05=05,     //05:00
   h06=06,     //06:00
   h07=07,     //07:00
   h08=08,     //08:00
   h09=09,     //09:00
   h10=10,     //10:00
   h11=11,     //11:00
   h12=12,     //12:00
   h13=13,     //13:00
   h14=14,     //14:00
   h15=15,     //15:00
   h16=16,     //16:00
   h17=17,     //17:00
   h18=18,     //18:00
   h19=19,     //19:00
   h20=20,     //20:00
   h21=21,     //21:00
   h22=22,     //22:00
   h23=23,     //23:00
};
 
input Enum_Hour StartHour=h07;      //Час начала работы.
input Enum_Hour LastHour=h17;       //Час окончания работы.
 
bool CheckActiveHours(){
   //По умолчанию операции отключены
   bool OperationsAllowed=false;
   //Проверяем, находится ли текущий час между разрешенными часами работы, если да, то возвращаем true.
   if(StartHour==LastHour && Hour()==StartHour) OperationsAllowed=true;
   if(StartHour<LastHour && Hour()>=StartHour && Hour()<=LastHour) OperationsAllowed=true;
   if(StartHour>LastHour && ((Hour()>=LastHour && Hour()<=23) || (Hour()<=StartHour && Hour()>0))) OperationsAllowed=true;
   return OperationsAllowed;
}
 
void OnStart()
  {
//---
   if(CheckActiveHours()) Alert("Операции разрешены");  else Alert("Операции запрещены");
  }
//+------------------------------------------------------------------+

Мы проверяем, включен ли текущий час в час операций и возвращаем true или false. Затем мы можем использовать true или false, чтобы ограничить выполнение определенных задач.

время начала и конца работы скрипта

Комментарии (2)
  1. Что-то вставил код в советиник, по тесту не работает, как открывал сделки в том числе и ночью так и открывает… жаль

  2. Быть может он код для MT5? может в этом причина