有几个误区是要先澄清的。

一,HFT不一定是套利算法。事实上HFT做的最多的业务是做市,可以是把商品从一个交易所倒卖到另一个交易所,也可以是在同一个交易所内部提供某种商品的流动性。这两种方式的共同点都是让人们可以特定地点买到本来买不到的商品,所以本身就是有价值的,收服务费就可以盈利。反而是套利算法是投入高风险高的生意,一旦市场环境变化就要重新研发,不是长久的生意。

二,延迟和带宽是不同的概念。低延迟不等于高数据量,事实上大部分时间交易数据流量并不大,一个market一天最多也就几个GB。但HFT系统需要在流量高峰时也能快速响应,所以更看重延迟。

三,一个HFT业务包括从主机到交易所的整条通信线路,在这条线路上有很多段不同的延时,是需要分开讨论的。如果是做跨交易所的交易,首先需要考虑的是两个交易所之间的网络延迟。当数据通过网络到达主机的时候,有一个最基本的tick-to-trade延时,是指主机接收到数据到做出响应所需的时间。但这个东西的测量很有技术含量,根据不同的测量方式,它可能包括或不包括网卡及网络栈的处理时间。所以拿到一个HFT系统的延迟数据时,首先要搞清楚它指的是什么,然后再来讨论。

接下来说说做为一名从业者,我对各个层面的理解。

首先网络架设上光纤肯定是最差的方案。国外几个主要的交易所之间基本上都有微波(microwave/milliwave)线路,比光纤的延迟要低一个数量级,延迟敏感的应用一定要选择这种线路。但微波技术有两个主要的缺点,第一是在空气里传播受天气影响很大,刮风下雨都会导致通信受损,有时直接故障,所以一定需要有备用的光纤线路;第二是带宽太小,如果是跨交易所的业务,不可能通过微波来转移市场数据,只能用来收发下单指令。第二点给网络服务商提供了一定操作的空间,比如可以自己做一点数据压缩和抽样,就可以在微波线路上提供一个微缩版的市场数据,非常有价值。这块网络服务本身就是一个独立的业务了,一般所说的colocation也是由服务商负责的,HFT主要需要的是选择适合自己的服务商。

网络线路确定以后,数据就送到了HFT主机。这时候需要决定网卡的方案,专用的网卡除了自身硬件的设计外,一定需要的是切换掉系统自带的kernel space TCP/IP stack,避免昂贵的context switching。这个层面上FPGA是很有应用价值的,因为可以做一些额外的逻辑处理,进一步解放CPU。

网络部分的问题解决以后,最后就是核心的业务逻辑的处理。这部分也许会用到一些数学建模,但是没有什么神话,不是什么菲尔兹奖得主才能搞的东西(那些人的用武之地更多是去投行那边做衍生品,那才是真正需要高等数学的东西)。很多时候核心的还是延时,这个在计算机内部分两个部分,一是core的使用率,比如irq balance,cpuisol,affinity等,主要是要尽可能的独占core;另一个是cache invalidation,从L1/L2/L3 cache到TLB,memory layout之类都要仔细考虑,这个更多考验的是对体系结构的理解和程序设计的功力,跟语言是C++还是erlang的关系不大。具体选择那种语言,主要是取决于公司的技术积累和市场上的技术人员供给。

对于FPGA,我同意Nil的回答,业务逻辑烧到硬件里的开发,调试成本和周期都是很难承受的,不看好做为长期发展的路线,这个东西其实和套利,数学模型一样是赚外行眼球的东西。但做专用的网络设备却是比较有优势的。

操作系统同样是一个不需要神话的东西,普通的linux已经有足够的空间用来做性能优化。简单说,一个企业级的linux(如redhat)加上通用的架构(intel主流处理器)足以做到市面上已知的最低延迟,不必幻想有什么奇妙的软硬件可以做到超出想像的事情。

最后需要提醒大家注意的是,其实做一个低延迟系统,首先需要考虑的不一定是延迟能降到多低,而是怎么测量系统的延迟?对一个HFT系统来说,所谓的tick-to-trade延迟,一定要有既精确又不影响系统性能的测试方法才有意义。可以想像一下,最理想的测试场景一定是你的系统真正运行在直连交易所,有真实的市场数据传入的情况下,并且测试的代码就是真正的交易算法时,得到的数据才有意义。如何得到这个苛刻的测试环境,以及如何测量系统的各个部分的延迟,是一个非常有技术含量的工程,难度往往并不亚于系统设计本身。

— 完 —

本文作者:董龙珠

【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 12 个回答,查看全部。
延伸阅读:
写程序需要编译器,编译器是程序,输入输出也需要驱动,驱动也是程序,那么第一个在电子计算机运行的程序是怎么产生的?
为什么 iPhone 没有调频或调幅收音机模块?

分享到