最佳量化交易的计算机操作系统
本文在Creative Commons许可证下发布
我经常被问到的一个问题是:用哪种计算机操作系统和计算软件进行量化交易的理论研究和代码实现?
我想把这个问题简化,从挑选的计算软件和计算库来反推最佳使用的计算机操作系统。简而言之,就是在本文撰写的时候而言,如果你想进行基于任何严肃的数学理论和金融量化交易研究理论,这里特指机器学习或者深度学习。并且需要在本地研究机器上使用桌面版本,在实时交易VPS或者同等设备上使用服务器版本的话。这种情况下,为了避免这种形式的研究所需的前沿计算库出现问题的最直接的方法是——Ubuntu 18.04LTS Linux。然而Ubuntu/Linux对于我们中的许多人来说可能并不熟悉,因为Windows仍然是家庭和现代办公环境中计算机操作系统的实际选择。
而且,考虑到个人研究的目标是花尽可能多的时间研究和开发量化交易策略,而不是阅读成堆的编程书籍,那么学习一个对个人来说全新的操作系统和相关的命令行界面(CLI)是否值得?就是一个仁者见仁智者见智的问题了。
显然,这将取决于自己的情况。对于自己的交易风格,首选的交易研究方法,选择的编程语言和个人设计的交易模型的复杂性都是应该考虑的点。我想说的是,对于目前大多数人选择的基于Python的科学计算和量化研究来说,学习GNU\Linux和CLI将为个人的量化生涯带来巨大的回报。
现在让我们来看看量化交易研究中可能使用的这三种主要操作系统。
一、Microsoft Windows
在本文中,我假设几乎所有的读者(如果不是所有的话)都完全熟悉Windows,所以我觉得不需要解释这里是什么,不像下面讨论的其他两个操作系统!
1、有利于量化交易的优点?
Windows通常很容易使用(大多数新计算机都将其作为默认操作系统提供),而且许多在售的基于图形界面的定量交易软件都是专门为Windows编写的。仅此一点,它就成了许多定量交易的有力竞争者。
在过去,Windows以不定时的崩溃(著名的蓝屏)而闻名,而新版的Windows在久经考验的Windows NT内核上构建后,它已经变得非常可靠了。
此外,通过基于云服务(如Microsoft Azure或 Amazon Web Services),可以非常迅速的把基于图形用户界面的量化交易系统从Windows桌面转移到Windows服务器。
所有主要的关系数据库都在Windows受到支持,这包括MySQL、PostgreSQL、Oracle和微软自己的SQL-Server。这些供应商都为这些数据库提供了直观的图形界面。
2、它的缺点?
Windows的主要缺点可以说是成也萧何,败也萧何——图形界面。图形界面是对于所有桌面应用的最理想的环境手段。但是对于量化交易而言,尤其是高频交易模型而言,模型严重依赖于自动任务管理和调度,这种情况最高效的手段恰恰是命令行工具尤其是类似于Unix的cron工具。这样使得Windwos的吸引力大大降低了,因为在所需的策略自动化需要的运行频率和程序的运行权限的优先级别调节面前,Windows自豪的图形界面功能就成了它最大的短板。
同样在提供对Python友好方面体现出不足。虽然目前Anaconda python发布包在解决这个问题上做出很大程度的努力。但是仍然有必要从零开始编译C/C++代码,这时,这些库文件通常会默认假设存在C++编译器,比如GCC。这时,通常我们会安装一个类似于Cygwin的工具。但是,一旦你的研究工作需要通过与C/C++打交道来利用Python库的时候,我觉得不如安装一个GNU\Linux,而不是试图在Windwos中复制Linux的API接口。
现在的还有一个小问题是,Windows也非常需要资源,因此如果需要绝对的执行速度,Windows可能会比同等的Linux系统慢一点(特别是在服务器版本方面)。
二、Apple Mac OS X
Mac OS X是苹果系列Mac电脑上的操作系统。它实际上是一个被称为BSD的Unix发行版的经过大量修改的版本。这意味着它实际上对GUI和CLI都有一种“两全其美”的方法。它提供了一个非常直观的基于手势的GUI,但也非常受软件开发人员的欢迎,因为它内置了类似Linux的功能。
虽然我在GNU\Linux环境中做了大部分的量化交易的开发工作。但是我个人还是倾向于使用MacBook Air编写Python,并且已经有些年头了。
1、有利于量化交易的优点?
它的优势主要在于它有一个舒适的GUI和强大的CLI,这一点上它类似于Linux。因此,使用直接虚拟环境方法或与预编译工具包(如Anaconda)一起,很容易设置基于Python的量化研究环境。
它的环境下的CLI带来了Linux系统中所有脚本编写和自动化的能力,由于操作系统允许与已知的生态系统(如Microsoft Office)轻松兼容。因此对于某些用户来说,这可能是一个“值得交易”的要求。
另外,Mac系统也以极其可靠和稳定而闻名。提供一个个人轶事,我曾经持续251天没有重启我的MacBook Air。在我写这篇文章的时候,它已经运行了81天了!
2、它的缺点?
也许Mac OS X的主要缺点是,由于苹果采用面向消费者的商业模式,没有一个与量化交易模式相当的服务器环境可以轻松部署。相反,需要将模型移植到Linux服务器发行版(比如Ubuntu服务器)。
这是一个非常重要的问题,因为包和部署方法的差异可能导致灾难性的生产环境错误,从而使量化战略/投资组合失败。我个人认为这是极有可能在一个快速发展的生产环境中发生的。
因此,常见的解决方法是使用虚拟机(或Docker等工具)在几乎相同的本地设置上进行开发。然而,这就引发了这样一个问题:为什么首先要使用Mac,而不是使用Linux的本地机器!
事实上,对于一个特定的购机金额,一台Mac笔记本电脑/台式机通常不如另一家制造商(如联想)的同类机器强大。因此,你要为苹果的“品牌”付出比获得同样的计算能力更多的金钱代价。
对于基于深度学习的GPU计算的特定用例,Mac可能很难尝试和配置。从零开始构建一台台式机并为此目的在上面安装Linux通常要简单得多。
三、GNU\Linux
微软的Windows有一个垂直集成的概念,所有组件,快速易用性,图形界面和抽象的复杂性都是围绕以用户为中心。因此对于几乎所有的日常用例来说,这是一个完美的方法,这也是Windows和微软在历史上取得如此巨大成功的主要原因。
Linux生态系统的结构相当不同。它的原理是基于许多不同组件的分层交互,使用开放和免费可用的代码、图形界面和命令行界面的混合模式,这样使得用户获得使用脚本执行功能强大、复杂的操作的能力。此外,还有多个Linux发行版,它们都以不同的方式混合和匹配软件组件。这对于新手来说是非常混乱的,因为他们大多习惯于Windows或Mac OS X的“一刀切”包打天下的方式。
前面提到的Ubuntu最初是在另外一个强大的Linux发行版Debian的基础上构建起来的,而且经过多年的发展,Ubuntu已经变得更容易安装和试用。它已经发展成为为基本的文字处理、电子表格和一般的“办公室”任务提供几乎“开箱即用”的解决方案。这使得从Windows或Mac过渡到正常桌面使用更加容易。
1、有利于量化交易的优点?
Linux的主要优势在于它的CLI功能。它拥有一个非常强大的CLI和SHELL脚本引擎,允许复杂的流程自动化,包括数据管理、回测引擎开发、代理交互和一般研究能力。如果你想用先进的机器学习和深度学习库在定量金融建模的前沿进行研究,特别是对于深度学习,几乎整个研究生态都是使用TensorFlow和PyTorch在Python中进行的,这两种方法都有非常重要的安装需求。事实上,据说,这些库很难在Windows上使用GPU,因此Linux是唯一现实的选择。使用Linux,可以非常直接地为量化交易模型部署过程提供复杂的软件开发覆盖。在Linux/CLI环境中,版本控制和持续集成的所有功能都很容易获得。
因此,绝大多数顶级量化对冲基金几乎只使用Linux和定制开发环境进行研发,这就并非偶然。对于那些希望进行大量定量或基于机器学习和深度学习的交易研究的人,我强烈推荐使用Ubuntu Linux作为您的操作系统。
2、它的缺点?
使用Ubuntu/Linux最大的问题是,大部分功能都是通过大量使用命令行界面和脚本来实现的。这些技能可以相对快速地学会,但真正的掌握可能需要数年的时间。Linux有一种“权宜之计”的理念,这可能非常有趣,也可能非常烦人,这取决于您的目标。除此之外,Linux在出现错误时也不太友好。机器学习和深度学习在定量交易研究中依赖于一些前沿的库,比如与GPU交互的TensorFlow/PyTorch。因此,安装驱动程序、库和其他工具可能会导致问题。对于新手来说,这样的问题很难处理,因为错误消息相对来说是不可理解的。这对于那些习惯了Windows和Mac的人来说是非常令人沮丧的。Linux对用户/管理权限有一个更为明确的方法,这通常会阻碍那些习惯于在Windows/Mac OS X上管理权限的新手。还有另一个混乱的来源是软件安装包依赖关系管理,其中某些包(特别是Python库)可以依赖于安装的必要系统包并且正确配置。安装过程中可能会出现模糊的错误消息,需要有一定程度的经验才能进行调试。
结论:Windows和Mac OS X非常适合大多数基于图形用户界面的定量交易研究。然而,它们在很大程度上不适合在技术前沿进行基于深度学习和机器学习的量化研究。Linux是实现大量定量深度学习和机器学习的研究工作的唯一可行方法,而且一旦获得命令行的专业知识,它就非常强大。但是,它不能处理由于权限或依赖关系问题而导致的错误。此外,混合组件的理念可能会让那些习惯于包打天下的计算机操作系统的人感到困惑。