Как выполнять этот код только раз в день?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
mr_blond97
36
mr_blond97  

Есть цикл, содержащий Print(), который должен быть вызываться только раз в день. Код:

int Hour = 20;
int Minute = 20;

int OnInit()
{
Hour = timeTemp.hour;
Minute = timeTemp.min;

EventSetTimer(60);
}

void OnTimer()
{

MqlDateTime ActivationTime;
TimeToStruct(TimeCurrent(), ActivationTime);

if (ActivationTime.hour == hour && ActivationTime.min == minute)
{
Print("This code should be printed once per day");
}
}

void OnDeinit(const int reason)
{ 
}

У этого кода две проблемы:

1) При достаточном количестве тиков Print() вызывается несколько раз в минуту.

2) Когда происходит дисконнект от торгового сервера или же когда заканчивается торговая сессия, время в терминале останавливается, и если код выполнялся в эту минуту, Print() вызывается несколько раз в минуту.

Как сделать так, что бы код выполнялся только раз в день, независимо от того есть остановлено ли время в терминале или закончилась ли торговая сессия? 

Taras Slobodyanik
36480
Taras Slobodyanik  
static datetime timeday=0;
if (timeday!=iTime(_Symbol,PERIOD_D1,0))
   {
   Print("This code should be printed once per day");
   timeday=iTime(_Symbol,PERIOD_D1,0);
   }
Roman Starostin
4839
Roman Starostin  

Чтобы не привязываться к определенному ТФ, можно сделать так:

int day_of_year_trade;

void OnTick()
{
   if (day_of_year_trade != DayOfYear()) {
      day_of_year_trade = DayOfYear();
      Print("This code should be printed once per day");  
   }
}
Taras Slobodyanik
36480
Taras Slobodyanik  
Roman Starostin:

Чтобы не привязываться к определенному ТФ, можно сделать так:

в МТ5 нет функции DayOfYear 
нужно делать через MqlDateTime

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий