首先,在高频交易中,1毫秒就像是与交易所相距100英里。如果您认为这不是这样,那么最好再多读一些相关领域的资料。(吞吐量和延迟深度交织在一起,任何基本排队论教材中的公式都可以告诉您这点。同样的公式也会显示出抖动值(如果网络结构正确且核心配置足够,CPU队列延迟的标准偏差通常会占主导地位)。
高频交易套利的一个问题是,一旦你决定获取价差,就要实现盈利的两条(或更多)腿。如果你未能达成所有腿部,你可能会留下一个你真的不想要的头寸(以及随后的亏损),毕竟你进行的是套利而不是投资。
除非您的策略预测(非常短期!)未来(信不信由你,这确实已经被成功地实现了),否则您不希望有任何持仓。如果您离交易所还有1毫秒,那么你提交的订单中有相当大的一部分都不会被执行,而您想要的则会被吃掉。最有可能的是,已经执行了其中一条腿的订单最终会成为输家,或者至少不盈利。
无论您的策略是什么,举个例子,我们假设它最终取得了55%/45%的胜/负比率。即使胜负比率的微小变化也可能对盈利产生重大影响。
关于“运行数十个甚至数百”的说法似乎存在数量级上的错误。即使考虑每秒20,000个tick,但这可能是他正在观察的金融工具集的整个交易日的平均值。
每秒钟看到的速率有很高的变异性。我将举一个例子。在我的一些测试中,我查看7只场外股票(CSCO,GOOG,MSFT,EBAY,AAPL,INTC,DELL),在一天中间,这个流的每秒速率可以从0 mps(非常罕见)到几乎2000次报价和交易的峰值秒。(明白为什么我认为上面的20,000是低估的了。)
我为这个领域建立基础设施和测量软件,我们谈论的数字是每秒十万和百万级别的。我有C++生产者/消费者基础设施库,可以在生产者和消费者之间推送近5000000(5百万)条消息/秒,(32位,2.4 GHz核心)。这些是64字节的消息,生产者端使用new、construct、enqueue、synchronize,消费者端使用synchronize、dequeue、touch every byte、run virtual destructor、free。现在可以承认这只是一个简单的基准测试,没有Socket IO(socket IO可能很丑陋),就像终点管道阶段的终点一样。它们是全部自定义同步类,仅当为空时同步,自定义分配器,自定义无锁队列和列表,偶尔使用STL(带有自定义分配器),但更常见的是使用自定义侵入式集合(我有一个重要的库)。不止一次,我给这个领域的供应商提高了四倍(甚至更多)的吞吐量,而没有增加套接字端点的批处理。
我有OrderBook和OrderBook::Universe类,平均每22,000个工具包括新建、插入、查找、部分填充、查找、第二次填充、擦除、删除序列所需的时间不到2微秒。基准测试在插入第一个填充和最后一个填充之间按顺序遍历所有22,000个工具,因此没有使用任何廉价的缓存技巧。相同订单簿的操作通过访问22,000个不同的订单簿来分离。这些非常不是真实数据的缓存特征。真实数据在时间上更加局部化,连续的交易经常命中同一本书。
所有这些工作都涉及到对所使用的算法成本中的常数和缓存特性进行仔细考虑。(有时候似乎KO(n) KO(n*log n)等等等等中的K被轻率地忽略了)
我在市场数据基础设施方面工作。对于这项工作,甚至想使用Java或托管环境都是难以想象的。当你可以通过C++获得这种性能时(我认为在托管环境中很难获得每秒百万以上的性能),我无法想象任何重要的投资银行或对冲基金(对于一位顶尖的C++程序员来说,25万美元的薪水微不足道)不选择C++。
有人真的能从托管环境中获得2000000+/mps的性能吗?我知道这个领域的一些人,但从未向我炫耀过。我认为在托管环境中达到2mm的性能也值得炫耀。
我知道一个主要参与者的FIX订单解码器每秒处理12000000个字段解码(3 GHz CPU)。它是用C++编写的,该作者几乎向任何人发起挑战,要求用托管环境创造出即使只有一半速度的同等解码器。
技术上,这是一个有趣的领域,存在许多有趣的性能挑战。考虑期权市场当基础证券发生变化时 - 可能会有6个未解决的价格点,其中包括3或4个不同的到期日。现在,对于每笔交易,可能会有10-20个报价。这些报价可能会触发期权价格的变化。因此,对于每个交易,可能会有100或200个期权报价的变化。这只是一大堆数据 - 不像“大型强子对撞机”探测器那样多,但仍然是一个挑战。这与处理按键输入有所不同。
即使在FPGA的争论也在继续。许多人认为,在3GHZ通用硬件上运行的良好编码分析器可以击败500MHz FPGA。但即使略微慢一些(并不是说它们是),基于FPGA的系统往往具有更紧密的延迟分布。(请注意,“往往”-这不是一项全面的声明)当然,如果您拥有一个优秀的C++解析器,并将其通过Cfront推送,然后将其通过FPGA图像生成器推送......但这又是另一场辩论......