之前经常有童鞋在后台/群里问量化如何入门这个问题,这种问题一般都是没有人回答的,因为这是一个到处都可以找得到答案的问题,所以也推荐大家
这里结合个人的实际情况,从在校生的角度做一些总结,作为整个系列的第一篇,不一定全面,仅供参考。文章首发于DataFountain,这里稍作整理。
作为在校生,进入量化行业的途径一般是首先自己在学校能掌握一定的量化基础,然后去企业找实习,最终通过实习/秋招留用。实习一般是去卖方研究所金工组、买方私募公募资管自营等各种机构,这里不介绍,可百度。
关于量化基础,实际上可以总结为三方面的能力:金融背景、数学功底和编程能力,编程能力是门槛,编程不好,什么都白谈。编程好的基础上,还需要有很强的数理逻辑能力以及金融分析能力,这些是可以后期通过学习和实践获得的。
当然除了这些,还有一个很重要的隐形因素——学校,学校会形成很大优势/阻碍,但很多事情是高考时候就已经注定了的,没有办法改变,能做的只是做好当下,所以决定做决定之前,先认真衡量一下自己的背景,要么换方向,要么努力拼搏。
接下来分别从量化、数学、金融三个角度说明。
编程方面来说,因为量化也是一个很大的领域,不同方向有着不同的编程求,所以也不能一概而论,但最最基本的,需要在matlab,python,r里面至少会一门,会用sql取数据,会一点vba更棒。如果要做高频方面,还需要会c++,如果做指数,如果会sas可能会有很大优势,所以先把最基本的掌握了吧(关于各种软件的比较,会在下一篇说明)。由于我用的比较多的是python,所以这里以python为例进行说明。
获取数据的能力
做量化用到的数据一般包括二级市场的各种数据、宏观经济的各种数据以及一些特殊需求的网页数据,因此需要有通过python获取数据的能力。
二级市场和宏观经济的各种数据,已经有一些企业整理的非常好,所以会用SQL从数据库里取数据库,或者通过API接口获取就行,比如WindPy,rqdatac,tushare,目前都有python接口,网上也找得到教程,学一学就可以了。而一些特殊需求的网站数据,比如各种网站的留言、公告,这些就需要自己爬了。
因此这方面需要的东西整理如下:
– SQL:,SQL比较简单,主需要会SELECT查询,再回一点with语句就ok了。可以看一本小册子:SQL必知必会,半小时就能翻完。
– windPY,tushare,rqalphac:tushare是免费的,只要装了python就能用,可以去tushare官网看看教程,windPY,rqalphac等等大多是收费的,只能去实习才有机会用,当然有的高校买了wind,也可以申请学校的用一用。
– 爬虫,爬虫是不论做数据还是做量化都非常重要的能力,当然也不需要会太多,不用像爬虫工程师那么专业,要爬的最多是一些网站公告,评论之类的。学习的话可以先从python的request开始,然后看selenium,基本就够用了,最后有时间也可以看看scrapy。
清洗数据的能力
事实上,在我实习过程中,绝大部分时间是在清洗数据,处理数据,把数据整理成各种各样的格式,而建各种高大上模型的时间很少,所以这部分能力是非常重要的。同时,数据清洗是非常简单但也非常难的一个内容,简单之处在于,只要会一点python的人都能做,但可能写出来代码效率很低,难在于写出高效的代码。
所以这部分除了自己学习以外,要多去看别人的代码,看看同一个问题不同人的解决方式,会有很大收获。
接触到的数据一般包括数值、文本、日期这三种类型,因此这部分python里需要掌握的内容包括
– 缺失值处理方法:这部分一方面要知道有哪些处理缺失值的方法,另一方面要知道怎么用python实现这些方法,比如最简单的就是dropna()直接删掉缺失值,要填补的话,有很多方法,比如用均值众数填补,或者回归填补、多重插补等等。
– 异常值处理:异常值处理相对简单,一般是winsorize截尾的方法,python中可以用np.percentile完成。
– 数据形式变换:如何把数据变成自己想要的形式,这是需要在不断实践中才能慢慢融会贯通的,这里给出一些常用的python命令,通过pd.wide_to_long,pd.long_to_wide实现长宽面板转换,pivot_table实现类似excel数据透视表的操作,reshape改变数据的维数,merge,concat实现数据的拼接,等等。
– numpy,pandas包:这是两个最重要的包,实际上前面提到的这些东西,绝大部分是可以通过这两个包实现的。
– 日期处理:python里有很多日期时间处理的磨矿,time、datetime,pd.Series.dt等等。
– 字符串处理:正则表达式是必须的,除此外也可以看点jieba之类的东西。
数据建模能力
数据建模能力覆盖面非常广,因为模型很多,金融模型、统计模型、机器学习模型等等,都有可能应用在量化中,但作为初学者,建议不要好高骛远,上来就学深度学习啥的,会了也不一定用得到,从最基本的回归开始比较好,可以从以下几个角度进行学习。
– 回归:用python实现OLS,WLS,Logistic、Ridge,Lasso,这些python中都有模块可以实现,要熟悉具体怎么操作。
优化:线性规划、非线性规划,可以通过scipy中的optimize函数实现。
– 多元统计模型:主要是聚类分析(kmeans,层次聚类)、判别分析、PCA、因子分析这些用的比较多。
– 机器学习模型:传统的机器学习模型,比如神经网络、SVM、randomforest这些需要了解,但不是必须,如果有一定基础了,可以看看深度学习方面的,但这种只在某些特定的量化方向上涉及。
数据可视化能力
不论是做数据分析还是量化,可视化都是非常重要的,不过量化方向可视化要求相对低一些,毕竟逻辑和结果更重要。
大部分可视化都可以通过exel+vba实现,这里提一些python里面需要会的。
– matplotlib、seaborn:各种散点图折线图柱状图饼图这都是基本操作了,热力图新颖一些,可以用来展示变量的相关性等等,此外还有双轴图、对数坐标图这些都需要会。
– k线图:python画k线图的操作可以学很久,python里面画k线的包不是非常多,而且,处理x轴的日期不是非常容易,因为可以直接用的函数基本都是对应的自然日,但k线只画交易日,虽然交易日是连续的,但画出来会导致k线之间间隔不一样。
编程部分大概如上,python部分是这样,其他语言可以借鉴。除此外,vba是比较特殊的语言,跟excel和word交互上,其他语言都比不了,所以最好学会用。
数学方面,主要是逻辑思维能力要强,然后会一些常用的模型理论就可以了,如果只会用python实现,不了解理论,就是一个调包侠,也没啥用。当然不会很多也没关系,很多私募笔试面试就考一些的组合排列概率问题,只要能说服别人你的学习能力很强,也会给你学习的机会。
这里列出一些需要掌握的方面,跟上面也是对应的。
– 高数/数学分析、线代/高代、概率论、数理统计:本科大二以上,这些能力基本都是有的,矩阵一定要熟,比如均值方差模型和风险平价这些模型的优化部分会有矩阵的求导以及各种转置相乘。
– 常用的统计模型、机器学习模型:见编程部分
– 微分方程:常微分、偏微分方程及数值解,如果要做衍生品,这些是基本功,但权益的话,不一定用得到,有时候看宏观、计量方面的文献会遇到。
– 数值分析:各种非线性方程的数值解法、蒙特卡洛模拟的理论以及实现,用蒙特卡洛方法模拟股价波动是金融工程课上的基本操作,虽然实际我还没用过。
金融方面在一开始不会是很大的问题,但当编程非常熟练之后,就需要一些金融经济方面的直觉,因为量化非常注重逻辑,只有逻辑上说得通,才能说服别人,才能期待好的结果能一直持续,否则你都不知道策略什么时候会因为什么样的原因失效了,不可解释的黑箱没什么用。
这方面需要会的东西包括:
– 宏微观经济学:了解刻画宏观经济运行的各种经济指标的含义,以及公布的时间点,频率等等,这在量化建模中非常重要,现在有很多研究所都在从宏观基本面做量化择时和经济周期预测,至于课本里学的,本科学的有时候还有用,研究生学的,我都不知道我学了些啥。
– 证券投资学:证券投资学中给了很多常用的量价指标,当然这些也可以在别的地方去看,python的talib模块中基本都能实现,不用自己动手写。
– 会计:估值、盈利、成长等等各种因子都是基于财务指标定义的,有助于理解和挖掘新因子。
– 金融工程:金融工程是比较泛的说法,具体来说,可以看期权、期货及其衍生品那本书,主要掌握各种金融产品的特点及定价方法,当然如果是做权益量化,BSM也用不到。
– 常用金融模型:量化常用的金融模型需要掌握,比如Fama三因子模型,CAPM、APT定价模型,Barra多因子模型,BSM定价模型、时间序列模型等等。
目前能想到的有这么多,肯定是不全的,仅供参考。实际也不需要面面俱到,我做第一份量化实习的时候,可能就只会python编程,其他都随缘。至于推荐书这种问题,更适合使用前面图片中的方法,知识点都有了,找书还不容易?
总之,希望本文能给你一点小小的帮助,奋斗吧少年!