量化策略研究与开发用哪种语言好?

想要从事量化策略研究与交易的初学者碰到的第一个问题就是编译语言工具的选择。

对于没有编程基础的新手,选择任何一个语言进行策略开发,都有不小的学习成本。

更重要的是,选择了一门语言,接下来开发环境、数据接口与平台、同业之间的交流、遇到问题后的支持、甚至是团队成员的招聘,都跟着被“套牢”。所以从一开始就必须慎重对待。

量化交易员面临的大致选择有:C/C++/Java/C#/R/Matlab/Excel等等。

从应用场景而言,R\Matlab适合于策略研究,Python,C++、C#适合用于策略开发。

从开发难度而言,Python和Matlab都比较容易,Java和C++麻烦一些。

从运行速度而言,C++、Java要快于Matlab和Python,所以追求执行效率的交易团队更多会使用C++进行策略的开发和交易。

另外,从量化资源而言,Python资源较多,可以找到很多开源框架,且 Python是免费的。

所以,Python对于初学者会更友好。

各个语言的层级,图源知乎

性能:汇编>系统级语言>应用级语言>脚本级语言

可读性:脚本级语言>应用级语言>系统级语言>汇编

我们从以下几个方面考虑简单做个对比。

1、学习成本

C、C++的特点是速度最快但要想用好,必须对计算机底层架构、编译器等等有较好的理解,这是非计算机专业的人很难做到的。

一般来讲,量化交易中除了最终在生产环境下实现交易的程序,还有许多工作要投入到策略模型的开发、验证等工作中。

对于一个交易策略的想法,如果全部都采用C++,所耗费的开发时间和精力都是不划算的。而且,并不是每个人都能写C++,可能许多是纯金融或者没有程序开发的经验,那么要求他们用C++去对自己的策略进行验证就有些挑战。

Java受语言特征和开发环境限制,开发速度比较慢,代码量比较大,故不合适。

Excel面对GB级别的数据运行效率低,也不适用于处理数据样本较大的量化交易。

Python、R和Matlab学起来都简单,上手也快,可以说是“一周学会编程”。

R和Matlab(商业化产品,价格不太可爱)一般更适合做数据处理、运算,Python可以做的事情更多些,比如写个爬虫爬点数据,写个网页什么的,也可以面对处理实时行情的复杂情况。

Python有许多库可以用,只有你找不到的,没有你想不到,和量化这块结合比较紧密的有:

  • Numpy&Scipy:科学计算库,矩阵计算;
  • Pandas:金融数据分析神器,原AQR资本员工写的一个库,处理时间序列的标配;
  • pandas_datareader:国外股票宏观数据接口;
  • Matplotlib:画图库;
  • scikit-learn:机器学习库,包括一些数据预处理;
  • statsmodels:统计分析模块,线性回归;
  • TuShare:免费、开源的python财经数据接口包;
  • Zipline:回测系统;
  • TaLib:技术指标库;

2、易上手、便捷性

开始进行量化分析阶段,哪个语言用起来碰到问题最少,最方便省事?

用历史数据的回测举例。假设我们有2014年所有股票的全年日线,现在我们想看看600001的全年前10个最高股价出现在什么时候。

Python世界有个强大的pandas库,所以一句话就解决问题:

dailybar[dailybar 
[‘code’]==‘600001’].sort_values([‘close’].head(10)

R/Mathlab等科学语言也可以做到。

C/C++没有完备的第三方库。如果为了做大量的计算,要自己实现、维护、优化相应的底层算法,是一件很需要花费时间编译的事情。

3、实战效率

现在我们更进一步,要做实时行情分析和决策。

以A股的入门级L1数据为例,每3秒要确保处理完3000条快照数据,并完成相应的计算甚至下单。

这样的场景,C和C++可以快速响应。所以,行情软件比如大智慧、同花顺等客户端都是使用高效率的语言开发的,大部分的交易系统也是基于C和C++研发的。

Python的速度也可以满足一般的实时行情分析的需求,也有越来越多的平台接口Python化,只是如果追求低延时和高稳定,Python作为脚本语言并不是最佳的选择 。

总的来说 

Python可以更快地验证策略,C++可以更快的执行你的策略。所以,越来越多的交易机构趋向于Python和C++的组合。

交易系统的设计上也需要充分考虑到不同交易团队的编译语言,比如掘金量化在策略与交易系统的交互上,可以支持使用不同开发语言的团队使用。

语言就是一种工具,没有最好的语言,只有最合适的语言,策略好不好最重要的还是交易模型思维的可行性。

以上,希望可以帮助到大家。

参考资料:

作者:汪彦冰
https://www.zhihu.com/question/28378292/answer/157062208

作者:李伟振
https://www.zhihu.com/question/22211032/answer/137290158

作者:窦福成
链接:https://zhuanlan.zhihu.com/p/22113760

作者:find goo
链接:https://www.zhihu.com/question/25404359/answer/154094045

猜你喜欢

转载自blog.csdn.net/weixin_42219751/article/details/103381735