我有一个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)当发生断开连接或当前仪器上的交易时段结束时,终端中的时间冻结并且该循环在没有结束的情况下运行直到它得到抽动并且时间变得不被解冻。
那么,即使发生断开连接,如何每天运行一次此代码呢?
有多种方法可以做到这一点,我更喜欢这个“每天一次”的意思
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()
。