Как запустить этот код один раз в день в mql5?
У меня есть цикл с 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 ответ
Есть несколько способов сделать это, я предпочитаю этот для "один раз в день" означает
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()
если вы можете определить свои условия с временем по Гринвичу.чтобы обнаружить закрытый рынок, вы можете проверить время последнего входящего тика. для валютных пар вы получаете много тиков в каждую минуту. поэтому, если последний тик старше одной минуты, рынок закрывается. чтобы проверить временные сбои в работе интернета, вы можете проверить время последнего тика с помощью более одной минуты триггера.