股票数据的可视化呈现与分析
——基于我国A股市场的分析
2023-01-30戴政炀
戴政炀 李 程
(湖南科技大学,湖南湘潭 411100)
一、前言
大数据的发展推动了我国资本市场的不断进步,把数据分析这种繁杂的任务交给计算机编程语言,大大提高了工作效率。可以看到各类计算机编程语言对于数据的读取、数据的可视化呈现以及基于历史数据对波动变化的预期无疑让分析员的工作变得更加高效。股票市场的数据繁琐复杂且数量极其庞大,怎么把这些庞大的数据量通过图形等形式呈现出来,又如何对这些历史数据进行分析从而预测未来的可能趋势成为了当下金融科技的热点。本文的撰写基于Python语言,运用其获取了沪深两市的部分个股近三年的数据并进行正态分布检验、预期波动率、预期的投资组合收益和方差、联合走势的分析,并且对疫情前后股市的偏度与峰度变化进行了测度及可视化呈现,同时从新的视角——可视化呈现对股市变化进行了描述,通过可视化的方式简单直接地将结果呈现了出来。
二、个股数据的获取
个股数据的获取是进行金融数据分析及可视化的第一步,python获取历史数据的方式多种多样,来源也十分广泛,如:东方财富网、Yahoo、新浪财经等,本文的数据来源于雅虎财经网站,在沪深两市中挑选了五只各行业中具有代表性的股票:中国电影、中顺洁柔、东阿阿胶、赣锋锂业、贵州茅台,除了五只股票外还加上了上证指数和深证成指做整体比照。
表2 -1 个股部分数据
表中数据很好的展示出了每个交易日的数据变化,为分析员提供了便利的帮助。在本节中我们成功获取了股票数据,在接下来的几个章节我们将会对获取的数据进行可视化呈现以及正态分布检验,同时进行收益预测分析。
三、数据可视化呈现与正态分布检验
在上一章节获取了数据后便需要对数据可视化呈现,通过matplotlib包的图像处理功能对数据进行图像呈现, matplotlib是python中的一个包,主要用于绘制2D图形。在数据分析领域它有很大的地位,而且具有丰富的扩展,能实现更强大的功能,在现阶段一般的股票数据走势都会运用到matplotlib这个包进行可视化呈现。
(一)数据可视化呈现
在运用绘图包进行数据处理后我们得到了从2017年初开始到现在的股票趋势图,这种趋势图把股票从繁琐的数据变成了清晰明了的图像形式呈现在了分析师的眼中,且该包还可以根据不同股票趋势线进行着色,分析师可以十分快捷方便的根据自己的想法选取若干只股票使用matplotlib包进行数据可视化呈现,从图像上直观地对这些股票与大盘指数、同行业其他股票横向进行对比,进而挑选出表现良好的股票并作深入研究。这种图像的处理虽然较为基础,但很大程度上减少了工作人员的工作量。
图3 -1中左上角股票代码从上到下依次为:中顺洁柔、中国电影、东阿阿胶、赣锋锂业、贵州茅台、上证指数、深证成指。这些趋势在图中清晰的呈现出来了,可以看到在选取的五只个股中,有三只个股的收益趋势明显好于大盘,其中贵州茅台和赣锋锂业两只股票的表现十分抢眼,值得注意的是从2020年下半年到2021年年初,这两只股票一直处于上涨阶段且涨势猛烈,而反观中国电影和东阿阿胶这两只股票,他们的表现甚至没能超过大盘,在过去三年时间内处于不温不火的状态。
图3-1 五只个股与指数的走势图
(二)疫情前后的正态分布检验
接下来我们需要通过借助python中的pandas包计算对数收益率,并且做正态分布检验,我们先假设这些股票严格服从正态分布的,那么接下来我们将要对股票的偏度是否正态和峰度是否正态进行结合来检验正态性。对于正态分布的检验在python中有多种方式:1.通过对数收益率的柱状图进行观测。研究股市收益分布不仅有利于我们认识资本市场的内在运行规律,从而采取相应的有效的监管手段,还能通过此分析帮助市场参与者进行资产定价与投资组合,从而更好的度量风险、分散风险;2.运用QQ图(Quantile-quantile plot,分位数-分位数图),也称正态概率图(normal probability plot),是常用的统计分析用图。如果这组实数服从正态分布,正态概率图就是一条直线。
通过对对数收益率的柱状图观测,发现其分 布显示五只股票均不符合标准正态分布,因为它们存在不同程度的右偏或是左偏现象,从表3-1中获得的数据我们可以进一步证实,中顺洁柔和赣锋锂业都呈现右偏现象,而其余三只股票和上证指数深证成指都有左偏的现象,值得注意的是在数据选取时间段中上证指数和深证成指的偏度都达到了-0.6以上,这提醒了我们需要注意股票市场存在的尾部风险可能,为了探究这段偏度在新冠疫情发生前后的变化,利用python爬取了疫情发生前后的五只股票数据以及上证指数和深证成指,并同上文所述进一步做了正态分布检验,测算个股与指数的偏度。
表3 -1 2017年至今个股与指数的样本统计量
表3 -2 2019年12月—2021年6月,疫情发生后的个股与指数样本统计量
表3 -3 2018年6月—2019年12月,疫情发生前的个股与指数样本统计量
做出的结果中正态分布检验结果在疫情发生前后并未发生改变,但从表3-2和表3-3的对比可以看出疫情前后的个股偏度发生变化①表3-2,3-3中数据为python计算生成,偏度峰度等数据也可从wind数据库获取,其中指数(大盘)的偏度更为明显,疫情发生前上证指数和深证成指的偏度分别为-0.25994和-0.32811,而疫情发生后上证指数和深证成指的偏度分别为-0.88852和-0.97524,显然疫情发生后股票市场的偏度远远超过了疫情发生前,其偏度超出了疫情发生前的两倍左右,这也直接反映了新冠疫情发生加剧了市场的尾部风险,尤其是左尾风险。
这与很多国内外学者对于新冠肺炎影响金融市场的研究结果较为一致,如陈林和曲晓辉(2020)认为不同行业和不同类型股票市场受到的影响也存在差异,新冠肺炎疫情对公司的股价存在负面影响,向前容等(2020)认为在新冠疫情爆发前至爆发期,新冠疫情在短期内对中国股市的波动造成了显著的影响。
接下来我们从QQ-plot的角度进一步检验正态分布情况,从图3-1可以看出,虽然统计数据大部分落在或靠近这条红色的参照线,但仍然有小部分的数据偏离这条参照线,说明这五只股票和指数的数据拟合并不好。进一步通过python进行p值计算得到表3-4数据,从p值上可以看出选取的五只股票与上证指数和深证成指均不严格服从正态分布。
图3 -2 个股与指数的QQ图
表3 -4 正态分布检验值
四、收益分析与投资组合的模拟优化
在这个章节里我们根据开始的数据进行投资组合收益分析并对投资组合从资本资产定价的角度做出相关的优化,得出最优的投资组合权重。
(一)收益分析
在上一章节我们对五只股票和上证指数深证成指做了正态分布检验,在这一章我们将进行投资收益分析与投资组合优化,继续使用上面得到的对数收益率数据得到年化收益率(见表4-1)。进一步我们可以得到协方差矩阵,协方差矩阵是投资组合选择过程的核心部分,根据协方差矩阵我们依靠python可以计算出一个投资权重:中顺洁柔、中国电影、东阿阿胶、赣锋锂业、贵州茅台分别对应0.01841974、0.02340192、0.19381737、0.07023924、0.36970651。但该权重仅仅是作为一个参考, python在这里给出的这组投资组合仅仅是基于历史数据的基础上遵循了最小方差的原则,因为在方差为0.05在该投资组合下,投资者能获得年化20%的收益。这种基于历史数据的投资组合收益分析给出了一种最基础的投资组合方案,能为分析师从不同角度提供数据上的支撑帮助。
表4 -1 年化收益率
(—表4-1续)
(二)投资组合模拟优化
当然,python的投资组合分析并不是单一的组合,其基于蒙特卡洛模拟判断其收益与形态,并对投资比重进行随机组合得到一系列的投资组合收益和波动率(如图4-1,其中纵坐标为期望收益,横坐标为波动率);蒙特卡洛模拟现阶段在金融领域的运用主要是分析投资组合的收益与波动,在图4-1中每一个点都代表了不同的投资组合权重下所得到的期望收益与波动率,每一个投资组合都是相对独立的。越下方的点说明其收益越小波动越大。蒙特卡洛模拟的投资组合形成了一个可行集,在这个可行集里存在着各类投资组合,python会对投资组合根据不同的角度进行优化。
图4 -1 预期投资组合收益与方差
1.最大夏普指数的情况下最优投资比例为:中顺洁柔13.9%;赣锋锂业13.9%以及72.2%投资于贵州茅台,而剩余的两只股票权重为0。在这种最大夏普指数情况下按此比重投资,在28.6%的波动率情况下能够获得42.2%的年收益率,此时的最优夏普指数为1.476,对于投资者来说是一个较为优秀的组合。
2.最小波动率的情况下最优投资比例为:中顺洁柔1.1%;东阿阿胶0.1%;另外三只股票权重为0。此时的波动率为17.3%,最优夏普指数为0.196。可以看出这种情况下python给出的信息侧面表示了为避免投资股票市场带来的波动,个人投资者可以将极少量资金投资股市,而将剩余的极大部分资金用于投资其他波动性小的金融产品,在这里python给出的结果是98.7%的资金用于投资标的资产是上证指数的基金。我们通过这两种情况的比较发现虽然最小波动的情况下波动率降低了11.3%,但是收益率也同样降低了。
由于每次选取的个股不同,这两种情况下的个股投资比重也会不同,最后带来的两种方式估算出的收益、波动率和夏普比率都会是不同的。因此本文的分析是基于目前所选取的股票进行的,对两种方式呈现的数据进行比较分析不难得出一个结论:虽然股票市场上很多投资者都属风险厌恶型,但是最大夏普指数的投资组合收益明显高于最小波动率的投资组合,尽管最小波动率的投资组合极大的减少了投资波动(即不确定性),但是其获得的收益甚至无法超过一家银行的大额存单,作为投资者,显然不会选择第二种投资组合,因为它能从银行获取更高的无风险收益。第一种投资组合虽然波动率较高,但其风险补偿收益达到了42.2%,所以说最大夏普指数的投资组合是最优的。
运用python还能做出资本市场线和有效边界,python在很大程度上方便了马科维茨投资组合理论中预期收益率、投资组合方差的计算,并能快速找出最优投资组合,对于马科维茨投资组合理论在中国金融市场中的应用有重要价值。
五、总结与建议
Python进行数据可视化、数据分析是人工智能与金融的又一次碰撞,是金融科技的进一步融合,三十年前金融是金融,科技归科技,三十年后科技为金融赋能。科技给金融带来的不仅仅是便利,更为金融市场的发展提供了新的思路和方向,同时也为从业者带来了更大的挑战和机遇。本文的撰写借助这些方法对数据做了一系列的模拟,最终达到了可视化的目的。近年来,随着券商量化交易系统的出现,市场对于数据分析的需求更加突出,金融数据分析作为量化交易的一个核心环节,一直以来都备受关注。除此之外,对金融数据的分析有助于提取出海量信息背后无法直观表现的规律,这对于个人、企业、国家都至关重要。通过本文四个章节的分析我们能得出python对投资组合分析的促进,在整个数据的可视化过程中python的内嵌包都发挥了极大的作用。虽然python做出的投资组合权重不可能完全按部就班的用于投资中,但其能给出的参考价值是毋庸置疑的,如果在代码中加入投资者的风险偏好,python还能做出不同的投资组合权重,这些都值得进行深入的研究。第三章我们分析了疫情发生前后股票市场的尾部风险变化并作出了可视化图形,非常直观的把疫情前后的个股和上证指数与深证成指的风险变化呈现出来。
利用计算机程序对金融数据进行分析有利有弊,使用者需要根据自身需要做出权衡,程序虽然严格遵循数据、算法等进行数据的处理与分析,但始终无法站在投资者的角度考虑,与投资行为多少会存在一些偏差,所以应当充分考虑多种因素对投资组合的影响,最后再给出严谨的投资建议。同时python对于偏度的测算可以当作是一个较好的风险测度工具,能够在重大卫生事件或者国际事件发生前后对偏度和峰度进行分析,风险管理部门可以针对性的进行事后风险管理,同时监管机构也可以针对个股按半年度、年度的方式测算峰度与偏度的变化,从而提前做出风险警示与风险控制。