Как запустить этот код один раз в день в mql5? - PullRequest
0 голосов
/ 16 января 2019

У меня есть цикл с 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)
{ 
}

Имеется 2 вопроса:

1) Когда график получает много тиков, он выполняет более одной операции Print ().

2) Когда происходит отключение или когда на текущем инструменте заканчивается торговая сессия, время в терминале останавливается и этот цикл продолжается до тех пор, пока не произойдет тик, а время не замерзнет.

Так как мне запускать этот код один раз в день, даже если происходит отключение?

1 Ответ

0 голосов
/ 01 февраля 2019

Есть несколько способов сделать это, я предпочитаю этот, потому что «один раз в день» означает

string lastRunDate = null;
int Hour = 20;
int Minute = 20;

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

  EventSetTimer(60);
}

void OnTimer()
{

  MqlDateTime ActivationTime;
  TimeToStruct(TimeLocal(), ActivationTime);

  if (lastRunDate!=TimeToString(TimeCurrent(), TIME_DATE) && ActivationTime.hour == hour && ActivationTime.min == minute)
  {
    Print("This code should be printed once per day");
    // ... after your codes, `remember today` !
    lastRunDate = TimeToString(TimeCurrent(), TIME_DATE);
  }
}

void OnDeinit(const int reason) {
  EventKillTimer();
}
  • используйте TimeLocal(). если вы знаете только время на своем сервере, рассчитайте смещение времени в функции OnInit между TimeLocal и TimeCurrent (если рынок не закрыт во время инициализации. *)

  • вы можете использовать TimeGMT(), если вы можете определить свои условия с временем по Гринвичу.

  • чтобы обнаружить закрытый рынок, вы можете проверить время последнего входящего тика. для валютных пар вы получаете много тиков в каждую минуту. поэтому, если последний тик старше одной минуты, рынок закрывается. чтобы проверить временные сбои в работе интернета, вы можете проверить время последнего тика с помощью более одной минуты триггера.

...