APP下载

基于时间序列的热门股票分析与推荐系统的设计与实现

2023-01-11张晓涛

现代计算机 2022年20期
关键词:流程图股票逻辑

陈 磊,张晓涛

(1.汕尾市公安局,汕尾 516600;2.佳都科技集团股份有限公司,广州 510000)

0 引言

20世纪80年代,一些投资者开始利用计算机研究金融数据,并初显成效。20世纪末,投资者把计算机技术进一步应用在金融数据分析上,进行模型设计,构建股票投资组合[1]。随着全球金融市场的繁荣发展,股票数据呈现海量化、密集化、多样化的趋势,基于大数据的数据挖掘技术,在股票趋势分析领域开始广泛应用,投资者对于投资、理财模型的接受度与认知度不断提升。

基于时间序列的股票数据分析与推荐,可以调用多个数据源、多个数据内容,爬取多个相关金融网页的分析内容,实现股票交易信息上的“多目多耳”,摆脱传统股票交易过程中的信息获取内容少、信息获取时间长、交易判断单一、随意等缺点,实现股票实时信息监控、单股评分、单股走势预测、各大证券机构持仓情况等功能,提供了一种科学的衡量机制。

本设计主要实现的是如何使用Python的GUI编程以及网络爬虫、时间序列等相关技术,开发一个实时的、分析内容广的股票分析与推荐系统。为了保证股票分析与推荐的准确性,在股票的分析预测上选择了时间序列算法,在股票的推荐评测上选择爬取国内市场份额最大的同花顺金融网,在数据源的选择上选择国内股票信息面最广的Tushare模块库和实时更新最快的新浪端口,在GUI编程上选择Python自带GUI库,也是事实上的标准GUI的Tkinter模块。

本设计的主要内容如下:

(1)爬取同花顺金融网的大盘信息、股票评价、机构操作以视图和表格情况展示给用户。

(2)用时间序列算法对获取的数据源进行分析与预测。

(3)将端口获取的实时数据导入模板,以网页的形式展示给用户。

(4)设计合理化、人性化的操作界面,方便用户对股票信息的获取与分析。

1 相关理论阐述

1.1 Tkinter

Tkinter是Python标准GUI库,支持跨平台运行,可以在Windows/Linux/Unix/Macintosh等操作系统中使用。Tkinter继承了Python语法简洁、代码易读的基本特点,使用起来非常简单。作为Python GUI开发工具之一,它具有GUI软件包的必备常用功能,提供了不同类型的窗口控件、窗口布局管理器、事件处理机制等。

1.2 Matplotlib

Matplotlib是一个用Python语言编写的二维图形库,它充分利用了Python数值计算软件包的快速精确的矩阵运算能力,具有良好的作图性能[2]。Matplotlib在跨平台交互环境和各种硬拷贝格式中发布高质量的图形,可以快捷且高效地创建各种类型的二维图表和一些基本的三维图表,它是Python中最常用的可视化工具之一。Matplotlib继承了Python简洁优雅的特点,有着十分出色的绘图性能,并设计了大量类似于Matlab的字符函数,所以这些功能很容易迅速使用,特别是对于熟悉或者精通Matlab绘图功能的人来说更是如此。

1.3 时间序列

时间序列分析是一种现代的统计分析预测方法,广泛应用于自然科学和社会科学领域。ARIMA模型作为一种重要的时间序列模型,得到了广泛的应用。时间序列是指根据有序排列得到的一列实际观测值,这一组随机数据通常反映同一观察对象在不同时刻的数值。时间序列的特点主要表现为:①观测值是有序排列的;②观测值是随机的;③观测值之间存在依赖关系或相关关系;④在整体方面体现出一种明显的趋势[3]。

相邻观测值之间的相关性是时间序列最典型的特征之一,也被称为相关性,它反映了其内涵的大量信息和实际意义。时间序列本身可以表示多个随机变量,是每个变量对应的唯一样本观测值,对于这些变量只有一个历史观测数据。数理统计方法是由一个总体,即一个随机变量通过几个样本观测来进行数据的推测,时间序列分析会以这些样本为基础,由于整体的性质,无法通过数理统计分析来处理。

如果时间序列不稳定,则观测值的平均值在任何时候都是不同的,而且每一个平均值只使用一个唯一的观测值来计算,少量的数据来计算统计无法保证其准确性。当数据相对平稳时,可以列出的几个随机变量,它们的平均值是相同的,它们被认为是相同的总体。数据可以被认为是来自同一总体的样本,然后可以用数理统计的方法来分析序列。

在以实际值为基准来分析随机过程的特征时,通常需要对该数据组的总体特征做出一些简化假设,在这种假设下,稳定性是能够确保的最基本假设,该序列组是稳定的统计特征,不易改变,因此在模型识别前应事先对这两个特征进行检查,如果要确定任何一组时间序列是否稳定,就要对其进行检查。检查中,我们以均值方程、自协方差、ACF系数这三个特征值为基准[4]。

在观测一个相对平稳的时间序列时,平均值总是恒定在一定的范围内,协方差函数只与记录的时间长度有关,所以输出时间序列图在某个常数附近浮动,变化范围很小,如果我们观察平稳序列的自相关图,其平均值为0,出现的只能是拖尾状态或者截尾状态,如果时间序列的自相关图逐渐或有规律地减小,则可以得到信息:该数据集具有一定的趋势或某种周期性。

2 系统体系架构

本系统的开发模式为三层模块渐进开发,包括了界面模块、逻辑模块和数据模块,系统体系架构图如图1所示。

图1 系统体系架构图

界面模块是用户与软件的主要交互部分,收集用户的请求。用户提交请求后,根据请求内容进行分类处理,提交给业务逻辑层,并将处理的数据传递给数据模块。同时也将逻辑模块传递上来的数据放置在对应的模板里,生成相关图表。

逻辑模块主要是业务逻辑的处理以及对用户的各种需求的数据信息进行处理。逻辑模块接收到源自界面模块上用户的请求之后,调用对应的业务逻辑进行处理,业务逻辑是具体的业务处理部分,并将处理的结果传递到界面模块展示在用户面前。逻辑模块是对界面模块传递来的参数进行处理,通过对应的业务逻辑方法提取对应的值,并将提取出的值传递给数据模块,或直接调用对应的包[5]。逻辑模块包括了对界面模块传递下来的参数的判断,如果其值不在处理范围内,则会直接返回到界面模块。

数据模块是对所需数据的提取与反馈,业务逻辑处理时,会对相应的数据进行选择与提取,在获取页面之后,会根据逻辑模块的解析内容来提取所需信息,指定的数据网读取数据,在读取完成后将读取的数据返回给逻辑模块。

3 系统功能结构

本系统的主要功能模块包括股票分析模块与股票推荐模块,各模块主要功能结构如图2所示。

图2 软件功能结构图

主界面是用户分析股票的入口,通过输入股票代码来启动股票分析模块,随后会反馈出该股票的评价。分析模块包含三个内容,股票走势预测、大盘对比分析、近期机构操作。股票走势分析包含有基于时间序列的模块。

股票推荐模块包含龙虎榜信息与实时股票信息,其中龙虎榜又包含昨日龙虎榜与个股上榜次数两类。

4 系统工作流程

本系统是基于时间序列的热门股票的分析与推荐,展示模块、逻辑处理模块、数据模块均部署在本地的Windows主机上,从金融网页和股票API接口中的Tushare包获取所需的数据与信息,并加以归类与展示。本系统的逻辑处理模块运行于Anaconda3内的Python3.7环境下,使用Python语言进行设计与开发,整体工作流程如图3所示。

图3 系统工作流程示意图

用户在本地的Windows打开系统后,用户发出的请求会被展示模块转发至逻辑处理模块,逻辑处理模块会根据用户在展示模块的操作来对数据模块传递请求,数据模块接收到经过业务逻辑处理模块处理完毕后的用户请求,会返回对应的数据给业务处理模块,业务处理模块收到对应的数据后会返回给展示模块,展示模块最终会生成相应的信息或图表展示给用户。

5 系统功能设计

5.1 主页面设计

本系统的主页面由用户交互界面与三个主菜单组成,交互界面上有用户输入栏与开始分析按钮。交互页面可以显示出用户输入的股票代码的股票评价与股票分数、机构持仓情况。第一个主菜单是“股票分析”,其包含的功能依次为与深证成指对比、近期机构操作、股票预期,其中股票预期又含有股票近期趋势和股票周期趋势两类。第二个主菜单是“龙虎榜”,其包含的功能为昨日龙虎榜与个股上榜,其中个股上榜又分为5日内、10日内、30日内、60日内。第三个主菜单为“实时数据”,其中含有股票看板功能。

主页面的界面设计是通过Tkinter设计完成的,通过配置Tkinter的窗口部件来设置按钮、文本、菜单、字体等属性。主界面用到的窗口部件的描述与作用如表1所示。

表1 Tkinter使用项的描述与作用

本系统的功能切换是通过树状菜单来完成的,Menu窗口部件可以生成树状的多级菜单,每个菜单内的选项可以指定与对应方法连接,单击后会调用该方法,完成切换视图与逻辑模块的效果,Menu调用的方法及作用如表2所示。

表2 Menu调用项与其描述

在主界面上显示的个股评价是由多个Label组件构成的,Label组件主要用于显示文本,且Label组件使用双缓冲,这样可以随时更新爬取内容。Label调用的方法及描述如表3所示。

表3 Label调用项与其描述

5.2 主界面交互设计

图4为交互设计流程图,用户在Entry定义的文本输入框中输入自己想分析的股票代码,输入完成后本系统会判断用户输入的股票代码是否存在。若不存在,则会弹出提示框提示用户再次输入;若存在,则会以Label的形式返回股票评分、股票趋势、机构持仓情况三类信息展示给用户,同时对股票评分进行判断,高分的显示红色,低分的显示绿色。

图4 交互设计流程图

5.3 “与深证成指对比”功能设计

与深证成指对比就相当于与大盘对比,通过与大盘的对比来判断一个股票的走势趋势、股票质量。通过网络获取大盘数据,与用户指定的股票进行对比,用Matplotlib进行绘图与展示,再通过爬虫定向爬取金融网上对该股票与大盘对比的分析与评价,并输入到图表中。通常情况下,趋势与大盘类似,且运行轨迹在大盘上方的股票一般质量都很高;趋势与大盘类似且运行轨迹在大盘下方的股票一般相对稳定,适合中长期操作;趋势与大盘不一致的股票一般为高风险股票,适合短期操作且慎重考虑。“与深证成指对比”功能流程图如图5所示。

图5 “与深证成指对比”功能流程图

5.4 “近期机构操作”功能设计

近期机构操作指的是近期各大证券、基金公司对该股票的操作,可以通过观测近期机构操作来判断一个股票的走势趋势、股票质量,“近期机构操作”功能流程图如图6所示。

图6 “近期机构操作”功能流程图

通过网络获取用户指定的股票的近期机构操作,用爬虫定向爬取金融网上各大机构近期对该股票的评级、时间等内容,再用Matplotlib对数据内容进行绘制与展示,把数据与信息传递给用户。通常情况下,机构所掌握的信息与数据比普通的散户股民要多很多,机构的总体操作是跟随着大盘与宏观经济的,相对而言,机构大量买入和增持的股票不一定会大幅增长,但一般都是质量较高的股票;机构大幅卖出或者减持的,那就需要谨慎,有可能大跌或者开始缓慢地走下坡路[6]。

5.5 “股票预测”功能设计

该功能基于时间序列的ARIMA模型进行预测,股票预测功能中的“周期预测”功能流程图如图7所示。

图7 “周期预测”功能流程图

ARIMA模型可理解为AR+I+MA三个部分,以三个变量参数p、d、q为基准进行分析,是一种估计时间走向的模型。其中AR部分指的是Auto Regressive自回归,描述当前值和历史值之间的关系,AR部分用来确定p的取值,p表示滞后p阶的AR模型,即当前时间点与前p个时间点的关系。在模型中通过PACF图观察进入置信区的数值,并以其为参考来判断p参数的选取。I部分为确定d的取值,d表示差分的阶数,ARIMA模型的训练需要相对稳定的时间序列,所以需要将不稳定的时间序列转化为相对稳定的时间序列,大部分情况下使用差分这种方式来进行转换。差分的方法就是做差:一个数据序列中的前一项减去后一项来获取差值序列,这是常用的一阶差分。通常情况下,这种时间序列已经趋于稳定。MA部分指的是Moving av⁃erage滑动平均,描述误差之间的关系,描述自回归部分的误差累计,MA部分用来确定q的取值,q表示前q个时间点的时间差,在模型中通过ACF图观察进入置信区的数值,并以其作为参考,来判断p参数的选取[7]。

用户输入股票代码后会获取相关股票数据,随后对数据进行清洗与转换,再对处理过的数据进行差分处理,将数据稳定化后周期性提取数据,接下来通过观测周期数据的ACF图与PACF进入置信区的数值来确定p与q,然后利用arima_model库内的ARIMA函数进行模型的训练,最后用Matplotlib生成预测图展示给用户。

5.6 “龙虎榜”功能设计

“龙虎榜”是指日价格涨幅偏离值7%、日换手率达到20%、日价格振幅达到15%、连续三个交易日内涨幅偏离值累计达到20%的股票汇总,在龙虎榜上的股票并不全是优质股,但这些股票最能直接反映整个市场的变化,通过分析龙虎榜上的股票可以间接地获取当前市场变化趋势,为下一次的投资获取更多的信息。

5.6.1 “昨日龙虎榜”功能设计

该功能通过股票API接口进行数据获取,用户可以通过“昨日龙虎榜”来获取昨天的龙虎榜信息。 “昨日龙虎榜”功能流程图如图8所示。

图8 “昨日龙虎榜”功能流程图

5.6.2 “个股上榜统计”功能设计

该功能通过股票API接口进行数据获取,用户可以通过“个股上榜统计”来获取5日、10日、30日、60日中股票上榜次数前二十的股票信息。“个股上榜统计”功能流程图如图9所示。

图9 “个股上榜统计”功能流程图

5.7 “股票看板”功能设计

股票看板对接的数据网接口是实时信息,实时获取股票的各项数据指标,动态获取股民最常观测的数据,如大盘信息、单股价格、股价涨幅等,经过清洗与整理后存放在准备好的模板中,由模板页生成视图展示给用户。“股票看板”功能流程图如图10所示。

图10 “股票看板”功能流程图

6 系统模块实现

6.1 开发环境建立

图11为系统实现环境,本系统基于Ana⁃conda中的Python3.7环境下实现,软件界面设计友好、实用性强、可管理性与可维护性高。

图11 软件实现环境

在PyCharm Community Edition 2020.1平台下完成系统的开发与设计,在该平台工具下,可以实现Python相关程序的开发、优化以及整合。Anaconda能够兼容Python的开源代码及各类的API接口和安装包,降低了开发人员的工作量。通过采取优化代码、整合重复内容等措施,能够保证本系统在高效且平稳的状态下运行,具备较强的安全性、可拓展性和稳定性。对于具体硬件的选择,本系统对硬件配置的要求不高,但须保证软件可以在MicrosoftWindows XP、Microsoft Windows 7、Microsoft Windows 8、Microsoft Windows 10及微软下一代操作系统中运行。

6.2 “股票周期趋势”功能实现

通过ARIMA模型来预测股票三个月后的趋势,从股票API库Tushare中选择2019年1月至今的数据为数据集,随后将数据类型进行转换,对转换后的数据集进行一阶差分稳定化处理,然后以周二为基准点按周进行数据提取,提取完成后用auto_arima函数对数据集求导,得出最优的q值与p值,接着用ARIMA进行模型训练,生成预测值,最后以Matplotlib绘制成图片展示给用户。“股票周期趋势”功能核心代码如下:

7 结语

本文设计与实现了基于时间序列的热门股票分析与推荐系统,利用各个金融网的各类股票数据、股票指标、股票分析评价等,先将所需的股票数据爬取下来,再配合Anaconda3中Python的科学分析库,辅以Matplotlib生成可视化图片,最后用Tkinter制作界面。主要内容包括以下几个方面:

(1)对现有的股票交易过程进行了分析,对系统设计的关键技术进行了研究。

(2)本设计的主要目标是完成一个股票分析与推荐的系统,因此研究了大数据时代背景下的股民在股票交易过程中对股票买卖因素,并根据选取股票的场景设计开发出了具体的功能模块。

(3)本设计实现了股票信息与数据的传递,简化股民股票交易过程的信息摄取,为股民的投资决策提供了科学的依据,达到了预期的目标。

同时也存在一些需要改进的方面:

(1)在股票数据分析的数据转换过程中,并没有对股票市场的所有技术指标进行数据转换,只是提取了用户最为关注的几个分析点。因此,在股票数据分析未来的更新过程中,需要对各项分析指标进行更全面的更新与转换。

(2)股票交易环节中存在着对交易环节影响很深的市场情绪因素,这一点需要进行观测与捕捉,应尝试分析舆论中的情绪因素与经济总体趋势因素对股票的影响。

(3)在股票数据分析与推荐的功能中,还需对数据分析部分的算法进行进一步的优化,或者提供更加优秀且稳定的算法,这样才能够提供给股民更加科学、合理的股票数据信息。

猜你喜欢

流程图股票逻辑
刑事印证证明准确达成的逻辑反思
逻辑
创新的逻辑
女人买买买的神逻辑
本周创出今年以来新高的股票
本周创出今年以来新高的股票
本周连续上涨3天以上的股票
近期连续涨、跌3天以上的股票
专利申请审批流程图
专利申请审批流程图