请问:如何用GetTickCount()计算TICK时差的

 

下面是MT4示例:

   int start=GetTickCount();
  // 计算...
  Print("Calculation time is ", GetTickCount()-start, " milliseconds.");

      。。。。。。


请问:MT4示例有点看不明白,通过如何“计算”可以计算出来呢?

 

时差?

 
有事产
 
dad279785:

时差?。。

个人理解:就是图表上,跳动的那根水平线,每跳动一下TICK就产生一次新的价格,如Tick1跳到Ticko上后,就会有时间的差。
 
wxn2014:

下面是MT4示例:

   int start=GetTickCount();
  // 计算...
  Print("Calculation time is ", GetTickCount()-start, " milliseconds.");

      。。。。。。

请问:MT4示例有点看不明白,通过如何“计算”可以计算出来呢?

MT4/MT5 客户端启动之后会在内部生成一个计时器(0 - 2^32-1 毫秒间循环,意即如果客户端启动后不关闭,则20多天后此数值会重新从0开始计数)。

自己开发的程序若需要毫秒级精度的计时,则在初始阶段保存当前的内部计时器数值,即 int start=GetTickCount();

以后只要随时获取当前系统内部计数值,减去初始值,就得到流逝的毫秒值了。

Tick 可以理解为逐笔报价,即从服务器端实时发送的最新报价。

MT4/MT5 接收后会调用 OnTick (在 EA 中),OnCalculate(在指标中) 事件处理器响应,所以只需在相应函数里计算每次接收 Tick 的时间就可算出时差。

不建议依据 Tick 进行交易,因为此数值受经纪商设定,以及网络延迟等因素的影响较大,根本不可靠。

 
Xiangdong Guo:

MT4/MT5 客户端启动之后会在内部生成一个计时器(0 - 2^32-1 毫秒间循环,意即如果客户端启动后不关闭,则20多天后此数值会重新从0开始计数)。

自己开发的程序若需要毫秒级精度的计时,则在初始阶段保存当前的内部计时器数值,即 int start=GetTickCount();

以后只要随时获取当前系统内部计数值,减去初始值,就得到流逝的毫秒值了。

Tick 可以理解为逐笔报价,即从服务器端实时发送的最新报价。

MT4/MT5 接收后会调用 OnTick (在 EA 中),OnCalculate(在指标中) 事件处理器响应,所以只需在相应函数里计算每次接收 Tick 的时间就可算出时差。

不建议依据 Tick 进行交易,因为此数值受经纪商设定,以及网络延迟等因素的影响较大,根本不可靠。放

谢谢你的回复,我测试过后发现误差很大,谢谢你的提醒!

 
wxn2014:

下面是MT4示例:

   int start=GetTickCount();
  // 计算...
  Print("Calculation time is ", GetTickCount()-start, " milliseconds.");

      。。。。。。


请问:MT4示例有点看不明白,通过如何“计算”可以计算出来呢?

当前Tick直接取后三位即是当前报价的ms数值。

int ms= GetTickCount()- GetTickCount()/1000*1000;

当前报价与前一报价的间隔毫秒,可以用一下代码计算。

 Print("Calculation time is ", GetTickCount()-start, " milliseconds.");

start= GetTickCount();

原因: