261 views
0

该如何测试行情服务器到本地的延时呢?

Answered question
0

很多同学在使用tqsdk的时候会想要知道,交易所的每一笔行情从发出到我接收到中间会有多长时间的延时呢?

有些同学会这么做,用本地时间,减去quote里面自带的这笔行情发出时间,来得到一个差值,认为是行情的延时时间。

但其实这么做,在毫秒级别并不准确,因为各家交易所的行情的本机时间并不一致,此外各家交易所的本地时间和北京时间也不是完全对齐,所以在这种情况下,用户的本机电脑和交易所的本地时间并不是完全对齐的,这种减法下就会有误差

此外交易所从没对外公布过自己本地的行情时间,因此对于用户来说我们能观察到的只有本地时间,在只有单边测试(即我们只能知道用户端时钟的情况下)下是无法得到一个准确的行情延时的。

但是理论上,我们有一些较为接近的方法可以测到毫秒级别的误差。

比如

用户可以在本地找到一个冷门合约,然后对这个冷门合约进行下单,从下单然后经过ctp到达交易所的这段时间记录t1

然后单子到了交易所之后,交易所服务器撮合,然后等到下一笔行情截面更新发出,这个时间记为t2,因为大部分交易所的规则为500ms发出一个行情截面,因此可以粗略估计这个t2的时间在0-500ms之间

然后交易所把这笔行情再发出到用户,用户观察到这个冷门合约上出现了我们的挂单,这段时间记为t3

因此用户可以记录一个时间 T = t1+t2+t3

当随机测试较多次后,我们可以认为t2应该无穷趋近于 (0+500)/2=250ms

这时我们就可以用测算的T的平均值-250ms,即为 t1 +t3的时间,但是这个t1时间其实准确意义上代表的是交易到达交易所的时间,t3代表的是交易所行情到本地的时间,所以准确的行情到本地的延时其实在单边情况下还不能测算出来。

但是我们有做一个统计,即我们的行情服务器从发出一笔行情,到收到用户程序自动确认这笔行情被收到的平均耗时为24ms,这其中包含了快期APP和快期PC的用户,则理论上从我们的行情服务器发出到天勤用户的平均延时应该小于12ms。

Edited answer