摘 要:随着2020年3月1日新《中华人民共和国证券法》的正式落地及其证券发行注册制的全面实行,中国资本市场的开放度将会空前提高,股票市场无疑会注入一批新活力。面对这种大趋势,采用传统的人工选股带来的低效率、高成本、高风险的弊端可能会被逐渐放大,造成资源的浪费。通过借鉴在西方国家发展起来的业绩稳定、投资理性的量化投资技术及拥有广泛的第三方科学计算库的Python编程工具,对著名的威廉·欧奈尔先生创作的《How to make money in stocks》一书中所记载的技术分析方面“杯底”价格走势图进行量化,并结合RPS(股价相对强度)和交易量的综合判断进行智能筛选,可以提升选股效率和可靠性。
关键词:量化投资;Python;欧奈尔
随着我国经济的快速发展、金融制度的不断完善,我国的股票市场也处在蓬勃发展的历史进程中。2020年3月1日,《中华人民共和国证券法》的修订预示了我国股票市场在接下来数年内将带来巨大的变革,首当其冲的是企业入市门槛的大幅度降低,会带来我国股票市场股票数量的大幅度增加。而在愈来愈错综复杂的股票市场中,我国证券投资机构及部门也将会面临严峻的考验。量化投资是指利用计算机程序通过数学、统计学知识进行自动发送买卖指令的一种交易方式,源于美国,在海外已经发展了有30余年,其优点在于业绩稳定及风险较小,且反应速度远比传统盯盘速度要快很多。近几年随着我国大数据、机器学习的发展,量化投资的也渐渐在我国国内展露苗头。
随着资本市场的快速发展,愈来愈多投资者尝试通过股票历史数据来预测股票的涨跌,可以看到我国对量化投资方向的研究也是比较丰富的。曾武序等人通过爬取股票数据,然后对数据进行解析,对数据归一化处理,最后利用BP神经网络对股票进行预测。此方法具有重要现实意义和经济价值,但必须进行定性预测且预测精确度也尚待提升。
陳文颖利用大数据分布式计算平台Hadoop中的聚类分析对股票进行分类预测,被聚在一类中的股票走势有很大的相似性。但此方法还需要在聚类的基础上,对同一类的股票信息进行进一步的分析从而提高实用性。黄敏健等人在sklearn框架下分析清洗股票历史数据,后通过机器训练来预测股价。机器学习算法可以通过一定范围的指标评估从而辅助交易策略。然而在实际环境中,模型预测的准确率具有数据依赖性,无法适用于所有场景。
郝知远在MATLAB上用数据挖掘方法进行股票预测,投资者可以利用这个过预测系统获得股票上涨概率和选股方面的建议。但是由于计算机性能的制约和获取股票数据渠道的限制,此原理还是具有一定的局限。
本文基于Python编程工具,以威廉·欧奈尔先生的投资理念为实践对象,对欧奈尔先生的著作《How to make money in stocks》中提到的著名价格走势图进行量化并应用于Python编程工具,从而对具有涨幅潜力的股票进行筛选。
一、欧奈尔选股模型概述
二级市场的研究方法一般来说有基本面分析和技术面分析,基本面分析是对公司的基本信息及财务数据等的分析,技术面分析是分析股市数据信息,判断买卖时机。威廉·欧奈尔先生在著作《How to make money in stocks》中对基本面分析与技术面分析进行了巧妙结合,其中技术面分析中欧奈尔通过对美国历史上的股票进行归纳统计得出几种价格走势图。本文对此著作中的最著名的价格走势图——“杯柄”价格走势图进行研究。
(一)欧奈尔“杯柄”价格走势图
欧奈尔先生选股一般先是进行基本面的分析,基本面包括公司基本业务、基本发展方向、基本财务状况数据等等,对这些多方面的统计数据展开综合性的统计分析。基本面分析囊括了很多的文字性、抽象性、前瞻性分析,在这一方面的分析上现在的计算机分析水平还没有达到聘美专业人士通过大量经验进行的分析水平,因此本文不打算对基本面分析展开深入探讨。但是欧奈尔另一方面也很重视技术面分析即股票买入时机的选择,这一方面的分析其实在西方国家几十年的量化投资经验来看已经远超人们的手动择时,在我国日益壮大的资本市场引导下,有必要借鉴西方市场的经验,合理选择程序量化方案并自动择时。
欧奈尔先生对美国股票市场中绝大部分的上涨股票进行了统计归纳,总结出几种价格走势图。股票一直有一种历史相似性,其供求关系往往也会呈现出惊人的一致性,因此借助于价格走势图的技术面分析也不枉为一种可靠的分析方法。欧奈尔选股走势图中属“杯柄”走势图最为著名,如下图所示。
(二)“杯柄”价格走势图的运作机制及其量化
首先将U型杯底的时间跨度即横向跨度设定为20天或60天,茶杯形态的深度设定为33%以内,欧奈尔先生在著作中设定形态深度是为了防止反弹幅度过大导致突破杯柄的概率提升,提升模型的稳定性。根据以上描述,可以设定四个数值,以时间跨度为20天为例,分别为倒数第20天价格d0、倒数第2天到倒数第19天之间的最高价d1、倒数第1天价格d2、倒数第2天到倒数第19天之间的最低价d3。设定完毕后,筛选d1 (三)价格走势图选股策略的可行性条件 我国A股市场新股上市之时往往会出现一字涨停然后下跌调整进而再轻微反弹的初期趋势,这一走势和“杯柄”价格走势图的走势有一定的相似性,但并没有后期继续走涨的保证。因此为了保证选股策略的可行性及资金的安全性,应当剔除新股和次新股,采用业绩稳定、上市时间较长的股票来进行分析选股。 二、基于Python的实现流程及选取的第三方库 (一)股票数据来源和第三方库及交互平台的选择 1.数据来源——Tushare财经数据接口包 做任何分析之前的第一步一直是数据的收集与清洗,本文所使用到的股票数据来源于国内免费开放的Tushare财经数据接口。Tushare数据覆盖面甚广,涵盖了公司股票、期货期权、指数、数字货币等一系列金融相关数据,能够实现对金融数据进行采集、清洗、加工及储存的功能。Tushare pro的数据可供校园用户免费使用,因此本文将应用Tushare pro数据接口来进行数据的采集储存工作。 2.数据科学及可视化——Numpy、Pandas及Matplotlib库 Numpy是Python语言的一个拓展程序库,常见于大量的数组与矩阵运算。Pandas是Python语言的一个数据分析包,是基于Numpy研发的一个强大的研究结构化数据的工具集,常见于数据挖掘与数据分析。Matplotlib是Python语言的一个绘图库,内含包括散点图、K线、回归线等的绘图函数,在数据分析上常常搭配前面提到的Numpy、Pandas使用。 3.数据框架——SQLAlchemy库 SQLAlchemy是一种ORM框架,采用关系对象映射的方式运行数据库系统操作。 4.交互平台——Jupyter Notebook Jupyter Notebook是一種交互式web笔记本,常用于创建、调试、共享程序文档,支持实时代码、数学方程、可视化,可以实现数据整理、统计建模、机器学习等功能。 5.量化实现思路及流程 基本思路为首先利用tushare pro财经接口,输入个人token码,获取股票历史每日行情数据。利用SQLAlchemy建立数据框架,遍历所有上市股票数据并添加到数据框架,设定好时间跨度,利用pandas库对database完成择优,最终使用matplotlib绘图库对筛选出来的个股进行K线绘制,从而最为直观地进行最后的人工筛选。 三、将量化思路进行代码编制并实际运行及优化 (一)股票数据的采集及数据框架的建立 首先对tushare库、sqlalchemy库进行导入及设置,核心代码如下。 借助stock_basic接口得到基本数据信息,包括股票代码、名称等,之后利用daily接口获取历史日线行情,核心代码如下。 #只选择还在上市中的企业股票,并做出股票代码列表 codes = pro.stock_basic(list_status = ‘L).ts_coded.values #从codes列表中对没一个股票代码进行遍历 for code in codes: df = pro.daily(ts_code = code,start_date = ‘20100101, end_date = ‘20191113 df.to_sql(name = ‘daily_data, engine, index = False, if_exists = ‘append) 到此就完成了对数据库的初步建立及股票历史数据的采集,在此之后开始对数据展开处理及分析。 (二)将基本量化思路应用到Python当中 在前文中已经提到,可以设置四个参数值从而实现对“茶杯”形状走势图进行一个简单的筛选,因此我们可以利用pandas中自带的函数来对DataFrame进行数据操作。以时间跨度20天为例,核心代码如下。 #设定一个空列表用于装填符合条件的代码 stock_list = [] for c in data.columns: d0 = data[c][-20] d1 = data[c][-(n-1):-2].max() d2 = data[c][-1] d3 = data[c][-(n-1):-2].min() #筛选出符合条件d1 if d1 stock_list.append(c) (三)为提升程序筛选的稳定性及可靠性加入RPS指标 RPS指标全名为Relative Price Strength Rating,即股价相对强度,是由威廉·欧奈尔设想并运用于美国股票市场研究的一种指标。RPS指标是指在一段时间内,个股在所有股票涨幅中的位列。RPS指标背后的逻辑在于,欧奈尔对股票历史数据进行统计分析时发现,涨幅靠前的股票往往随后的表现也不会令人失望,这种强者恒强的现象,也许不难用马太效应与二八法则来解释。下面使用Python来计算RPS。首先为了排除掉新股次新股的上市后的连续上涨情况,要先对数据进行精准剔除。核心代码如下。 #设定参数为上市公司,获取股票列表 datalist = pro.stock_basic(list_status = ‘L) #排除掉2018年1月1日之后上市的股票及带有ST和*ST的股票 datalist = datalist[datalist[‘list_date].apply(int).values<20180101] datalist = datalist[-datalist[‘name].apply(lambda x:x.startswitch(‘*ST))] datalist = datalist[-datalist[‘name].apply(lambda x:x.startswitch(‘ST))] code_list = df.ts_code.values 接下来对进行过滤后的数据进行RPS指标计算并进一步筛选,核心代码如下。 data = pd.read_sql(engine) time_list = [5,20,60,120,250] df = pd.DataFrame() for time in time_list: return = (data/data.shift(time)-1).iloc[time:].fillna(0) df = pd.DataFrame(ser.sort_values(ascending=False)) df[‘n] = range(1,len(df)+1) df[‘rps] = (1-df[‘n]/len(df))*100 (四)对筛选出来的股票进行K线可视化 使用Pyecharts库可以生成Echarts图表——百度开源的一种数据可视化图表,其可视化效果不输其他可视化工具,可以实现在Python中直接使用数据生成图。本文将利用其内部拥有的Kline函数对筛选出来的股票进行K线的绘制。 (五)程序实际运行并输出结果 首先根据RPS指标进行初步筛选,剔除新股及劣质股票,在优质股票当中进行后续价格走势的筛选。可以看到初步筛选的结果一共有3306只股票,接下来对这些股票进行威廉·欧奈尔的“杯柄”价格走势的判断。运行上文中所述代码可得到如下结果:[‘宝塔实业‘天和防务‘熊猫金控‘粤泰股份‘中恒电气‘道道全]最后一共得到五个“杯柄”类价格走势的股票,对其进行可视K线绘制,以天和防务股票为例。 天和防务的近20日价格走势已经很接近于“杯柄”走势图了,在杯底左侧有一点小波动,但是不妨碍整个价格走势的连贯性,且其价格走势的上涨伴随有成交量的明显放大,属于优质股。 四、实验结果评估及未来发展方向 本文基于美国著名投资大师——威廉·欧奈尔的著作《How to make money in stocks》中的技术面分析即价格走势图的分析,挑选其中最著名的“杯柄”走势图进行量化,并基于Python实现了自动选股策略的实现。基于股票历史数据,在2019年11月13日,进行自动选股的结果,一共有五只股票,分别是宝塔实业、天和防务、熊猫金控、粤泰股份、中恒电气以及道道全,通过人工二次观察,得出天和防务在未来一段时间内具有相当大的上涨潜,其随后的一段时间内也确实可以看出此股票有一定的上涨情况。可以看出,欧奈尔的技术面分析方法应用于Python自动程序算法具有一定的有效性。当然,欧奈尔的选股方法并不局限于技术面分析,其基本面分析工作将会比技术面分析更加重要,量化投资的发展也一定不会局限于技术面的分析,基于大数据的财报、信息源的分析也一定会为量化投资的发展增添一份力量。随着量化投资技术的发展,基于量化所进行的投资收益会呈现收益率逐渐增高、抗风险能力逐渐增强的情况,这与我国持续防范重大金融风险的总基调一致。 结束语: 随着我国股票市场等金融市场的逐步开放,市场中的资本量必定会只增不减,未来我国的防范重大金融风险的总基调也不会改变,因此本文旨在通过欧奈尔的技术面分析结合Python自动量化模型选股策略,通过遍历A股中所有上市公司的股票,进行RPS指标、价格走势图判断、成交量判断的三重筛选手段,最终选出合适的具有上涨潜力的股票,从而降低投资风险。 在未来,将会基于此模型,尝试添加基本面分析的量化选股思路,并尝试将基本面分析与技术面分析进行结合,并对众多变量进行权重的分配,从而达到更加优秀的选股模型策略,这将会大大提高选股的可靠性、稳定性、收益性以及抗风险性。另外,政策导向与产业分析也会对选股产生比较大的影响,而文本分析往往進行机器分析非常困难,还是需要加以人工引导,并在程序运行过程中,需要进行在旁监督,以防止大型交易事故的发生。但是,股票投资到头来还是具有一定风险的,任何股票投资策略都不能将这种风险化为0,量化投资选股能做的只有适当降低这种风险以及量化这种风险,从而给投资者和投资机构以更加明显的风险提示,从而使资本金得以进行更加有效率的分配,提高金融市场资源分配的效率,也为广大投资者提供了一套非常科学而系统的投资思路,可以适当减少我国A股市场的乱投资、投机性的风气。 参考文献: [1]张鑫.量化投资发展趋势及其对中国的启示[J].中国商论,2018(01):31-32. [2]曾武序,钱文彬,王映龙,杨文姬,柳军.一种基于Python和BP神经网络的股票预测方法[J].计算机时代,2018(06):72-75+80. [3]陈文颖.基于Hadoop的股票数据聚类分析[D].浙江大学,2018. [4]黄敏健,刘钰萱.基于机器学习的股票趋势预测方法研究[J].现代盐化工,2019,46(05):74-76. [5]郝知远.基于数据挖掘方法的股票预测系统[D].南京理工大学,2017. [6]陈航.欧奈尔选股模型实证研究[D].上海交通大学,2015. [7]刘利.基于技术指标的量化选股实证研究[D].对外经济贸易大学,2019. [8]黎爽.基于Python科学计算包的金融应用实现[D].江西财经大学,2017. [9]李雪莲.基本面与技术面相结合的A股量化选股模型设计[D].河北经贸大学,2015. 作者简介:金城满(1997-),男,朝鲜族,吉林省延吉市人,本科,山东大学商学院。研究方向:金融学。