有没有人可以从程序员的角度解释一下高频交易是什么?为什么计算机/软件在这个领域如此重要?
补充保罗所说的:
执行HFT或UHFT算法的服务器几乎总是与交易所数据中心共处。这样可以最大限度地减少延迟,并且还允许算法使用Flash订单(可能很快被禁止)在将订单广播到市场之前查看订单流量。许多算法只需几毫秒就可以评估订单,这是一个毫秒至关重要的游戏。交易组已知会采取一切措施,包括雇用内核开发人员构建自定义操作系统组件,以更好地优化订单击中网卡时和产生结果动作之间的时间。
今天通常使用的策略有几种:
第一种是在大块订单前进行交易。以保罗购买100万股IBM为例,HFT算法将寻找购买压力。不同交易所和暗池的公司计算机需要共享信息,因为订单将被分割并通常在多个交易所和暗池中执行。 HFT算法将使用统计/机器学习模型来预测购买压力的大小,如果确定有足够的压力,它还将从各个市场累积股票,并尝试以稍高的价格出售。
第二种是流动性回扣交易,其中交易所将向市场参与者支付添加流动性的费用。(请参见Direct Edge Pricing)买入或卖出的股票可能仅持有很短的时间。目标只是收集回扣并在其他方面达到保本。
在这两种策略类型中,想法是在每天进行许多次交易并赚取几分(或几分之一)。
正如您可能已经注意到的那样,有很多HFT工作岗位可用,因此交易正在变得更加拥挤。我认为这有点像2000年代初的统计套利,最终该交易将不会非常有利可图,因为许多玩家都试图使其成为现实。
为什么软件很重要呢?因为毫秒决定胜负。响应速度非常重要,代码需要紧凑、高效并且非常稳定。当市场行情不利时,算法崩溃却还持有股票是没有多少盈利的。针对这些需求,工程设计必须不同,并需要不同的技能。实时处理完整的订单簿确实需要一些计算能力和好的算法,不过它也很有趣。
任何HFT系统都有两个组成部分:
实时超低延迟交易 - 订阅来自许多不同来源的实时订单簿和价格信息,执行校准的算法,旨在以最小滑点完成大量订单(即您想在当天结束之前购买100万股IBM而不会对市场产生过多影响),或仅基于短期套利尝试统计赚钱。该系统还必须提供良好的风险和头寸管理工具,以允许一个或多个操作员有效地监控和控制系统的运行。
每日/每周等大量“刻度数据”(价格、时间和订单簿信息以及先前交易活动的历史数据)的分析,旨在优化和“搜索”最适合由第1部分实时执行的算法。即“校准”并测试将在#1中执行的算法。
第一部分需要低延迟和极好的市场接入(即与交易所的直接网络连接,并且跳数尽可能少)。通常必须使用非GC语言(如C或C ++)编写此部分程序(垃圾回收器停止全球半秒钟可能非常昂贵)。第二部分通常需要网格和许多良好的模拟和统计分析软件、AI算法等。
在某些时候(例如期货到期日),每分钟需要进行数千次交易 - 很明显人类无法独立完成这项任务。顺便说一下,对于程序员来说,这是非常紧张的时刻,因为如果出现任何问题,几乎没有恢复的机会 - 程序员往往会看着他们的日志文件飞快地滚动,心中有些不安。