上一篇总结了一些入门的知识内容,本文结合个人经验,总结编程软件方面的内容,对各种软件在量化上的应用做一个对比,供参考。首先我的观点是,没有最好的软件,只有最适用的领域,先明确自己想做的是什么,再选择最合适的软件。这不是一篇广告文,也不是百度复制粘贴的结果。
我个人来说,最开始是大二做数学建模开始学matlab,不过现在来看其实建模用python也挺好,不明白为什么当时所有的人都会推荐matlab,可能已经是一种传统了吧。之后大三上统计课学习了R,上计量课学习了stata,之后大四研究生实习又学了python,vba。整体就是这样,接下来分软件说说自己的体会。
MATLAB
MATLAB全称matrix laboratory,特性也跟名字一样,对矩阵的处理功能非常强大,对不能装到矩阵里的元素比较吃力,当然也可以是我菜。
先说优点,量化或者数据分析来说,正如前面说的,matlab对矩阵的支持非常强大,二维以及更高维的矩阵,虽然python,r里面也有矩阵这样的数据类型,但感觉没有matlab的好用,比如python里的矩阵,刚开始学经常会被矩阵里的中括号搞的很晕,二维或者以上的矩阵,每个元素都会带一个[],matlab看多了用这个会有点不习惯,比如下面这些。
相比较来说,matlab的矩阵就非常简洁了,至于支持矩阵运算和向量化的函数,这个各个软件基本都差不多。
缺点来说,matlab对字符串的支持不是很方便,尤其是做量化很多时间都要考虑到日期,股票代码等等文本数据,矩阵里只能输入数值形式的,字符串只能放到cell,struct,或者fints里面,但这些的运算操作就没有矩阵那么方便了。一般都会用cell2mat,fts2mat之类的函数先转成矩阵再处理。
此外,老版本的matlab没有带标签的数据格式,类似python,r里dataframe这种,用矩阵的话,需要自己记住每一列代表什么含义,这种情况下自己写还好,但看别人的代码会非常痛苦。 新版本的里面有table格式可以解决这个问题,但碰到的大部分用matlab的人都还是习惯用原来的那些数据类型。
还有,matlab中各种机器学习算法没有python,r那么全,如果是做这方面的话肯定不会选matlab。
最后,matlab不是免费的,虽然个人可以用破解的,但企业用破解的还是有风险,而且太大了,装个python才几百M,matlab几G。
python
python应该是目前在量化/数据领域最广泛应用的软件了,之前实习也基本是用python,不论是数值还是文本数据,都能很好处理,而且也有各种算法模块可以直接调用,省去了自己编写的麻烦,语言也很简洁。
所以如果是工作中用的话,最建议学的还是python,只要会用python里的numpy,pandas,scipy,matplotlib,sklearn,一般的问题都能处理了。
但python也有他不适合的地方,python在量化上比较适合用在数据处理和回测上,但如果要做一些其他的就会存在一些问题,后面说sas的时候会举一个例子。
R
R经常会被用来跟python做对比,我自己用下来的感觉是,量化/数据上能用python做到的,r都有类似的模块可以做到,非常同质。之前刷kaggle也是用R刷的,各种机器学习算法也都有,没什么影响。
会有一些很细节的地方,可能r里面有但是python里面没有,比如copula函数相关的,python里面只有一两个模块,而且功能非常简单,但r里面有若干个模块可以调用,而且有很详细的说明文档,所以如果做这块不想自己写的话,用r会好一些。
不过去实习下来感觉用R的非常少,学校里老师上课写论文倒是用R多一些,所以可能R更学院派一些。而且r跟其他语言交互一定没有python方便,这也使得r的性价比低了不少。
SAS
SAS也是大三上统计课的时候学过,但这个我学的很粗浅了,非常不熟练,但印象非常深刻,因为实习时候碰到的一个具体问题。
SAS也是各种算法模块都有,这一点跟上跟python,r不会差多少,但sas的代码写法跟其他软件不太一样,用多了python,r去写那个还是感觉怪怪的。sas可以对一个命令逐行去运行,不需要自己加循环,可以少写一点代码。SAS有一些函数的默认跟其他软件不太一致,比如merge函数,其他软件一般是默认内连接,只保留匹配到的,但sas默认是外连接的。
SAS有一个非常好的特性是提取数据库里的数据,create table生成的数据是存在硬盘里的,而python,r等等其他软件提到的数据都是存在内存里的,这样就没法用python和r提太多量的数据出来,而用sas甚至可以直接把全量数据提出来用,这样的特性在一些时候会非常有优势,比如在指数编制时候,python,r就有些废了,成分股跟全量股票匹配再跟分红配股股权分置等等这些做匹配的话,用python没法一步到位,内存会爆掉,只能一期一期循环,但是用sas就很方便了,直接create table然后用sql语句匹配就可以了。
而且因为数据库中是可以通过between语句进行时间点和时间范围的匹配的,SAScreate table之后也可以,比如A表里每行是具体的年月日,B表里每行是起止时间段,这两个表是可以根据起止时间段匹配的,但是python的pandas包以及R里类似的包里没有这种操作,如果要实现点跟范围的匹配,只能循环。这也是其他软件不及sas的一点。总结起来SAS优点在于大数据和各种需要跟数据库交互的操作。
SAS缺点也很明显,非常大,十多G,很占空间,启动慢,而且还是收费的,破解很麻烦,所以选择这个做量化回测的应该很少了,做风控数据还有指数编制的挺多。
VBA
VBA是比较特殊的一门语言,内嵌在OFFICE中,是VB的简化版,不仅仅是针对EXCEL了,WORD,PPT里都可以用,有时候也叫宏,基本是一样的,只不过VBA是码的,宏是录的。
VBA最为人诟病的地方是他的编译器实在是太垃圾了,而且还没有其他插件可以支持,只能用官方的,长成下面这个样子,excel/word里按alt F11可以打开。
看上去跟常见的编译截面都差不多,有文件窗口、变量窗口、编译窗口,历史记录也是有的,但真的去写一两次就知道有多坑了,debug非常不方便,报错提示你可能根本不知道他在说什么,不会像其他软件那样提示的很具体。
所以我一般能录就录,能不写就不写,录的逻辑是,你可以在excel把你想通过代码实现的功能操作一遍,编译器里会自动生成代码,直接运行的话效果跟操作时一模一样的,再稍微改一改就可以用了。但这种方法比较有局限性,他仅限于你的操作时能在当前的excel里能内完成的,比如画个图,调个格式,做个数透什么的,但如果你要把一个文件夹下几千个excel并到一起执行一些操作,这就只能忍受垃圾编译器慢慢写了。
VBA最强大的地方在于跟OFFICE的交互,进而实现批量和自动化,这个是前面几种语言比不了的,比如你可以用python/r做统计分析把数据输出到excel里,然后再用vba作图/算各种统计量最后出一份报告或者做一份模板,整个流程最终可以实现自动化。
可以通过vba把excel的一张表视为数据库中的表,用select语句进行操作,如果数据量很大的话,上百万,直接操作分分钟卡死,用vba会很快。
个人理解,excel中写vba尽量减少激活各个sheet单元格,跳来跳去,有什么东西可以直接往里写,这样会快一些。word里难度在于定位,excel因为是矩阵,有行列标好一些,word一种可以先把整个文档都画上无色的表格,然后表格内进行定位会容易一些,还有一种是控制光标的移动,设定移动单位,慢慢调。
STATA
STATA和EVIEWS是两个功能非常类似的软件,计量上用的比较多,我当时选择了stata,没有学EVIEWS,整体来说,都是计量软件,STATA对面板数据支持比较多,EVIEWS对时间序列支持更好,STATA需要码代码,EVIEWS可以码代码,也可以用鼠标点点点。
量化/数据上偶尔也会用到,比如做一做协整之类的检验,回归等等,但必要性不是特别强,pyhon也可以完成。
SQL
如果你说SQL不算编程语言,我也赞成。
SQL是取数据必须用到的语言,所以这个必须看一看,基本上会SELECT,WITH语句就可以了。建库,写入等等的操作,实习生基本上是不会有的,所以除非你打算用自己的电脑建个库,也不用太关注,用到的地方很少。
总结
综上,观点很明确,如果你一定要学一门语言,个人感觉学python性价比最高,一方面基本上你所有需要的操作用python都能搞定,另一方面,python跟r很类似,python的numpy跟matlab逻辑差不多,会这一个以后需要学别的也能很快上手。
如果你一定要学两门语言,或者说虽然不做量化/数据,但是我还是想学一门,我建议学VBA,会让你的OFFICE非常溜。搞个下拉菜单,事件什么的,更会让别人对你刮目相看。
当然以上的并不全面,如果你是做高频方面的,可能还需要学C ,如果是做数据可视化的,多半还需要Tableau。但不管怎么样,有空的时候还是先学一点比较好,临时抱佛脚这种事情,绝对不适合零编程基础的人。