2019年第07期20世纪80年代,一些投资者开始利用计算机研究金融数据,并初显成效。20世纪末,投资者把计算机技术进一步应用在金融数据分析上,进行模型设计,构建股票投资组合。这时,金融数据趋于规范化,在日渐复杂的数据分析过程中,产生了更多类型的因子和更多样化的投资策略。量化投资是借助量化金融分析方法进行资产管理,量化金融分析方法是结合金融数据、个人经验、数学模型和计算机技术的一种复杂金融建模的分析方法[1]。实现量化投资的方法多达数十种,Python、Matlab、SPSS、Eviews、Excel、SAS、R在量化界都是非常好用的工具,尤其是在数据分析方面。除Python外,其余几个工具的优势都体现在数据分析方面,而量化投资是一个系统性工程,数据分析只是其中的一部分,不是全部。根据GitHub官网统计,量化交易开源项目共145个,其中使用Python以外的技术进行开发的项目共70个,应用Python语言进行开发的多达75个。Python的开源性促使开发者开发了大量的库和模块,而这些库和模块又使很多外行人能够轻松入手,反过来又促进了Python在该领域的发展。应用Python语言爬取数据,进行数据挖掘和深度案例分析,能够使量化投资基本实现从技术分析到金融设计,实现系统性掌控。因此,采用Python驱动量化股票投资,对优化股票投资策略和规避投资风险具有十分重要的意义。1基于Python的股票量化投资交易程序1.1基于Python的股票量化投资步骤将Python要应用到量化投资交易中,其步骤如图1-1所示。图1-1股票量化交易应用模块库流程图第一阶段是数据收集。数据收集是很多券商机构在做的业务,有影响力的模块库有Tushare和Windpy,其中Windpy是Wind公司开发的一个开源接口。国内的金融终端一般是Wind、iFind和Choice终端,这些终端软件就是把企业和行业的数据收集到数据库,进行深度分析,并稍加整理成表格,然后上传到服务器中,方便客户进行相关的数据分析,一般情况下客户都需要付费来获得数据。第二阶段是数据分析。NumPy用来存储和处理多维数组和大型矩阵,搭配SciPy进行计算;Pandas解决时间序列;用Matplotlib进行2D绘图从而实现数据可视化。Wind终端和Choice终端也有相关的业务在平台上销售,而该服务的购买者通常是一些尚未具备分析能力和资格的小型机构或行外人。第三阶段是策略研究。IPython是一个Python的交互式shell,能进行变量的自动补全和缩进,支持bashshell命令,内置了一系列有用的功能和函数;Jupyter可以对数据进行清理和转换,进行数值模拟和统计建模等,是比较方便的策略研究工具;Zipline(国内公司开发的是RQalpha回测引擎)对真实交易系统的运转进行模拟,利用历史数据对投资策略进行回测检验;具体的策略便可以理解为Python代码的执行。第四阶段是实盘交易。vn.py是基于Python的开源交易平台开发框架;easytrader也是开源模块库,比较适合个人投资者。通俗来说,狭义的量化投资的应用意义到第三阶段为止,关于第四步的实盘交易还是需要经过投资者参考过量化投资的模型后作出的决定。因为工具只是投资者进行决策的辅助,人才是真实交易的决定者。需要说明的是,数据收集及案例中的模型,直接采用第三方平台供应的API数据源;数据分析因避免代码繁冗多杂,直接采用第三方平台的库和框架进行Python编程,其中BOLL指标案例的策略使用到了Sig原nal框架。利用第三方平台的意义及其最终达到的回测效果与纯自建量化交易策略项目无异,也非常适合个人投资者入手。本文选取A股市场进行研究,选取样本的原因是A股市场的数据有利于简化代码量。比如,在A股市场上进行交易,1手即为100股,而在港股市场上,不同的股票1手的股数不尽相同,有的1手是交易50股,有的1手是交易200股,这样的数据可以简化很多代码量。1.2基于Python的股票量化投资流程虽然Python实现股票量化交易分为4个阶段,但具体操作起来,为了更贴合实际,通常可以解析为8个流程,即:获取数据、数据分析挖掘、构建信号、构建策略、回测、策略分析、模拟交易和实盘交易。如图1-2所示。一是获取数据。包括获取公司新闻数据、关联数据,产业上下游、主营业务、所属行业主题等数据,基本行情数据,高频数据,股票Level-1数据,股票Level-2数据、期货Level-1数据等。二是数据分析。数据分析挖掘采用传统分析方法、新兴大数据、机器学习和数据挖掘方法[2];三是构建信号。在构建信号前进行数据处理、标准化、去极值、中性化,基础信号的研究、分组回测、衰减、行业分布,将基础信号合成复杂信号。四是构建策略。构建策略模板要兼容不同标的指标函数和参数的策略,适用于股票、基金、期货等金融资产,兼容日线、分钟线的策略,方便好用的策略函数,获取历史行情、历史持仓信息、调仓记录等,支持各种订单类型:止盈止损单、限价单、市价单。五是回测测试。回测要符合历史的真实行情,并相应的进行股票分红送转、除权除息处理,股票涨跌停处理,股票停复牌处理,市场冲击,交易滑点、手续费、期货保证金交易,大单分笔成交处理等;六是策略分析。包括策略归因、风险归因、实时监控,订单分析、成交分析、持仓分析、交易行为分析,多策略分析。七是模拟交易。模拟交易需要接入实时行情、实时获取成交回报,篮子交易、算法交易,支持撤单处理,实时监控、实时归因分析。八是实盘交易,实盘交易就是接入真实券商账户,紧紧跟随市场行情,实时进行下单,同时实时获取订单收益回报。2构建基于Python的量化股票投资策略2.1BOLL指标策略利用BOLL指标进行模拟回测,构造一个BOLL指标买卖策略,根据个人投资者的账户情况,设置账户初始资金为10万元,策略背景与规则如下:(1)如果收盘价上穿BOLL上轨,买入;如果收盘价下穿BOLL下轨,则开盘卖掉;(2)回测策略时间区间设定为2018年全年,股票池为“沪深300”,参考指标为“沪深300”;(3)资金账户初始资金10万,类型为股票
账户;(4)每次每只股票买20000元左右,出现重复信号时不重复买入;(5)当买入信号的股票数量比资金多时,随机挑选买入,每个交易日全仓操作。(6)策略需导入第三方库Pandas,框架为Signal。利用Python语言编辑策略代码并运行回测,得到BOLL指标买卖策略收益回测结果,如图2-1所示。
注:粗线———沪深300指数2018年基准年化收益率线细线———基于沪深300指数的BOLL指标策略的年化收益率线图2-1BOLL指标策略回测策略回测结果显示,2018年全年,沪深300指数涨幅为-25.9%,依据沪深300制定的BOLL策略收益率仅为-6.9%,BOLL指标买卖策略的模拟收益曲线较平缓,波动幅度明显小于沪深300的收益率波动幅度,收
基金项目:2017年广东省本科高校教学质量与教学改革工程建设项目“省级特色专业建设项目:经济学特色专业建设”的部分研究成果,项目编号:294。作者简介:孙丽颖(1980-),女,辽宁营口人,哈尔滨工业大学会计学硕士研究生,中山大学南方学院讲师,研究方向:公司理财。收稿日期:2019年3月19日。
基于Python工具的股票量化投资策略研究孙丽颖(中山大学南方学院,广东广州510970)摘要:在大数据快速发展的背景下,将程序算法与股票投资相结合是创新股票投资方式并实现投资收益率提升的关键。文章在量化投资理念的基础上,运用Python语言对A股市场的一些历史指数和个股数据进行梳理分析,针对Python量化工具对投资项目进行初始性设计,制定量化股票投资策略,并对策略进行收益回测,进而提出量化股票投资的保障措施。关键词:Python量化工具;投资策略;BOLL指标;格雷厄姆成长股
图1-2股票量化交易流程图
市场·贸易
492019年第07期学术专业人文茶趣
益率相对稳定,在2018的熊市环境下,规避降低风险的效果显著。可见,构建最简单的量化交易策略仍然是可行的,大环境熊市的影响,暂时不对策略的好坏进行评价。这次进行对策略的可行性进行检测,策略收益率已远胜于沪深300指数。2.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语言编辑策略代码并运行回测,得到格雷厄姆成长股内在价值投资法策略收益回测结果,如图2-2所示。注:粗线———沪深300指数2016—2018年基准年化收益率线细线———基于沪深300指数的格雷厄姆成长股内在价值投资法策略的年化收益率线图2-2格雷厄姆成长股内在价值投资法策略回测策略回测结果显示,沪深300指数三年间的基准年化收益率为-7.1%,而策略线的年化收益率是4.0%,格雷厄姆成长股价值投资法策略的模拟收益曲线较平缓,波动幅度明显小于沪深300的收益率波动幅度,收益率相对稳定,降低了部分投资风险,利用格雷厄姆的投资法制定的策略也是可行的。综上,两个策略案例都证明了Python驱动的量化股票投资方案在提高收益率和规避风险方面的有效性,同时Python量化投资还可以通过回测指标分析进行个股筛选,对于个人投资者来说,是行之有效的投资工具。如果投资者能够深入研究,调整参数指标,将更会适应中国市场,获得更理想的收益。2.3Python驱动的数据库从表面上看,一串代码实现了提高股票组合的收益率和模拟收益曲线,其实事情远不止这么简单,Python真正驱动的是背后庞大的数据源,这也是利用第三方平台对策略回测的原因。搭建数据库需要一整套庞大的设备,其中不乏价格高昂的服务器和硬盘,耗资巨大,普通投资者不会在这些设备方面投入资金。在量化投资领域中常用的一个词“因子”,因子就是经过人为的采集、编译并存储到数据库中的一个数据集合。不同的公司或数据库搭建者都会根据自己的偏好对因子进行命名,存储在数据库中,等到策略运行的时候再调用出来。随着量化投资的发展,股票市场中很多数据都是可以被量化的,尤其是报表指标和技术指标,这些指标被制作成两种因子:价值派指标因子和技术派指标因子。价值派指标因子系列的分支有:股指市值型因子,偿债能力型因子,收益型因子,盈利能力型因子,运营能力型因子等。技术派指标因子系列下也派生出很多的分支,比如:成交量型因子,趋势型因子,能量型因子,超买超卖型因子,均线型因子等[4]。另外,很多当初被认为不能进行量化的数据也被实现了量化,比如分析师预期型因子,还有股民热度型因子。其中股民热度型因子在其他地区的股票市场上是发展不了的,比如美股市场上的投资者就不会像A股投资者一样,在论坛上每天都讨论的热火朝天。A股投资者能对市场产生较大的影响,同时又很喜欢到股吧论坛上讨论自己看空看多,因此这些数据在A股市场上独树一帜地发展了起来,数据量足够的庞大,不少机构便把它做成了股民热度型因子。2.4Python对量化股票投资的影响量化投资界的重量级人物数学家詹姆斯·西蒙斯(JamesSimons),创造了“用公式打败市场”的传奇。由他在1989年创办的基金成立至今已有30年时间,该基金年均35%的净回报率,远远超过了年均回报率20%左右的股神巴菲特。如果每位个人投资者都做到他的一半,也就是利用量化投资创造年均17.5%的净回报率,都很了不起了。很多传统投资者认为美国与中国的投资环境和制度不同,量化投资不一定能为投资者带来可观的收益。其实学习了量化投资的知识便会发现,只需要在Python编程的时候引入不同的因子便可以了。的确,在美股中的量化策略不适用于A股,但参数是可调的,在A股市场中制作量化策略,可以引入股民热度型因子,再设置适当的权重。如果半数以上的个人投资者能够熟练运用Python进行量化股票组合投资,不仅能避过2018年跌跌不休的熊市,做得好的更能收获可观的收益。3Python驱动的量化股票投资的保障措施Python驱动的股票量化投资模型中的各指标参数的选取是关键,需