在过去的几周里,我遇到了很多关于高频交易的文章.他们都谈论计算机和软件对此有多重要,但由于它们都是从财务角度编写的,因此没有关于软件功能的详细信息?
任何人都可以从程序员的角度解释什么是高频交易?为什么计算机/软件在这个领域如此重要?
为了扩展保罗说的话:
执行HFT或UHFT的服务器几乎总是在交换机的数据中心内并置.这样可以最大限度地减少延迟,并且允许算法使用Flash订单(可能很快就会被禁止)在订单被广播到市场之前首先查看订单流.许多算法将在几毫秒内评估一个订单,这是一个毫秒重要的游戏.众所周知,交易团队会全力以赴,包括聘请内核开发人员构建自定义操作系统组件,以便更好地优化订单到达NIC之间的时间以及采取最终操作的时间.
今天常用的是一些大型战略:
第一个是在大块订单前交易.要使用保罗购买百万股IBM的例子,HFT算法将寻求购买压力.由于订单将被分割并且通常在多个交易所和暗池中执行,因此在不同交易所和暗池中的公司计算机将需要共享信息.HFT算法将使用统计/机器学习模型来预测购买压力的大小,如果确定足够,它还将累积来自各个市场的股票并试图以稍高的价格出售它们.
第二个是流动性回扣交易,交易所将向市场参与者支付流动性.(请参阅直接边缘定价)买入或卖出的股票只能在很短的时间内持有.目标只是收取回扣,并在其他一切方面实现收支平衡.
在这两种策略类型中,想法是在交易中制作便士(或分数)并且每天多次这样做.
您可能已经注意到有很多可用的HFT工作,因此交易变得更加拥挤.我认为这有点像21世纪初的统计数据,最终交易不会很有利可图,因为很多玩家都试图做到这一点.
至于为什么软件很重要:毫秒很重要.延迟非常重要,代码需要紧凑,快速且坚固稳定.当市场对你不利时,有一个算法崩溃并被股票抓住并不是很有利可图.这些要求的工程设计必然不同,需要不同的技能.实时处理完整的订单确实需要一些马力和良好的算法.虽然这很有趣也很有趣.
任何HFT系统都有两个部分:
实时超低延迟交易 - 订阅来自许多不同来源的实时订单和价格信息,执行经过校准的算法,以便以最小的滑点执行大订单(即您希望最终购买100万股IBM没有太多移动市场的那一天),或者只是试图在短期套利的基础上统计赚钱.该系统还必须提供良好的风险和位置管理工具,以允许一个或多个人工操作员有效地监视和控制系统正在做什么.
隔夜/周等分析大量"刻度数据"(价格,时间和订单簿信息,以及系统先前交易活动的历史数据),寻求优化和"搜索"实际执行的最佳算法时间按部分#1.即"校准"并测试将在#1中执行的算法.
第一个需要低延迟和非常好的市场准入(即以最小跳数直接连接到交换机).这部分通常必须使用非GC语言(如C或C++)编写(半秒延迟,而垃圾收集器停止世界可能会非常昂贵).第二个通常需要一个网格和许多良好的模拟和统计分析软件,AI算法等.
我想补充一点,在这种交易中最流行的应用程序往往是CEP(复杂事件处理).一些例子是Streambase,Apama和Aleri.另一方面,为了处理大量数据,人们使用高速数据库,如KDB,OneTick和Vhayu.
如果您想了解这种技术挑战,我建议您首先查看这些供应商.他们的营销材料将使您对业务应用程序以及技术挑战有一个良好的认识.
在某些时候(例如在期货到期时),有必要每分钟进行数千次交易 - 显然人类无法独立完成这项工作.这个BTW对于程序员来说是一个非常紧张的时间,好像什么都出错了,几乎没有恢复的机会 - 程序员倾向于看着他们的日志文件在他们的嘴里有点流动.