APP下载

基于Python语言的量化股票投资策略研究

2019-10-16吴梅

新财经 2019年15期
关键词:Python语言

[摘 要]在大数据快速发展的背景下,将程序算法与股票投资相结合是创新股票投资方式并实现投资收益率提升的关键。文章在量化投资理念的基础上,运用Python语言对A股市场的一些历史指数和个股数据进行梳理分析,针对Python量化投资项目进行初始性设计,基于Python语言制定量化股票投资策略,并对策略进行收益回测,进而提出量化股票投资的保障措施。

[关键词]Python语言;量化投资策略;BOLL指标;格雷厄姆成长股

[中图分类号]F832

1 前 言

20世纪80年代,一些投资者开始利用计算机研究金融数据,并初显成效。20世纪末,投资者把计算机技术进一步应用在金融数据分析上,进行模型设计,构建股票投资组合。这时,金融数据趋于规范化,在日渐复杂的数据分析过程中,产生了更多类型的因子和更多样化的投资策略。量化投资是借助量化金融分析方法进行资产管理,量化金融分析方法是结合金融数据、个人经验、数学模型和计算机技术的一种复杂金融建模的分析方法[1]。实现量化投资的方法多达数十种,Python、Matlab、SPSS、Eviews、Excel、SAS、R在量化界都是非常好用的工具,尤其是在数据分析方面。除Python外,其余几个工具的优势都体现在数据分析方面,而量化投资是一个系统性工程,数据分析只是其中的一部分,不是全部。根据GitHub官网统计,量化交易开源项目共145个,其中使用Python以外的技术进行开发的项目共70个,应用Python语言进行开发的多达75个。Python的开源性促使开发者开发了大量的库和模块,而这些库和模块又使很多外行人能够轻松入手,反过来又促进了Python在该领域的发展。应用Python语言爬取数据,进行数据挖掘和深度案例分析,能够使量化投资基本实现从技术分析到金融设计,实现系统性掌控。因此,采用Python驱动量化股票投资,对优化股票投资策略和规避投资风险具有十分重要的意义。

2 基于Python的股票量化投资交易程序

2.1 基于Python的股票量化投资步骤

将Python要应用到量化投资交易中,其步骤如图1所示。

第一阶段是数据收集。数据收集是很多券商机构在做的业务,有影响力的模块库有Tushare和Windpy,其中Windpy是Wind公司开发的一个开源接口。国内的金融终端一般是Wind、iFind和Choice终端,这些终端软件就是把企业和行业的数据收集到数据库,进行深度分析,并稍加整理成表格,然后上传到服务器中,方便客户进行相关的数据分析,一般情况下客户都需要付费来获得数据。

第二阶段是数据分析。NumPy用来存储和处理多维数组和大型矩阵,搭配SciPy进行计算;Pandas解决时间序列;用Matplotlib进行2D绘图从而实现数据可视化。Wind终端和Choice终端也有相关的业务在平台上销售,而该服务的购买者通常是一些尚未具备分析能力和资格的小型机构或行外人。

第三阶段是策略研究。IPython是一个Python的交互式shell,能进行变量的自动补全和缩进,支持bash shell命令,内置了一系列有用的功能和函数;Jupyter可以对数据进行清理和转换,进行数值模拟和统计建模等,是比较方便的策略研究工具;Zipline(国内公司开发的是RQalpha回测引擎)对真实交易系统的运转进行模拟,利用历史数据对投资策略进行回测检验;具体的策略便可以理解为Python代码的执行。

第四阶段是实盘交易。vn.py是基于Python的开源交易平台开发框架;easytrader也是开源模块库,比较适合个人投资者。通俗来说,狭义的量化投资的应用意义到第三阶段为止,关于第四步的实盘交易还是需要经过投资者参考过量化投资的模型后作出的决定。因为工具只是投资者进行决策的辅助,人才是真实交易的决定者。

需要说明的是,数据收集及案例中的模型,直接采用第三方平台供应的API数据源;数据分析因避免代码繁冗多杂,直接采用第三方平台的库和框架进行Python编程,其中BOLL指标案例的策略使用到了Signal框架。利用第三方平台的意义及其最终达到的回测效果与纯自建量化交易策略项目无异,也非常适合个人投资者入手。文章选取A股市场进行研究,选取样本的原因是A股市场的数据有利于简化代码量。比如,在A股市场上进行交易,1手即为100股,而在港股市场上,不同的股票1手的股数不尽相同,有的1手是交易50股,有的1手是交易200股,这样的数据可以简化很多代码量。

2.2 基于Python的股票量化投资流程

