Срабатывание советника через определенный интервал времени

23.01.2017 в 1:35
admin
Аватар админа
Регистрация: 17.02.2011
Сообщений: 4552
Рейтинг: 3536

Искал по инету, но не нашел как сделать, чтобы советник в терминале срабатывал через определенные промежутки времени – через 1, например, 2, 3 минуты и так далее?

Автор: Roman7. Перенесено из Гостевой.

Поделиться в соц. сетях:
Получать информацию о новых темах:
Ответов в теме: 6 Просмотров темы: 1332

18.12.2013, в 22:00
Roman7
Аватар гостя
Регистрация: нет
Сообщений: 3
Рейтинг: 0
#1

Владислав, искал по инету, но не нашол как сделать, чтобы советник в терминале срабатывал через определенные промежутки времени – через 1, например, 2, 3 минуты и так далее

+ -
Цитировать Ответить

18.12.2013, в 22:09
admin
Аватар админа
Регистрация: 17.02.2011
Сообщений: 4552
Рейтинг: 3536
#2

Глобально объявляем переменные:

extern int Interval = 1;   //период запуска советника, минуты 
datetime time;

в функцию init вставим строчку:

time = TimeCurrent();

в самом начале функции start напишем:

if ( TimeCurrent()-time < Interval*60 )
{
      return (0);
}
   time = TimeCurrent();

Вот и все.

+7 + -
Цитировать Ответить

18.12.2013, в 22:43
Roman7
Аватар гостя
Регистрация: нет
Сообщений: 3
Рейтинг: 0
#3

Спасибо !!!!!! Работает *YAHOO*

+ -
Цитировать Ответить

23.01.2017, в 01:46
admin
Аватар админа
Регистрация: 17.02.2011
Сообщений: 4552
Рейтинг: 3536
#4

Есть еще вариант с событием по таймеру. Таймер для советника может быть только один.
Есть такое событие Timer, которое вызывает функцию:

OnTimer()
{
}

В этой функции мы будем размещать код советника.
Событие Timer генерируется с частотой, определенной в функции:

bool  EventSetTimer(
   int  seconds      // количество секунд
   );

которую следует вызывать из OnInit() (init() – по-старому) при инициализации:

int OnInit()
{
   int second = 60; //60 секунд. 1 раз в минуту
   EventSetTimer(second);
   /*
   остальной код инициализации
   */
   return(INIT_SUCCEEDED);
}
 
void OnTimer()
{
   /*
   код советника
   */
}

Таким образом, мы заставляем советника срабатывать через указанный нами в переменной second интервал времени.
Но следует помнить, что в режиме тестера события не работают:

Обработка событий Timer и ChartEvent в тестере стратегий не поддерживается.

+3 + -
Цитировать Ответить

01.09.2018, в 20:24
Hi-Fi
Аватар гостя
Регистрация: нет
Сообщений: 1
Рейтинг: 1
#5

Подскажите, а как задать работу советника по дням недели?

+1 + -
Цитировать Ответить

03.09.2018, в 21:49
admin
Аватар админа
Регистрация: 17.02.2011
Сообщений: 4552
Рейтинг: 3536
#6

Hi-Fi 01.09.2018, в 20:24:
Подскажите, а как задать работу советника по дням недели?

В MQL есть функция TimeDayOfWeek, которая возвращает день недели указанной даты:

int  TimeDayOfWeek(
   datetime      date            // дата и время
   );

Параметры функции TimeDayOfWeek:
date – дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
Возвращаемое значение функции TimeDayOfWeek:
День недели указанной даты от 0 до 6. функции 0 – воскресенье, 1 – понедельник, 2 – вторник, 3 – среда, 4 – четверг, 5 – пятница, 6 – суббота.

Функция TimeLocal() возвращает локальное время компьютера, на котором запущен клиентский терминал. При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().
Например, для запуска советника по четвергам, в самом начале обработчика напишем:

...
datetime time; //переменная хранит текущее время в секундах
int dayofweek; //переменная хранит текущий день недели
time = TimeLocal(); //получаем время локального компьютера, на котором запущен терминал
dayofweek = TimeDayOfWeek (time); //получаем день недели 
if ( dayofweek !=4 ) return 0; //если это не четверг, то выходим
...
+3 + -
Цитировать Ответить


Подписаться без комментирования