新的mql4提供时间戳中的毫秒.... - 页 2

 
请注意,如果毫秒和纳秒是如此重要,这些时间点是通过互联网进入的(网络绑定的IO)。除非你打算做一些坏事,否则非秒级的时间分辨率可能是多余的。
 
angevoyageur:
在mql5中也没有这样的信息。但是有一个Timer事件,可以用毫秒的精度,虽然我不知道这个功能在新的mql4中是否可用。

目前mql4的等价物是如下所示。

void start(){
    while(true){
        do_something....;
        Sleep(1000); //Sleep for one Second.
        RefreshRates();
    }
}

void start(){
    static bool RunOnce;
    if(RunOnce) return;
    int Begin=GetTickCount();
    while(GetTickCount()<Begin+1000){
        Print("GetTickCount()="+GetTickCount());
        Sleep(1);
    }
    RunOnce=true;
}

我测试了GTC,它似乎跳了16_milliseconds。我发现,这可能是传统系统的某种计算机科学的限制。如果有人愿意解释一下原因[尽管我在胡言乱语],我会很高兴。嗯,不知道mql5是否有同样的限制?好吧,还有一个测试,马上就到了 :)

 

总是值得努力找出,MQL开发人员封装了什么Widows API函数。

在这种情况下,答案很简单--他们使用了GetTickCount 它说。

GetTickCount 函数的分辨率 受限于系统定时器的分辨率,通常在10毫秒到16毫秒之间。

 

我以前在谷歌上搜索过,虽然我不太明白,但似乎GetTickCount()是一个直接来自windows操作系统的函数。它并不意味着精确,也不应该被用于需要精确到毫秒级别的事情(尽管它返回的是毫秒级的值)。

我已经用sleep和get tick count做了测试,总是有错误,很难说是由Sleep还是GTC引起的,但我猜是两者都有。

 
Ovo:

总是值得努力找出,MQL开发人员封装了什么Widows API函数。

在这种情况下,答案很简单--他们使用了GetTickCount 它说。

GetTickCount 函数的分辨率 受限于系统定时器的分辨率,通常在10毫秒到16毫秒之间。

谢谢你。
 
ubzen:

目前的mql4等价物是如下所示。

我测试了GTC,它似乎跳了16_milliseconds。我发现,这可能是传统系统的某种计算机科学的限制。如果有人愿意解释一下原因[尽管我在胡言乱语],我会很高兴。嗯,不知道mql5是否有同样的限制?好吧,还有一个测试马上就来 :)

16毫秒的限制来自于硬件的限制,但是还有其他方法可以获得更好的精度的计时器。
mql5对GetTickCount()也有同样的限制,但正如我在上面试图解释的,还有其他的功能可以使用(定时器事件)。

 
Ovo:

总是值得努力找出,MQL开发人员封装了什么Widows API函数。

在这种情况下,答案很简单--他们使用了GetTickCount 它说。

GetTickCount 函数的分辨率 受限于系统定时器的分辨率,通常在10毫秒到16毫秒之间。


是的,它是这么说的,但很难知道这到底是什么意思。如果分辨率是16毫秒,我希望看到0、16、32、48......等值。

我从来没有看到0到16之间的东西,但我看到每一个关于16的值。

 
angevoyageur:

16毫秒的限制来自于硬件的限制,但是还有其他方法可以获得更好的精度的定时器。
mql5对GetTickCount()也有同样的限制,但正如我在上面试图解释的那样,还有其他可以使用的功能(定时器事件)。

明白了:)
 
RaptorUK:
成交量是一个不好的名字,实际上是 "Tick count"......它与交易量/手数无关......它之所以可以变化超过1,是因为你可以错过ticks。


谢谢你的信息。我想知道我以前怎么没有注意到这一点。在这种情况下,这似乎是一个相当无用(或误导)的信息。

我真的要从一些经纪商那里寻找真正的level2交易量数据。幸运的是,我的ECN经纪人提供了真实交易量的level2交易数据。