高频交易

62
在过去几周中,我看到了很多关于高频交易的文章。它们都谈到了计算机和软件在其中的重要性,但由于它们都是从金融角度写的,所以没有详细说明软件具体做什么。
有没有人可以从程序员的角度解释一下高频交易是什么?为什么计算机/软件在这个领域如此重要?

最近有很多关于这个话题的(非技术性)文章,我也在想同样的问题。+1 - Julien Chastang
10
请考虑在此处为量化金融StackExchange网站提议投票:http://meta.stackexchange.com/questions/5786/proposal-for-quantitative-finance-stackexchange-site。那将是这种问题非常适合的地方。请投赞成票。 - Shane
除非你有很多钱或在金融机构工作,否则你无法参与此事。 - KJW
@Kim:不一定。由于像GETCO这样的公司已经投入了数百年的人力资源来开发他们的平台,所以您可能无法运行延迟套利策略,但是有很多短期策略可以由小公司运行。 - Steve Severance
@Steve,时延套利仍然是可能的 :) - Foo Bah
取决于地点。芝加哥-纽约之间的成本很高,因为你需要使用渠道。我知道有些人在世界其他地方运行延迟套利。我会说在美国这更昂贵和困难...但不是不可能的。 - Steve Severance
6个回答

65

补充保罗所说的:

执行HFT或UHFT算法的服务器几乎总是与交易所数据中心共处。这样可以最大限度地减少延迟,并且还允许算法使用Flash订单(可能很快被禁止)在将订单广播到市场之前查看订单流量。许多算法只需几毫秒就可以评估订单,这是一个毫秒至关重要的游戏。交易组已知会采取一切措施,包括雇用内核开发人员构建自定义操作系统组件,以更好地优化订单击中网卡时和产生结果动作之间的时间。

今天通常使用的策略有几种:

第一种是在大块订单前进行交易。以保罗购买100万股IBM为例,HFT算法将寻找购买压力。不同交易所和暗池的公司计算机需要共享信息,因为订单将被分割并通常在多个交易所和暗池中执行。 HFT算法将使用统计/机器学习模型来预测购买压力的大小,如果确定有足够的压力,它还将从各个市场累积股票,并尝试以稍高的价格出售。

第二种是流动性回扣交易,其中交易所将向市场参与者支付添加流动性的费用。(请参见Direct Edge Pricing)买入或卖出的股票可能仅持有很短的时间。目标只是收集回扣并在其他方面达到保本。

在这两种策略类型中,想法是在每天进行许多次交易并赚取几分(或几分之一)。

正如您可能已经注意到的那样,有很多HFT工作岗位可用,因此交易正在变得更加拥挤。我认为这有点像2000年代初的统计套利,最终该交易将不会非常有利可图,因为许多玩家都试图使其成为现实。

为什么软件很重要呢?因为毫秒决定胜负。响应速度非常重要,代码需要紧凑、高效并且非常稳定。当市场行情不利时,算法崩溃却还持有股票是没有多少盈利的。针对这些需求,工程设计必须不同,并需要不同的技能。实时处理完整的订单簿确实需要一些计算能力和好的算法,不过它也很有趣。


6
一份出色的回答,如果在我设计和实施黑盒套利引擎时具有此信息,那将对我大有帮助!这个引擎(有时)能够以每秒约450万个套利路径的速度进行评估,在台式电脑上运行。我们把它放置在美国,最终达到了收支平衡。我经常不得不处理一些复杂的交易路线中途出现的故障,并手动填补空缺。我最糟糕的经历是几亿日元在市场下滑时处于被动状态。那个错误给我们的投资者造成了1万美元的损失。非常可怕但也非常令人兴奋。(叹息)如果再有更多时间…… - Andras Zoltan
你是如何解决了这个漏洞的? - Nikos
@Nikos 我会假设是通过手动订单或其他自定义脚本来调整订单。 - user9903

20

任何HFT系统都有两个组成部分:

  1. 实时超低延迟交易 - 订阅来自许多不同来源的实时订单簿和价格信息,执行校准的算法,旨在以最小滑点完成大量订单(即您想在当天结束之前购买100万股IBM而不会对市场产生过多影响),或仅基于短期套利尝试统计赚钱。该系统还必须提供良好的风险和头寸管理工具,以允许一个或多个操作员有效地监控和控制系统的运行。

  2. 每日/每周等大量“刻度数据”(价格、时间和订单簿信息以及先前交易活动的历史数据)的分析,旨在优化和“搜索”最适合由第1部分实时执行的算法。即“校准”并测试将在#1中执行的算法。

第一部分需要低延迟和极好的市场接入(即与交易所的直接网络连接,并且跳数尽可能少)。通常必须使用非GC语言(如C或C ++)编写此部分程序(垃圾回收器停止全球半秒钟可能非常昂贵)。第二部分通常需要网格和许多良好的模拟和统计分析软件、AI算法等。


9
我想补充一点,这种交易中最常见的应用程序往往是CEP(复杂事件处理)。一些例子包括Streambase,Apama和Aleri。另一方面,为了处理大量数据,人们使用高速数据库,比如KDB,OneTick和Vhayu。
如果您想了解技术挑战的类型,我建议首先查看这些供应商。他们的营销材料将为您提供业务应用以及技术挑战的良好感觉。

7

在某些时候(例如期货到期日),每分钟需要进行数千次交易 - 很明显人类无法独立完成这项任务。顺便说一下,对于程序员来说,这是非常紧张的时刻,因为如果出现任何问题,几乎没有恢复的机会 - 程序员往往会看着他们的日志文件飞快地滚动,心中有些不安。


哈哈,我知道这是一个比较旧的问题,但是读到这里让我很高兴知道在SO上还有其他人能够理解我日常开发HFT公司的经历。 - Dan Tao
4
非常正确。当事情出了问题,你会有人过来问你:“发生了什么事?有什么问题?为什么不起作用?我们为什么在损失钱!”通常这些人都会大声喊叫,而你则拼命地试图理解庞大的日志文件! - Luhar

3
你需要追踪价格,快速判断市场涨跌并相应地买卖。由于有许多不同的头寸在交易,你使用的分析和执行交易的软件越好,你就有可能赚更多的钱。
“更好”的意思是经常更新数据,以一种能够快速反应的方式确定有趣的趋势,并在执行频繁所需操作时易于使用。

1
「为什么计算机/软件在这个领域如此重要?」 在编程领域,追求最高的性能和最低的延迟是极其重要的。因为你越快地回应,就有可能赚取更多的利润。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接