python计算运动会某个参赛选手的得分。数据保存在文件中_量化交易中的编程语言和数据库...

本文探讨了量化交易中不同编程语言的选择,如Python、Matlab和R,以及新语言Julia的崛起。同时,文章强调了数据库在保存数据中的重要性,推荐了InfluxDB作为时间序列数据库的选项,强调了数据库对于高效查找和处理高频数据的优势。
摘要由CSDN通过智能技术生成

最近出现了一则新闻,说美国著名的数理分析软件Matlab不给中国的两所高校授权。当然,自己用是可以的,但不能用来发论文。消息一出,业界一片哗然。我们来谈谈量化交易用到的一些语言。

一、分析语言

记得在国内做量化交易有一个说法,2015年以前的用Matlab,2015年以后的用Python,或者说大叔用Matlab,小鲜肉用Python。在中国做量化交易有一个好处,就是使用Matlab不需要版权,这是低版权优势。由于这些软件基本上是自己用,因此也不会被告。

北美知名华人量化网红Ernest P. Chan是Matlab的重磅鼓吹者,他写了好几本关于量化交易的书,比如《Quantitative Trading》《Algorithmic Trading》《Machine Trading》等,反正你能想到的词他都写过,都是用Matlab写的。他支持Matlab的理由包括:图形化界面调试方便、分别购买ToolBox调试方便、运行速度还挺快。当然,这些都是有着极强偏见的,比如对比的时候在Matlab用向量化,在R就用循环,咋比?要不咱们在Matlab用循环在R用Rcpp试试?

另外一个非常热门的语言是Python,它出名的原因在于它是免费的,而且处理复杂的数据结构方便,比如自然语言需要。现在很多深度学习模型在自然语言里面应用,很多模型都是Python写的,因此人们自然也用习惯了。记得吴恩达之前的机器学习课程是用Matlab的,现在都改成Python了,可见它的强大。

还有一个选择是R,这个在美国统计界还是挺流行的,但在国内挺小众。记得之前我想使用一个函数计算一个响亮的滚动窗口最大最小值,用Python非常块,但如果用R,无论是各种roll的函数都很慢。后来在一个粉丝的协助下我们仔细研读了Python的numpy对应的底层的程序,那是C语言写的,于是我把源程序复制过来,写成R可以调用的那种C语言程序,然后直接调用,确实可以比R自带的提高数十倍,跟Python的numpy.maximum.accumulate速度相近。早期买了我R语言课程的同学都有,当时发现R自带的实在太慢了。

现在又有了一个新的语言Julia,它的好处是自带编译功能,既有Matlab/Python/R的编写方便,又有C++等编译语言的运行速度,所以国内目前有不少量化私募用Julia取代Python。一般同样功能的程序,可以比Python快20倍。不过个人观点认为,这些都是给不熟悉C++的人准备的,如果熟悉C++,其实没必要。

在数据调用方面,很多人会使用各个语言自己的二进制数据,例如Matlab的mat文件,python的pkl文件,R的RData文件等。但其实这些都不大方便。试想一下,如果一个量化团队,每个人习惯用不同的语言,难道数据要保存这么多份,这个不现实。因此,一般而言,数据最好用数据库保存。

二、数据库语言

那么通常有什么合适的数据库呢?正常而言,金融行情数据是时间序列,应该用时间序列数据库。但市面上的时间序列数据库很多要收钱,如果不给钱,功能又很有限。至于MongoDB、levelDB、Redis等,各有特点,但其实都不是时间序列数据库。说了这么多,如果是个人单机版,建议用InfluxDB会比较好,因为它没有内存使用的限制,而且无论Python还是R都有对应的接口。

InfluDB上手比较简单,从官网下载了软件之后,在本低运行,就会默认在http://localhost:8086地址中,一般python在localhost:8088,所以不会冲突。之后就可以在python中进行数据库的操作,例如把历史数据从csv文件导入到influxDB中,以后调用起来就方便了。

一般来说,时间序列数据库切忌频繁插入和删除,数据一旦写入就不要修改,要增加就从结尾处增加,比如每天有新的数据进来都从结尾处增加。如果是多人合作,需要云服务器,这是需要收钱的,但我个人主张也与做量化,在本地计算机就行,没必要用云服务器的。目前我本人依然是采用原始的二进制格式保存数据,未来转成数据库吧。

数据库的一个好处体现在查找方面,毕竟数据库的key是按一定树型结构保存的。比如我们要找某个时间点的数据,有了数据库就可以方便查找。另外数据库自带一定的serialization功能,自己用C++来写还得考虑一些复杂的数据结构如何进行serialization。因此,如果是超极高频的数据,raw data不是很规整,比如有时更新更新了3个价位的挂单,有时更新了5个价位;有时是成交信息,有时是挂单信息,数据都是json格式,那么用数据库保存是比较好的,key可以是timestamp,这样查找方便。比如数字货币的raw data可能一天一个品种就有5个G的数据,如果depth和trade都是continuous的话估计冲到10个G,这时候要进行任何时间点位的查找,顺序结构是不大现实的,C++也会很慢,最好用数据结构了。

三、总结

很多人可能会忽略编程语言和数据库的影响,特别是数据量比较小的情况下。但其实很多时候这些工具准备好了对工作效率的提高还是有帮助的,虽然一开始熟悉的时候会花比较多的时间,但久而久之还是值得的。

有兴趣的朋友可以加微信babyquant或关注微信公众号babyquantFinance,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值