推荐星级:
- 1
- 2
- 3
- 4
- 5
基于Python工具的股票量化投资策略研究
资料介绍
在大数据快速发展的背景下,将程序算法与股票投资相结合是创新股票投资方式并实现投资收益率提升的关键。文章在量化投资理念的基础上,运用Python语言对A股市场的一些历史指数和个股数据进行梳理分析,针对Python量化工具对投资项目进行初始性设计,制定量化股票投资策略,并对策略进行收益回测,进而提出量化股票投资的保障措施。
部分文件列表
文件名 | 大小 |
基于Python工具的股票量化投资策略研究.pdf | 1M |
部分页面预览
(完整内容请下载后查看)市场·贸易
基于 Python 工具的股票量化投资策略研究
孙丽颖
(中山大学南方学院,广东 广州 510970)
摘
要:在大数据快速发展的背景下,将程序算法与股票投资相结合是创新股票投资方式并实现投资收益率提升的关键。文
章在量化投资理念的基础上,运用 Python 语言对 A 股市场的一些历史指数和个股数据进行梳理分析,针对 Python 量化工具对投
资项目进行初始性设计,制定量化股票投资策略,并对策略进行收益回测,进而提出量化股票投资的保障措施。
关键词:Python 量化工具;投资策略;BOLL 指标;格雷厄姆成长股
20 世纪 80 年代,一些投资者开始利用计算机研究金融数据,并初显
成效。20 世纪末,投资者把计算机技术进一步应用在金融数据分析上,进
行模型设计,构建股票投资组合。这时,金融数据趋于规范化,在日渐复
杂的数据分析过程中,产生了更多类型的因子和更多样化的投资策略。
量化投资是借助量化金融分析方法进行资产管理,量化金融分析方法是
结合金融数据、个人经验、数学模型和计算机技术的一种复杂金融建模
虽然 Python 实现股票量化
交易分为 4 个阶段,但具体操作
起来,为了更贴合实际,通常可
以解析为 8 个流程,即:获取数
据、数据分析挖掘、构建信号、构
建策略、回测、策略分析、模拟交
易和实盘交易。如图 1-2 所示。
一是获取数据。包括获取公司新
闻数据、关联数据,产业上下游、
主营业务、所属行业主题等数
据,基本行情数据,高频数据,股
票 Level-1 数据,股票 Level-2
数据、期货 Level-1 数据等。
二是数据分析。数据分析挖
[1]
的分析方法 。实现量化投资的方法多达数十种,Python、Matlab、SPSS、
Eviews、Excel、SAS、R 在量化界都是非常好用的工具,尤其是在数据分析
方面。除 Python 外,其余几个工具的优势都体现在数据分析方面,而量化
投资是一个系统性工程,数据分析只是其中的一部分,不是全部。根据
GitHub 官网统计,量化交易开源项目共 145 个,其中使用 Python 以外的
技术进行开发的项目共 70 个,应用 Python 语言进行开发的多达 75 个。
Python 的开源性促使开发者开发了大量的库和模块,而这些库和模块又
使很多外行人能够轻松入手,反过来又促进了 Python 在该领域的发展。
应用 Python 语言爬取数据,进行数据挖掘和深度案例分析,能够使量化
投资基本实现从技术分析到金融设计,实现系统性掌控。因此,采用
Python 驱动量化股票投资,对优化股票投资策略和规避投资风险具有十
分重要的意义。
图 1-2 股票量化交易流程图
掘采用传统分析方法、新兴大数
[2]
据、机器学习和数据挖掘方法 ;
三是构建信号。在构建信号前进行数据处理、标准化、去极值、中性化,
基础信号的研究、分组回测、衰减、行业分布,将基础信号合成复杂信号。
四是构建策略。构建策略模板要兼容不同标的指标函数和参数的策
略,适用于股票、基金、期货等金融资产,兼容日线、分钟线的策略,方便
好用的策略函数,获取历史行情、历史持仓信息、调仓记录等,支持各种
订单类型:止盈止损单、限价单、市价单。
1
基于 Python 的股票量化投资交易程序
1.1 基于 Python 的股票量化投资步骤
将 Python 要应用到量化投资交易中,其步骤如图 1-1 所示。
五是回测测试。回测要符合历史的真实行情,并相应的进行股票分
红送转、除权除息处理,股票涨跌停处理,股票停复牌处理,市场冲击,交
易滑点、手续费、期货保证金交易,大单分笔成交处理等;
六是策略分析。包括策略归因、风险归因、实时监控,订单分析、成交
分析、持仓分析、交易行为分析,多策略分析。
图 1-1 股票量化交易应用模块库流程图
七是模拟交易。模拟交易需要接入实时行情、实时获取成交回报,篮
子交易、算法交易,支持撤单处理,实时监控、实时归因分析。
八是实盘交易,实盘交易就是接入真实券商账户,紧紧跟随市场行
情,实时进行下单,同时实时获取订单收益回报。
第一阶段是数据收集。数据收集是很多券商机构在做的业务,有影
响力的模块库有 Tushare 和 Windpy,其中 Windpy 是 Wind 公司开发的一
个开源接口。国内的金融终端一般是 Wind、iFind 和 Choice 终端,这些终
端软件就是把企业和行业的数据收集到数据库,进行深度分析,并稍加
整理成表格,然后上传到服务器中,方便客户进行相关的数据分析,一般
情况下客户都需要付费来获得数据。
2
构建基于 Python 的量化股票投资策略
2.1 BOLL 指标策略
利用 BOLL 指标进行模拟回测,构造一个 BOLL 指标买卖策略,根据
个人投资者的账户情况,设置账户初始资金为 10 万元,策略背景与规则
如下:
第二阶段是数据分析。NumPy 用来存储和处理多维数组和大型矩
阵,搭配 SciPy 进行计算;Pandas 解决时间序列;用 Matplotlib 进行 2D 绘
图从而实现数据可视化。Wind 终端和 Choice 终端也有相关的业务在平
台上销售,而该服务的购买者通常是一些尚未具备分析能力和资格的小
型机构或行外人。
(1)如果收盘价上穿 BOLL 上轨,买入;如果收盘价下穿 BOLL 下轨,
则开盘卖掉;(2)回测策略时间区间设定为 2018 年全年,股票池为“沪深
300”,参考指标为“沪深 300”;(3)资金账户初始资金 10 万,类型为股票
账户;(4)每次每只股票买 20 000 元左右,出现重复信号时不重复买入;
(5)当买入信号的股票数量比资金多时,随机挑选买入,每个交易日全仓
操作。(6)策略需导入第三方库 Pandas,框架为 Signal。
利用 Python 语言编辑策略代码并运行回测,得到 BOLL 指标买卖策
略收益回测结果,如图 2-1 所示。
第三阶段是策略研究。IPython 是一个 Python 的交互式 shell,能进行
变量的自动补全和缩进,支持 bash shell 命令,内置了一系列有用的功能
和函数;Jupyter 可以对数据进行清理和转换,进行数值模拟和统计建模
等,是比较方便的策略研究工具;Zipline(国内公司开发的是 RQalpha 回
测引擎)对真实交易系统的运转进行模拟,利用历史数据对投资策略进
行回测检验;具体的策略便可以理解为 Python 代码的执行。
第四阶段是实盘交易。vn.py 是基于 Python 的开源交易平台开发框
架;easytrader 也是开源模块库,比较适合个人投资者。通俗来说,狭义的
量化投资的应用意义到第三阶段为止,关于第四步的实盘交易还是需要
经过投资者参考过量化投资的模型后作出的决定。因为工具只是投资者
进行决策的辅助,人才是真实交易的决定者。
需要说明的是,数据收集及案例中的模型,直接采用第三方平台供
应的 API 数据源;数据分析因避免代码繁冗多杂,直接采用第三方平台
的库和框架进行 Python 编程,其中 BOLL 指标案例的策略使用到了 Sig-
nal 框架。利用第三方平台的意义及其最终达到的回测效果与纯自建量
化交易策略项目无异,也非常适合个人投资者入手。本文选取 A 股市场
进行研究,选取样本的原因是 A 股市场的数据有利于简化代码量。比如,
在 A 股市场上进行交易,1 手即为 100 股,而在港股市场上,不同的股票
1 手的股数不尽相同,有的 1 手是交易 50 股,有的 1 手是交易 200 股,这
样的数据可以简化很多代码量。
注:粗线——沪深 300 指数 2018 年基准年化收益率线
细线——基于沪深 300 指数的 BOLL 指标策略的年化收益率线
图 2-1 BOLL 指标策略回测
策略回测结果显示,2018 年全年,沪深 300 指数涨幅为-25.9%,依据
沪深 300 制定的 BOLL 策略收益率仅为-6.9%,BOLL 指标买卖策略的模
拟收益曲线较平缓,波动幅度明显小于沪深 300 的收益率波动幅度,收
1.2 基于 Python 的股票量化投资流程
基金项目:2017年广东省本科高校教学质量与教学改革工程建设项目“省级特色专业建设项目:经济学特色专业建设”的部分研究成果,项目编
号:294。作者简介:孙丽颖 (1980-),女,辽宁营口人,哈尔滨工业大学会计学硕士研究生,中山大学南方学院讲师,研究方向:公司理财。
收稿日期:2019年3月19日。
49
2019 年第 07 期
学术 专业 人文 茶趣
益率相对稳定,在 2018 的熊市环境下,规避降低风险的效果显著。可见,
构建最简单的量化交易策略仍然是可行的,大环境熊市的影响,暂时不
对策略的好坏进行评价。这次进行对策略的可行性进行检测,策略收益
率已远胜于沪深 3ꢀꢀ 指数。
度型因子,再设置适当的权重。如果半数以上的个人投资者能够熟练运
用 Python 进行量化股票组合投资,不仅能避过 2ꢀꢁ8 年跌跌不休的熊市,
做得好的更能收获可观的收益。
3
Python 驱动的量化股票投资的保障措施
Python 驱动的股票量化投资模型中的各指标参数的选取是关键,需
2.2 格雷厄姆成长股内在价值投资法
[3]
以格雷厄姆的成长股内在价值投资法 来制定策略与 BOLL 指标策
要庞大的数据资料,对参数反复修正,才会获得更接近实际情况的参数。
根据各种参数创建的子模型只有通过实践数据和时间的检验才是成功
的。如何使模型具有普遍的可理解性,简化投资者操作使用,还需要反复
验证、修正、提炼、升华与定型。
略不同,价值投资需要长时间的验证,因此用最近 3 年为宜。
“价值投资之父”格雷厄姆在《聪明的投资者》中给出了一个对成长
股内在价值进行估值的简单公式:
价值=当期(正常)利润×(8.5+两倍的预期年增长率)
3.1 加强数据库的规范化管理
策略将以这条公式作为交易规则,策略的背景与规则如下:
(1)价值=当期(正常)利润×(8.5 + 两倍的预期年增长率);(2)如果
股票价格低于价值,则买入;如果股票价格高于价值,则卖出;(3)回测策
略时间选取 2ꢀ16 年 1 月 1 日至 2ꢀ19 年 1 月 1 日,股票池为“沪深 3ꢀꢀ”,
参考指标为“沪深 3ꢀꢀ”;(4)资金账户初始资金 ꢁ0 万,类型为股票账户;
(5)仓位以每支个股的持仓权重为标准买入,每支个股持仓最高不超过
ꢁ0%,出现重复信号时不重复买入;(6)当买入信号的股票数量比资金多
时,随机挑选买入,每个月第 1 个交易日全仓进行调仓操作;(7)用了因
子库中的“EGRO”因子,5 年收益增长率来代表预期年增长率。筛选出低
估值,即股票市值小于其格雷厄姆估值的股票。
大部分投资者运用量化投资自制策略时,都是在第三方平台上创建
量化交易策略的,Python 编写的策略代码也存放在第三方平台处。不论
是某个商业平台还是某个开源平台,这都会使投资者的数据文件面临泄
露威胁等一系列数据信息安全性问题。然而,在量化投资的后期,随着资
金池不断发展壮大,安全性就越来越受到重视,特别是对相关的策略代
码进行保护。投资者若想规避这种数据的安全性风险,需要自掏腰包创
建数据库,置办机房、服务器等,这样就会大幅度提高投资成本,需要更
高的技术水平和管理水平。如果是发展到这个阶段,可以对数据及其安
全性进行规范化管理了。目前加密算法也有很多,最著名的是 Hash 算
法。Hash 算法普遍应用于世界各地,同时安全性能相当高,各大互联网公
司、银行、区块链等都在用。在 Python 中运用更是简单易上手,直接导入
Hashlib 模块即可,在设置访问数据库时添加 Hash 函数即可。
3.2 考虑策略执行结果的风险
利用 Python 语言编辑策略代码并运行回测,得到格雷厄姆成长股内
在价值投资法策略收益回测结果,如图 2-2 所示。
取得的上市公司财务数据具有滞后性,对数据的修正容易造成很难
察觉的微小错误,终值又很难确定,只能使用初始值进行修正分析,这种
基于初始财务数据的调整修正会对量化投资策略产生影响,进而影响选
股结果。另外,量化投资策略的第四个阶段是实盘交易,实盘交易时由于
市场上不乏“灰犀牛”和“黑天鹅”,因此,要根据不同的市场外在因素,不
[5]
断地调整策略参数,维护成本比较高 。
3.3 剔除量化投资的主观色彩
做量化交易的投资者必需具备很强的编程能力和数学基础,在开发
策略时需要分析大量数据,不断进行回测,从而优化模型。就需要投资者
具备经济学知识和思维,同时对金融市场有着独特的见解作为理论支
撑,而这些见解往往都是带有主观色彩的。因此,投资者在做出决策规则
前,内心都有一个既定的主观判断脚本,在做决策时往往希望找到相关
的数据支持。所以在制作量化投资决策时,应尽量剔除投资者主观因素
的影响。
注:粗线——沪深 300 指数 2016—2018 年基准年化收益率线
细线
略的年化收益率线
图 2-2 格雷厄姆成长股内在价值投资法策略回测
——基于沪深 300 指数的格雷厄姆成长股内在价值投资法策
策略回测结果显示,沪深 3ꢀꢀ 指数三年间的基准年化收益率为-
7.ꢁ%,而策略线的年化收益率是 4.ꢀ%,格雷厄姆成长股价值投资法策略
的模拟收益曲线较平缓,波动幅度明显小于沪深 3ꢀꢀ 的收益率波动幅
度,收益率相对稳定,降低了部分投资风险,利用格雷厄姆的投资法制定
的策略也是可行的。
3.4 不断优化量化投资的算法
Python 编写的代码具有“简单易上手”的特点。然而,简洁性暴露了
缺点,即不严谨。不严谨的语法在应用到现实生活中的时候,往往会出现
一点点小问题。没有人知道会出现什么问题,也许就是忽然某一天出现
的这一点儿问题亏损了投资人的部分资金。算法上需要优化的便是速
度,因为 Python 并不是底层技术,它是上层的解析性语言,执行起来比较
慢。如果某只小市值股票的庄家 A 发现有个投资者 B 在利用量化投资做
自家的股票,这个庄家 A 便利用他的资金优势和硬件优势,开启机械式
挂单,直接断崖式拉低股价,以极小的速度差抢在 B 的前面下了卖单。由
于 B 的量化程序的速度不够快,所以股票未卖出,而价格又达到了策略
设置好的割肉价格。于是,B 的量化程序便无奈地挂出更低的卖价挂单,
此时庄家便可以挂买单收获筹码了。解决这两个问题有效的途径就是算
法上的优化,因此,投资者需要终身学习,学习一些相关的编程语言,比
如汇编语言:C 语言。利用 Python 进行量化程序的大部分策略定制工作,
同时利用 C 语言进行执行决策,这样,双剑合璧,更能高效快速地运行,
以弥补 Python 在算法上的缺点。
综上,两个策略案例都证明了 Python 驱动的量化股票投资方案在提
高收益率和规避风险方面的有效性,同时 Python 量化投资还可以通过回
测指标分析进行个股筛选,对于个人投资者来说,是行之有效的投资工
具。如果投资者能够深入研究,调整参数指标,将更会适应中国市场,获
得更理想的收益。
2.3 Python 驱动的数据库
从表面上看,一串代码实现了提高股票组合的收益率和模拟收益曲
线,其实事情远不止这么简单,Python 真正驱动的是背后庞大的数据源,
这也是利用第三方平台对策略回测的原因。搭建数据库需要一整套庞大
的设备,其中不乏价格高昂的服务器和硬盘,耗资巨大,普通投资者不会
在这些设备方面投入资金。在量化投资领域中常用的一个词“因子”,因
子就是经过人为的采集、编译并存储到数据库中的一个数据集合。不同
的公司或数据库搭建者都会根据自己的偏好对因子进行命名,存储在数
据库中,等到策略运行的时候再调用出来。随着量化投资的发展,股票市
场中很多数据都是可以被量化的,尤其是报表指标和技术指标,这些指
标被制作成两种因子:价值派指标因子和技术派指标因子。价值派指标
因子系列的分支有:股指市值型因子,偿债能力型因子,收益型因子,盈
利能力型因子,运营能力型因子等。技术派指标因子系列下也派生出很
多的分支,比如:成交量型因子,趋势型因子,能量型因子,超买超卖型因
4
小结
股票投资是有风险的,量化并不能降低风险,但却能通过数学的方
式体现出来。通过研究,首先,阐明了目前股市环境中运用量化投资的意
义;其次,论述了基于 Python 的股票量化投资交易的程序;然后,构建了
基于 Python 的量化股票投资策略,其中,设计的两个策略分别是根据经
典的 BOLL 指标和格雷厄姆的成长股选股法进行设计的,虽然进行了策
略回测,但因为未来的市场环境具有不确定性,得出的结论仍需要通过
后续的实盘操作来检验;最后,根据实际情况和未来可能发生的操作风
险提出了运用 Python 量化股票投资的保障措施,包括:加强数据库的规
范化管理、考虑策略执行结果的风险、剔除量化投资的主观色彩和不断优
化量化投资的算法。充分证明了个人投资者运用 Python 语言进行量化股
票组合投资是可行的。尤其为在熊市下亏损严重的个人投资者,提供了更
科学的投资方式及应用工具,对改变 A 股的投资环境也是十分有益的。
参考文献
[4]
子,均线型因子等 。另外,很多当初被认为不能进行量化的数据也被实
现了量化,比如分析师预期型因子,还有股民热度型因子。其中股民热度
型因子在其他地区的股票市场上是发展不了的,比如美股市场上的投资
者就不会像 A 股投资者一样,在论坛上每天都讨论的热火朝天。A 股投
资者能对市场产生较大的影响,同时又很喜欢到股吧论坛上讨论自己看
空看多,因此这些数据在 A 股市场上独树一帜地发展了起来,数据量足
够的庞大,不少机构便把它做成了股民热度型因子。
2.4 Python 对量化股票投资的影响
[1] 方浩文. 量化投资发展趋势及其对中国的启示 [J]. 管理现代化,
2012(5):3-5.
量化投资界的重量级人物数学家詹姆斯·西蒙斯(James Simons),创
造了“用公式打败市场”的传奇。由他在 ꢁ989 年创办的基金成立至今已
有 3ꢀ 年时间,该基金年均 35%的净回报率,远远超过了年均回报率 2ꢀ%
左右的股神巴菲特。如果每位个人投资者都做到他的一半,也就是利用
量化投资创造年均 ꢁ7.5%的净回报率,都很了不起了。很多传统投资者认
为美国与中国的投资环境和制度不同,量化投资不一定能为投资者带来
可观的收益。其实学习了量化投资的知识便会发现,只需要在 Python 编
程的时候引入不同的因子便可以了。的确,在美股中的量化策略不适用
于 A 股,但参数是可调的,在 A 股市场中制作量化策略,可以引入股民热
[2] Daniel T. Larose, Chantal D. Larose(著),王念滨,宋敏,裴大茗(译).
数据挖掘与预测分析[M].清华大学出版社,2017.
[3] 陈瑶瑜.本杰明·格雷厄姆成长股价值投资策略实证分析[J].时代
金融,2016(12): 323-324,326.
[4] 黄凯伦. 基于 AdaBoost 算法的动态多因子选股模型 [D]. 对外经
济贸易大学,2017.
[5] 骆晓强,梁权琦,杨晓光. 当前中国经济的“灰犀牛”和“黑天鹅”[J].
中国科学院院刊,2017(12): 1356-1370.
50
2019 年第 07 期
全部评论(0)