Как выключить таймер когда рынок закрыт?

 
Добрый день уважаемые программисты, хотел бы попросить вас кинуть пример кода, в котором бы в выходные дни(когда рынок закрыт) таймер бы не работал
 
Dmitry Ivkin:
Добрый день уважаемые программисты, хотел бы попросить вас кинуть пример кода, в котором бы в выходные дни(когда рынок закрыт) таймер бы не работал
void OnTimer()
{
   int nDayOfWeek = TimeDayOfWeek(TimeLocal());
   if (nDayOfWeek == 0 || nDayOfWeek == 6)
      return;

   // код, выполняемый в рабочие дни
}
 
Dmitry Ivkin:
Добрый день уважаемые программисты, хотел бы попросить вас кинуть пример кода, в котором бы в выходные дни(когда рынок закрыт) таймер бы не работал

EventKillTimer()

только не забудьте его потом снова включить

 
Maxim Kuznetsov:

EventKillTimer()

только не забудьте его потом снова включить

Если рынок закрыт, то не получится включить, нет события.

 
Ihor Herasko:

Если рынок закрыт, то не получится включить, нет события.

когда рынок откроется (то есть пойдут котировки) придёт первый OnTick

да и ChartEvevnt никто не отменял :-) то есть события какие-никакие а всё равно приходят. На них можно даже эмуляцию таймера делать если EventSetTimer зафейлил

 
Maxim Kuznetsov:

когда рынок откроется (то есть пойдут котировки) придёт первый OnTick

да и ChartEvevnt никто не отменял :-) то есть события какие-никакие а всё равно приходят. На них можно даже эмуляцию таймера делать если EventSetTimer зафейлил

Нужно помнить об этом в разных кусках кода. А здесь решение локальное, не нужно тиражировать в другие функции.

 
Maxim Kuznetsov:

когда рынок откроется (то есть пойдут котировки) придёт первый OnTick

да и ChartEvevnt никто не отменял :-) то есть события какие-никакие а всё равно приходят. На них можно даже эмуляцию таймера делать если EventSetTimer зафейлил

а как узнать что рынок закрылся?)
насколько помню в МТ4 нет универсального решения чтобы определять закрыт или открыт рынок.

пс. когда-то делал синхронизацию времени (локального и серверного), и если тиков нет больше 30-60 сек, то считаем что рынок закрылся...
 

Это универсальное, но нечёткое решение - тиков может не быть несколько минут. Надо ждать хотя бы 5 мин.

Я выключаю по таймеру, в субботу в 1:00, а включаю по первому тику в понедельник.

 
Dmitry Ivkin:
Добрый день уважаемые программисты, хотел бы попросить вас кинуть пример кода, в котором бы в выходные дни(когда рынок закрыт) таймер бы не работал

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

На форуме есть ветки на тему определения работает рынок или нет.

Воспользуйтесь поиском по форуму.

 
Renat Akhtyamov:

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

На форуме есть ветки на тему определения работает рынок или нет.

Воспользуйтесь поиском по форуму.

Универсальных решений нет и это все знают, даже разработчики.

Это как один из вариантов:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как выключить таймер когда рынок закрыт?

Edgar, 2019.01.23 16:56

Это универсальное, но нечёткое решение - тиков может не быть несколько минут. Надо ждать хотя бы 5 мин.

Я выключаю по таймеру, в субботу в 1:00, а включаю по первому тику в понедельник.


 

Я изучил старую ветку того обсуждения. Там народ старался придумать совершенный и универсальный способ определения закрытия рынка, совершенно не заботясь эффективностью и экономией. А ведь это предлагается делать на каждом тике!

Я замерил - один только вызов IsTradeAllowed(_Symbol, time) в 2.5 раза дольше, чем вычисление, что сейчас N часов субботы. Стандартное расписание мы знаем, а исключения (праздники) мы заметим по ошибке "market closed" и установим флаг. Этот флаг сбросим в OnTick().