虽然Python实现股票量化交易分为4个阶段,但具体操作起来,为了更贴合实际,通常可以解析为8个流程,即获取数据、数据分析挖掘、构建信号、构建策略、回测、策略分析、模拟交易和实盘交易。如图2所示。

一是获取数据。包括获取公司新闻数据、关联数据,产业上下游、主营业务、所属行业主题等数据,基本行情数据,高频数据,股票 Level-1数据,股票Level-2数据、期货 Level-1数据等。

二是数据分析。数据分析挖掘采用传统分析方法、新兴大数据、机器学习和数据挖掘方法[2]。

三是构建信号。在构建信号前进行数据处理、标准化、去极值、中性化,基础信号的研究、分组回测、衰减、行业分布,将基础信号合成复杂信号。

四是构建策略。构建策略模板要兼容不同标的指标函数和参数的策略,适用于股票、基金、期货等金融资产,兼容日线、分钟线的策略,方便好用的策略函数,获取历史行情、历史持仓信息、调仓记录等,支持各种订单类型:止盈止损单、限价单、市价单。

五是回測测试。回测要符合历史的真实行情,并相应的进行股票分红送转、除权除息处理,股票涨跌停处理,股票停复牌处理,市场冲击,交易滑点、手续费、期货保证金交易,大单分笔成交处理等。

六是策略分析。包括策略归因、风险归因、实时监控,订单分析、成交分析、持仓分析、交易行为分析,多策略分析。

七是模拟交易。模拟交易需要接入实时行情、实时获取成交回报,篮子交易、算法交易,支持撤单处理,实时监控、实时归因分析。

八是实盘交易,即接入真实券商账户,紧紧跟随市场行情,实时进行下单,同时实时获取订单收益回报。

3 构建基于Python的量化股票投資策略

3.1  BOLL指标策略

利用BOLL指标进行模拟回测,构造一个BOLL指标买卖策略,根据个人投资者的账户情况,设置账户初始资金为10万元,策略背景与规则如下。

(1)如果收盘价上穿BOLL上轨,买入;如果收盘价下穿BOLL下轨,则开盘卖掉。

(2)回测策略时间区间设定为2018年全年,股票池为“沪深300”,参考指标为“沪深300”。

(3)资金账户初始资金10万,类型为股票账户。

(4)每次每只股票买20 000元左右,出现重复信号时不重复买入。

(5)当买入信号的股票数量比资金多时,随机挑选买入,每个交易日全仓操作。

(6)策略需导入第三方库Pandas,框架为Signal。

利用Python语言编辑策略代码并运行回测,得到BOLL指标买卖策略收益回测结果,如图3所示。

策略回测结果显示,2018年全年,沪深300指数涨幅为-25.9%,依据沪深300制定的BOLL策略收益率仅为-6.9%,BOLL指标买卖策略的模拟收益曲线较平缓,波动幅度明显小于沪深300的收益率波动幅度,收益率相对稳定,在2018年的熊市环境下,规避降低风险的效果显著。可见,构建最简单的量化交易策略仍然是可行的,大环境熊市的影响,暂时不对策略的好坏进行评价。这次对策略的可行性进行检测,策略收益率已远胜于沪深300指数。

3.2 格雷厄姆成长股内在价值投资法

以格雷厄姆的成长股内在价值投资法[3]来制定策略与BOLL指标策略不同,价值投资需要长时间的验证,因此用最近3年为宜。“价值投资之父”格雷厄姆在《聪明的投资者》中给出了一个对成长股内在价值进行估值的简单公式:

价值=当期(正常)利润×(8.5+两倍的预期年增长率)

策略将以这条公式作为交易规则,策略的背景与规则如下。

(1)价值=当期(正常)利润×(8.5 + 两倍的预期年增长率)。

(2)如果股票价格低于价值,则买入;如果股票价格高于价值,则卖出。

(3)回测策略时间选取2016年1月1日至2019年1月1日,股票池为“沪深300”,参考指标为“沪深300”。

(4)资金账户初始资金10万,类型为股票账户。

(5)仓位以每支个股的持仓权重为标准买入,每支个股持仓最高不超过10%,出现重复信号时不重复买入。

(6)当买入信号的股票数量比资金多时,随机挑选买入,每个月第1个交易日全仓进行调仓操作。

(7)用了因子库中的“EGRO”因子,5年收益增长率来代表预期年增长率。筛选出低估值,即股票市值小于其格雷厄姆估值的股票。

利用Python语言编辑策略代码并运行回测,得到格雷厄姆成长股内在价值投资法策略收益回测结果,如图4所示。

