之前连模拟系统,发现行情的推送是一段一段的,以为是模拟系统本身的问题。今天试了一下真实环境,发现有同样的问题。 开始怀疑是文件系统buffer的问题,flush了以后还是一样。 再怀疑是网络buffer的问题,tcpdump看到 可以看到packet是不均匀的,但是收到的行情还是大约每500ms一条。 所以我推测CTP的行情服务器会缓存一段时间的行情,然后再推到客户端。求证实。
行情的时间戳是500ms一条,但是在我的实验中到达我的机器不是500ms一次。经常是等3-4秒收到一串数据。从tcpdump的输出看,13:58:04.620503收到的payload有538 byte,但是下一个数据多一点的packet是在3秒多以后,也就是13:58:08.150210,payload有1139 byte。所以我怀疑CTP行情虽然是500ms产生一条,但是并不是500ms推送一条。
500ms来一次,可真够慢的,相当于我们能看到A股今天的行情,你只能怎到昨天的行情。其结果是对你不利的单子全成交,对你有利的单都成交不了。 如果不是服务器的问题,那你可以设置你本地机的网络编程参数。具体你查查资料吧。如,接收一个字节底层就会发送事件到应用层。如果你设置的较大,如100个字节才发,那就慢了,会在接收缓存里存满100个字节才发给应用层,当然这样的吞吐率会高些。
我ping了一下几个交易前端,average ping time都比较大,200ms-300ms之间。 所以可能是如pistachios说的,问题还是出在网络状况上。会再找找其他地方测试一下网络。 另外,500ms一次的推送确实算不上很快。我觉得如果能误差小些,有些策略是可以试一下的。不知道Toby是不是在用更快的行情,实时的分笔数据吗? 我看到文华的行情软件里可以抽取分笔数据,不知道能实时显示吗?