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

 

目前,mql4只能为传入的ticks提供精确到秒的时间。 我们使用以下函数。

MarketInfo(Symbol(), MODE_TIME)

1) 是否有一个不同的函数可以提供毫秒级的时间戳,或者可以用来确定来到平台的tick数据的毫秒级?

2) 结合mql5函数的新mql4是否能够请求或获得传入tick的毫秒(或亚秒)时间戳?

那么,mt4(和mt5)平台应该如何正确区分 "同一时间 "进入的ticks?

 
4evermaat:

目前,mql4只能为进入的ticks提供精确到秒的时间。我们使用以下函数。

MarketInfo(Symbol(), MODE_TIME)

1) 是否有一个不同的函数可以提供毫秒级的时间戳,或者可以用来确定来到平台的tick数据的毫秒级?

2) 结合mql5函数的新mql4是否能够请求或获得传入tick的毫秒(或亚秒)时间戳?

那么mt4(和mt5)平台应该如何正确区分 "同一时间 "进入的ticks?

1) GetTickCount(), 应该在现场工作。对历史数据毫无意义。

2) 即使是mt5_data也不是以毫秒为单位保存的。但是,在现场没有问题。

3) 我不明白你为什么要这么做。如果是以毫秒为单位的同一时间,那么有毫秒就没有帮助。如果是以毫秒为单位的不同时间,那么GetTickCount()可能有帮助。帮助是指你的代码在不到一毫秒的时间内处理当前的刻度。有多重要 取决于你要完成的任务...我想。

 

你至少有两个选择。

1.用MQL的GetTickCount()来区分ticks,它的精度为16ms。

2.2. 使用Kernell32.dll的GetLocalTime()访问PC时间,精度为纳秒(这在linux的模拟器上不起作用,它们仍然返回16ms的精度)。

 

4evermaat:我认为ticks是由Volume来区分的。每当经纪人发送一个新的刻度,交易量就会增加一个。例如,如果你看的是M1图表,那么某一个条形图的成交量就是该分钟内发送了多少个tick。

事实上,昨天我试着做了一个函数,用毫秒记录时间。它使用了TimeCurrent() 和GetTickCount()。在数学上,它是正确的......但GetTickCount()不够准确。我发现将事件时间四舍五入到最后一秒(即仅仅使用TimeCurrent())的误差比我的函数小... :/

我改天再试试,但据我所知,如果你需要一秒内的精度,就不能依靠GetTickCount()。

也许C++专家可以访问GetTickCount()的更精确的等价物...?

 
Ovo:

你至少有两个选择。

1.用MQL的GetTickCount()来区分ticks,它的精度为16ms。

2.2. 使用Kernell32.dll的GetLocalTime()访问PC时间,精度为纳秒(这在linux的模拟器上不起作用,它们仍然返回16ms的精度)。


1) 根据我的测试,我不相信GetTickCount()有16ms的精度。的确,16ms是我得到的最小值(除了0),但我不认为关于16ms的值能精确到最接近的16ms。

2) 啊,这是个好主意。我会试一试的。

 
alladir:


1) 根据我的测试,我不相信GetTickCount()有16ms的精度。的确,16ms是我得到的最小值(除了0),但我不认为关于16ms的值能精确到最接近的16ms。

2) 啊,这是个好主意。我会试一试的。


对不起,我经常把精度和准确度搞混,我现在也不确定哪个是哪个。
 
Ovo:

对不起,我经常把准确性和精确性搞混,我现在也不确定哪个是哪个。

我也不知道,我只知道我有一个公式,在数学上应该是可行的,但在现实生活中却不行......所以我责备GetTickCount():)
 
alladir:

4evermaat:我认为ticks是由Volume来区分的。每当经纪人发送一个新的刻度,交易量就会增加一个。例如,如果你看的是M1图表,某一个条形图的成交量就是该分钟内发送了多少个点。


我以前曾多次看到这种情况,但你确定吗?我在我的ECN经纪商上检查过几次,每一个点的 成交量都有不同程度的增加,这可能是流经该经纪商的实际交易量。例如,当我卖出10手,下一个刻度的手数将是+10,而不是+1。

 

当你交易10手时,交易量会增加10?我没有经历过这种情况。我运行一个滴答收集器,记录每个滴答。有时交易量会增加2或3,但我猜测那是非常快的刻度,要么是经纪人没有发送,要么是在我的刻度收集器的开始功能仍在运行时到达。

是的,我只是通过谷歌搜索认为成交量=ticks,但这似乎与我看到的数据相符。

 
szgy74:

我以前看到过很多次,但你确定吗?我在我的ECN经纪商上检查过几次,交易量的增加在每一个刻度上都不一样,这可能是通过该经纪商的实际交易量。例如,当我卖出10手,下一个刻度的手数将是+10,而不是+1。

交易量是一个不好的名字,实际上是 "Tick count"......它与交易量/手数 无关......它可以变化超过1的原因是你可以错过ticks。
 
4evermaat:

目前,mql4只能为传入的ticks提供精确到秒的时间。 我们使用以下函数。

MarketInfo(Symbol(), MODE_TIME)

1) 是否有一个不同的函数可以提供毫秒级的时间戳,或者可以用来确定来到平台的tick数据的毫秒级?

2) 结合mql5函数的新mql4是否能够请求或获得传入tick的毫秒(或亚秒)时间戳?

那么,mt4(和mt5)平台应该如何正确区分 "同一时间 "进入的ticks?

在mql5中也没有这样的信息。但是有一个Timer事件 可以精确到毫秒,虽然我不知道新的mql4是否会有这个功能。