MQL4实时时钟(逐秒)。

 

我的理解是,Start()函数 是逐点工作的。

有没有一种方法可以使用计算机时钟的实时数据并每秒更新?不是逐点更新,而是每秒钟更新?

如果有,请给我一些帮助。

谢谢

 

解释

 

MQL4使用TimeLocal();TimeCurrent(),这些都是基于每一个刻度的,甚至是iTime....。

我真正想要的是能够在我的图表上显示一个实时时钟,每秒都会更新,可能使用我的电脑时钟或远程服务器。

 

TimeCurrent()不是基于tick的。

但是启动函数是基于tick的。你可以使用无尽的循环与睡眠相结合。在mql4.com上有一篇文章解释了优点和解决方案。

由于整个MT4是tick驱动的,我不喜欢实现时间敏感的逻辑。过去我在我的自定义时间框架指标中结合了这两者。这只是一个简单的工作,但你可以得到一个想法。如果你想要一个每秒更新的手表,那么我的工作对你来说是没有用的。https://www.mql5.com/en/code/10080

//z

 

我们的想法是让手表每秒钟更新一次,而不是像你的程序那样在Start()中调用函数,即

if(TimeCurrent()>(t+TimeInSeconds))

根据你的解释,我可以在init()函数中使用一个while循环,然后当我在start()函数中调用它的时候,它仍然会逐个滴答!

 

你将需要类似这样的启动函数。循环在第一个刻度上被执行。之后,它将是刻度独立的。

while(true){
 updateWatch();
 Sleep(1000);
} 
 

zzuegg; 这将是一个无休止的循环,并将限制metatrader指标做一件事...计数。

因此,如果你选择使用sleep函数 与TimeCurrenet函数相结合,每Sleep(1000)增加一秒;这个程序将不能做其他事情。

它将只是计数....,所以你将会把自己限制在一个函数中。

 

是的,metatrader不喜欢无休止的循环;它崩溃了,就像我现在经历的那样,它应该有一个休息的地方 :)

 

你并不局限于一个函数。你可以在循环内做任何你想做的事情。你可能需要一些重新计算来保证1秒的执行时间,但一般来说它是有效的。

我从来没有用指示器做过,但在EA中是可行的。

另一个选择是使用一个外部程序,以1秒的间隔向你的终端发送假刻度。结合我在《自定义时间框架蜡烛》中的代码,你应该得到你的结果。

 
while( !(IsTesting() || IsStopped()) ){
    updateWatch();
    RefreshRates();
    if (...)  doTrading();
    Sleep(1000);
} 


是的,metatrader不喜欢无休止的循环;它崩溃了,就像我现在所经历的那样,它应该在某个地方有一个断点:)
指标中没有无休止的循环。对于脚本和EA来说,如果你先更新内部程序,是可以的(就像上面所说的。)
 

使用MQL5

原因: