添加助教微信(jwzhujiao2
领取<30节量化实战课>优惠券
加入量化训练营跑通量化交易

大家好,欢迎来到第2集,我是用Python的交易员。在第1集的内容中,我们主要介绍了当前国内量化交易软件领域的两大分类——商业软件和开源软件,这些不同的交易软件在编程方面的取舍有很大的区别,这一集我们就来介绍这些常见的编程语言,以及每个编程语言自身的特点。

针对这一集的内容我也是做了张表,大家可以看到一共列出了5种不同的语言,分别是C++、C#/JAVA、Matlab/R、Scripting Language(脚本语言)和Python。我对它们的评分又主要针对4项,分别是学习难度、功能范围、可扩展性和运行速度,每一项上每一个语言都有一个得分,得分取在1-5之间,得分越高,就意味着在这项上面它越好,比如学习难度上拿5分就意味着非常容易学,1分就意味着学的时候需要花很长的时间、很大的力气;在运行速度方面就意味着它的运行速度非常快,1分就意味着相对是最慢的一种语言。

在这边我需要强调一下,对于各种编程语言的打分,主要是针对量化交易领域的应用,同时带有我个人的主观成分。也欢迎在后面的评论区提出你的观点,我们可以有一定的讨论。接下来,我们就开始一个个地介绍这些编程语言:

02分04秒

C++

第一个,C++语言,可能是做量化的朋友听说最多的语言,它最大的特点就是基于C语言的基础上做了一个面相对象的扩展,所以它会足够的接近底层,用C++语言你几乎可以实现所有你想实现的功能。如果从计算机上编程的角度来看,可以用它写一个操作系统、一个图形界面(GUI)、游戏里的剧情逻辑等。对应到量化交易系统里面,可以实现最底层的交易系统的开发,比如CDP(客户数据平台)提供的API(应用程序编程),原生的API都是C++的;第二可以实现图形界面、实现内部的OMS(订单管理系统),也可以用C++写策略和上层的策略管理工具……可以说,几乎是一应俱全。

但是这么强大的语言有个最大的缺点就是学习难度也是非常高的。C++语言里很多头疼的指针和模板,还有对于新手最容易出现的错误就是内存泄露等等都是噩梦级的学习难点。

对于扩展性和运行速度方面,C++的运行速度是当之无愧的第一名,最快,因为经最接近计算机的底层。扩展性方面可以很方便地跟其它语言进行对接。但是,因为它本身的学习难度比较高,所以在对接其它语言时需要付出比较多的精力。

03分56秒

C#/JAVA

接下来是C#/JAVA,我将它们放在一起的最主要原因是它们都是在虚拟机上运行的静态语言。将其与C++进行比较,它们主要提供的一个功能就是自动内存管理,也就是用户再也不用担心C++最可怕的噩梦内存泄露了,所以在语法的学习难度上它们也相对比C++更加容易一些。

但是功能方面的一个缺陷就是用C#/JAVA无法实现交易系统底层的优化。可能有人说用JAVA CORE把它提升到C++的水平,但如果能写JAVA CORE的话,本质上在很多地方已经用到C++的知识了。

在扩展性方面,C#/JAVA相对C++会更弱一些,因为它们的扩展同样是需要经过C这个桥梁,而这两种语言本身是运行在虚拟机上的,所以在写扩展模块的时候就相当于需要多穿过一层墙才可以实现。

在运行速度方面,由于它们的虚拟机都带有所谓运行时编译JIT的功能,所以速度仅次于C++。

05分24秒

Matlab/R

再下面的语言是Matlab/R。这两种语言的主要定位是数据分析的语言,它们的特点就是在语法上为矩阵运算等科学运算这一类的操作做了很多专门的设计,天生就支持向量化的运算,而且它的语法运算比起C++这样的底层语言更加接近于数学表达公式,在学的时候也就会容易一些。

但是功能应用范围比较有限,一般仅限于数据分析和策略回测这两块,对于交易系统开发、实盘交易算法的开发,一般情况下这两种语言都比较无能为力。硬要用它们去做也不是不可能,但得出的最终产品稳定性、易用性等方面相对会差一些。

它们的扩展性相对也是比较差的,因为Matlab/R本质上也是运行在它们的独有语言的虚拟机上,但它们的虚拟机比起C#/JAVA虚拟机的应用性能差很多,最后引申出来一点就是它们的运行速度相对也是比较慢一些的。

06分56秒

Scripting Language

再下面一个是Scripting Language,首先对它做一个定义,我指的是部分商业软件所独有的编程语言,一般都是为软件专门开发的。

尽管这些语言的某些可能也具有所谓面向对象的特性,但这些语言在应用中还是主要采取脚本的形式。而在语法上面,这些脚本语言会非常地接近于我们的自然语言,也就是英语,一般对于初学者而言上手门槛是最低的。如果你初学量化,觉得其它语言的学习都有一定的难度,所以我推荐找一个这样使用脚本语言的量化交易软件来上手会更加容易一些。

而脚本语言其它的方面就比较弱了,功能范围可能仅仅能够在它特定的软件里面做策略回测和实盘运行。在扩展性方面,一般都是脚本的设计者会暴露一些API供外部的东西调用,而这些API往往都是非常有限的。而在运行速度方面,一般脚本语言都运行在它自己的虚拟机上,可能也没有经过高性能的优化,所以它的速度往往是最慢的。

08分29秒

Python

然后就到了我本人最擅长的Python语言,可能我对Python的评价会比较高,但如果大家有不同的意见也欢迎提出。

我对Python首先在学习难度方面的定位是排第二名容易学的,这也有句名言“人生苦短,我用Python。”功能范围方面,Python也可以说是仅次于C++的,一方面是因为Python本身的金融生态非常强大,很多的库都是有现成的;另外一方面是,是Python具有非常强大的面向对象的特性,几乎所有我们用C++能实现的上层应用的功能也都可以用Python来实现,但对于一些追求超高频交易的底层系统优化,Python是无能为力的。

然后相较于C#/JAVA,Python因为自身是动态语言,有交互式开发的能力,还可以应用在数据分析、策略的交互式开发等方面,而这一块C#/JAVA是比较弱一点的。

在扩展性方面,Python是当之无愧的第一名,因为它最大的特点之一就是所谓的胶水语言,除了可以广泛地对接其它的各种编辑语言外,而且扩展API的设计非常易用,对于开发者而言,在扩展开发的时候是最得心应手的。

而在速度方面,Python处于一个中游的位置,比C++、C#慢一些,比Matlab、Scripting Language快一些,主要原因是Python是一种动态语言,纯Python在运行时的速度是一般般的,处于中游这么一个水平。但是Python有一个非常强大的库叫作Cython,如果在开发过程中真的遇到了性能的瓶颈,可以用Cython把传讯热点的部分做静态化的优化,就会发现程序性能有时会非常接近用C++写出来的程序。

以上就是第2集的内容,下一集我们会着重介绍Python在量化方面的优势,以及它在量化方面整个生态圈的情况。

 

— E N D —