策略回测结果显示,沪深300指数三年间的基准年化收益率为-7.1%,而策略线的年化收益率是4.0%,格雷厄姆成长股价值投资法策略的模拟收益曲线较平缓,波动幅度明显小于沪深300的收益率波动幅度,收益率相对稳定,降低了部分投资风险,利用格雷厄姆的投资法制定的策略也是可行的。

综上所述,两个策略案例都证明了Python驱动的量化股票投资方案在提高收益率和规避风险方面的有效性,同时Python量化投资还可以通过回测指标分析进行个股筛选,对于个人投资者来说,是行之有效的投资工具。如果投资者能够深入研究,调整参数指标,将更会适应中国市场,获得更理想的收益。

3.3 Python驱动的数据库

从表面上看,一串代码实现了提高股票组合的收益率和模拟收益曲线,其实事情远不止这么简单,Python真正驱动的是背后庞大的数据源,这也是利用第三方平台对策略回测的原因。搭建数据库需要一整套庞大的设备,其中不乏价格高昂的服务器和硬盘,耗资巨大,普通投资者不会在这些设备方面投入资金。在量化投资领域中常用的一个词“因子”,因子就是经过人为的采集、编译并存储到数据库中的一个数据集合。不同的公司或数据库搭建者都会根据自己的偏好对因子进行命名,存储在数据库中,等到策略运行的时候再调用出来。随着量化投资的发展,股票市场中很多数据都是可以被量化的,尤其是报表指标和技术指标,这些指标被制作成两种因子:价值派指标因子和技术派指标因子。价值派指标因子系列的分支有:股指市值型因子、偿债能力型因子、收益型因子、盈利能力型因子、运营能力型因子等。技术派指标因子系列下也派生出很多的分支,比如:成交量型因子、趋势型因子、能量型因子、超买超卖型因子、均线型因子等[4]。另外,很多当初被认为不能进行量化的数据也被实现了量化,比如分析师预期型因子,还有股民热度型因子。其中股民热度型因子在其他地区的股票市场上是发展不了的,比如美股市场上的投资者就不会像A股投资者一样,在论坛上每天都讨论得热火朝天。A股投资者能对市场产生较大的影响,同时又很喜欢到股吧论坛上讨论自己看空看多,因此这些数据在A股市场上独树一帜地发展了起来,数据量足够的庞大,不少机构便把它做成了股民热度型因子。

3.4 Python对量化股票投资的影响

量化投资界的重量级人物数学家詹姆斯·西蒙斯(James Simons),创造了“用公式打败市场”的传奇。由他在1989年创办的基金成立至今已有30年时间,该基金年均35%的净回报率,远远超过了年均回报率20%左右的股神巴菲特。如果每位个人投资者都做到他的一半,也就是利用量化投资创造年均17.5%的净回报率,都很了不起了。很多传统投资者认为美国与中国的投资环境和制度不同,量化投资不一定能为投资者带来可观的收益。其实学习了量化投资的知识便会发现,只需要在Python编程的时候引入不同的因子便可以了。的确,在美股中的量化策略不适用于A股,但参数是可调的,在A股市场中制作量化策略,可以引入股民热度型因子,再设置适当的权重。如果半数以上的个人投资者能够熟练运用Python进行量化股票组合投资,不仅能避过2018年跌跌不休的熊市,做得好的更能收获可观的收益。

4 Python驱动的量化股票投资的保障措施

Python驱动的股票量化投资模型中的各指标参数的选取是关键,需要庞大的数据资料,对参数反复修正,才会获得更接近实际情况的参数。根据各种参数创建的子模型只有通过实践数据和时间的检验才是成功的。如何使模型具有普遍的可理解性,简化投资者操作使用,还需要反复验证、修正、提炼、升华与定型。

4.1 加强数据库的规范化管理

大部分投资者运用量化投资自制策略时,都是在第三方平台上创建量化交易策略的,Python编写的策略代码也存放在第三方平台处。不论是某个商业平台还是某个开源平台,这都会使投资者的数据文件面临泄露威胁等一系列数据信息安全性问题。然而,在量化投资的后期,随着资金池不断发展壮大,安全性就越来越受到重视,特别是对相关的策略代码进行保护。投资者若想规避这种数据的安全性风险,需要自掏腰包创建数据库,置办机房、服务器等,这样就会大幅度提高投资成本,需要更高的技术水平和管理水平。如果是发展到这个阶段,可以对数据及其安全性进行规范化管理了。目前加密算法也有很多,最著名的是Hash算法。Hash算法普遍应用于世界各地,同时安全性能相当高,各大互联网公司、银行、区块链等都在用。在Python中运用更是简单易上手,直接导入Hashlib模块即可,在设置访问数据库时添加Hash函数即可。

4.2 考虑策略执行结果的风险

