如何每天在mql5中运行一次此代码?

时间:2019-01-16 17:44:31

标签: metatrader4 mql5 metatrader5

我有一个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 :(得分:0)

有多种方法可以做到这一点,我更喜欢“每天一次”的意思。

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()。如果您只知道服务器上的时间,请计算OnInitTimeLocal之间的TimeCurrent函数的时间偏移量(如果在开始时间未关闭市场。)

  • 如果可以使用格林尼治标准时间定义条件,则可以使用TimeGMT()

  • 要检测关闭的市场,您可以检查最后一个传入的报价时间。对于外汇交易对,您每分钟都会收到许多滴答声。因此,如果最后一个刻度超过1分钟,则市场关闭。要检查互联网的临时中断,您可以检查触发时间超过一分钟的时间。

相关问题