取得的上市公司财务数据具有滞后性,对数据的修正容易造成很难察觉的微小错误,终值又很难确定,只能使用初始值进行修正分析,这种基于初始财务数据的调整修正会对量化投资策略产生影响,进而影响选股结果。另外,量化投资策略的第四个阶段是实盘交易,实盘交易时由于市场上不乏“灰犀牛”和“黑天鹅”,因此,要根据不同的市场外在因素,不断地调整策略参数,维护成本比较高[5]。

4.3 剔除量化投资的主观色彩

做量化交易的投资者必须具备很强的编程能力和数学基础,在开发策略时需要分析大量数据,不断进行回测,从而优化模型。需要投资者具备经济学知识和思维,同时对金融市场有着独特的见解作为理论支撑,而这些见解往往都是带有主观色彩的。因此,投资者在做出决策前,内心都有一个既定的主观判断脚本,在做决策时往往希望找到相关的数据支持。所以在制作量化投资决策时,应尽量剔除投资者主观因素的影响。

4.4 不断优化量化投资的算法

Python编写的代码具有“简单易上手”的特点。然而,简洁性暴露了缺点,即不严谨。不严谨的语法在应用到现实生活中的时候,往往会出现一点点小问题。没有人知道会出现什么问题,也许就是忽然某一天出现的这一点儿问题亏损了投资人的部分资金。算法上需要优化的便是速度,因为Python并不是底层技术,它是上层的解析性语言,执行起来比较慢。如果某只小市值股票的庄家A发现有个投资者B在利用量化投资做自家的股票,这个庄家A便利用他的资金优势和硬件优势,开启机械式挂单,直接断崖式拉低股价,以极小的速度差抢在B的前面下了卖单。由于B的量化程序的速度不够快,所以股票未卖出,而价格又达到了策略设置好的割肉价格。于是,B的量化程序便无奈地挂出更低的卖价挂单,此时庄家便可以挂买单收获筹码了。解决这两个问题有效的途径就是算法上的优化,因此,投资者需要终身学习,学习一些相关的编程语言,比如汇编语言:C语言。利用Python进行量化程序的大部分策略定制工作,同时利用C语言进行执行决策,这样,双剑合璧,更能高效快速地运行,以弥补Python在算法上的缺点。

5 结 论

股票投资是有风险的,量化并不能降低风险,但却能通过数学的方式体现出来。通过研究,文章首先阐明了目前股市环境中运用量化投资的意义。其次,论述了基于Python的股票量化投资交易的程序。再次,构建了基于Python的量化股票投资策略,其中,设计的两个策略分别是根据经典的BOLL指标和格雷厄姆的成长股选股法进行设计的,虽然进行了策略回测,但因为未来的市场环境具有不确定性,得出的结论仍需要通过后续的实盘操作来检验。最后,根据实际情况和未来可能发生的操作风险提出了运用Python量化股票投资的保障措施,包括加强数据库的规范化管理、考虑策略执行结果的风险、剔除量化投资的主观色彩和不断优化量化投资的算法,充分证明了个人投资者运用Python语言进行量化股票组合投资是可行的。尤其为在熊市下亏损严重的个人投资者,提供了更科学的投资方式及应用工具,对改变A股的投资环境也是十分有益的。

参考文献:

[1]方浩文.量化投资发展趋势及其对中国的启示[J].管理现代化,2012(5):3-5.

[2]Daniel T.数据挖掘与预测分析[M].王念滨,宋敏,裴大茗,译.北京:清华大学出版社,2017.

[3]陈瑶瑜.本杰明·格雷厄姆成长股价值投资策略实证分析[J].时代金融,2016(12): 323-324,326.

[4]黄凯伦. 基于AdaBoost算法的动态多因子选股模型[D]. 北京:对外经济贸易大学,2017.

[5]骆晓强,梁权琦,杨晓光. 当前中国经济的“灰犀牛”和“黑天鹅”[J]. 中国科学院院刊,2017(12): 1356-1370.

[作者简介]吴梅(1973—),女,漢族,黑龙江阿城人,高级会计师,研究方向:投资策略研究。

猜你喜欢

Python语言
关于面向非计算机专业开设Python语言的几点思考
计算思维培养视域下《Python程序设计》课程的教学改革实践
在高中信息技术课中培养学生计算思维的有效方法探讨
基于KNN算法的手写数字识别
Python语言教学中问题解决能力和创新能力的培养实践
Python语言程序设计教学体系建设
面向计算生态的Python语言入门课程教学方案
基于Python语言和支持向量机的字符验证码识别
论Python程序设计语言
基于Python语言的面向对象课程实践教学探讨