研究方法和步骤
本研究的研究方法主要包括数据收集、数据清洗、数据分析、模型建立和Web应用程序开发。具体步骤如下:
(1)数据收集:本研究将使用IG507数据平台的股票的实时数据。
(2)数据清洗:对收集的数据进行清洗和预处理,去除缺失值和异常值等。
(3)数据分析:使用Python中的pandas、numpy、matplotlib等库对数据进行分析和可视化处理,进一步提取数据特征和规律。
(4)模型建立:基于ARIMA模型建立股票预测模型,并进行模型优化和参数确定。
(5)Web应用程序开发:使用Flask框架开发Web应用程序,实现用户可以通过该应用程序对多支股票进行历史数据查询和未来走势预测。
API接口数据收集
目前,许多证券公司和数据服务商都提供了开放的API接口,供开发者获取股票数据。以国内知名的金融数据服务商“IG507 ”为例,其提供了多个API接口,可以获取到股票的历史价格、交易量、市值等数据。使用API接口可以方便快捷地获取数据,并且数据质量相对较高。但是,API接口获取数据的频率和数量都有限制,需要进行认证和授权,对于数据使用的商业性质也有一定的限制。
本项目的数据是从IG507 数据平台,通过接口的方式获取的。所有的数据基本可以做到实时同步,除了几个接口有请求限制的。
股票预测技术
2.4.1 ARIMA模型原理
ARIMA模型是一种时间序列模型,用于对时间序列进行预测和建模。ARIMA模型由AR(p)和MA(q)模型组成,AR表示自回归模型,MA表示移动平均模型,p和q分别表示模型中的自回归项和移动平均项。同时,ARIMA还有一个集成分差的差分操作,即差分次数d,表示将原始时间序列数据进行d次差分,使其成为一个平稳时间序列。
AR(p)模型是基于过去p个时间点的自回归模型,即当前时间点的值与前面p个时间点的值有关。而MA(q)模型是基于过去q个时间点的误差项的加权和的移动平均模型,即当前时间点的值与前面q个时间点的误差有关。
ARIMA模型的建立主要包括三个步骤:模型选择、参数估计和模型检验。模型选择时可以根据时间序列的自相关和偏自相关函数图像来确定p和q的值,差分次数d可以根据ADF检验来确定。参数估计使用极大似然估计法来估计模型中的系数。模型检验时可以通过残差序列的ACF图和Ljung-Box检验来检验模型的拟合效果。
2.4.2 参数选择和模型优化
在ARIMA模型中,模型参数的选择对预测效果影响非常大,因此需要通过一定的方法来选择最优的模型参数。参数选择主要包括p和q的确定以及差分次数d的确定。
选择p和q的值时,可以通过查看时间序列的自相关和偏自相关函数图像来确定。自相关函数(ACF)和偏自相关函数(PACF)是表示时间序列相关性的两个指标,其中ACF衡量的是序列在不同滞后阶段之间的相关性,PACF衡量的是两个时间点之间的相关性,消除了之前滞后项的影响。选择p和q的值时,可以根据ACF和PACF的图像来确定。
确定差分次数d时,可以使用ADF检验。ADF检验是一种检验时间序列平稳性的方法,可以判断一个时间序列是否需要进行差分操作。
模型优化主要包括参数调整和差分操作的调整。在参数调整时,可以通过网格搜索等方法来寻找最优的参数组合,以达到最佳的预测效果。在差分操作的调整时,可以通过调整差分次数d的值来使时间序列更加平稳,从而提高模型的拟合效果。
在股票预测方面,ARIMA模型可以使用历史的股票价格和交易量等数据,来预测未来的价格变动。本研究选取了从2000年到2022年的每日的股票数据,并按周进行了数据处理。首先,通过Python的Pandas库将数据转换成周数据,去掉空的数据,生成CSV文件,作为训练的数据。然后,选取从2022年到2023年的时间段进行预测,并进行了ARIMA模型的优化。
具体来说,ARIMA模型有三个重要的参数:p、d、q。其中,p表示自回归项,d表示差分项,q表示移动平均项。本研究使用Grid Search算法,对这三个参数进行了优化,得到了最优的模型。同时,为了提高模型的准确性,还对数据进行了对数变换。
预测结果的准确性可以使用各种指标来衡量,例如均方根误差(RMSE)、平均绝对误差(MAE)、平均绝对百分比误差(MAPE)等。本研究使用这些指标对预测结果进行了评估,结果表明ARIMA模型在股票预测方面具有一定的准确性和实用性。
总之,ARIMA模型是一种常用的时间序列预测模型,本研究将其应用于股票预测中,并对数据进行了优化和处理,得到了较为准确的预测结果。结果如图所示:
Web应用程序设计与实现
Flask框架应用
Flask是一个使用Python编写的轻量级Web应用程序框架,具有简洁、易扩展和灵活的特点,因此被广泛应用于Web开发领域。在本研究中,我们使用Flask框架搭建Web应用程序,实现股票数据的展示和预测功能。
具体来说,我们使用Flask提供的路由机制实现不同URL地址对应不同的函数,通过HTML页面和JSON数据实现前后端交互。同时,我们还使用了Flask提供的扩展模块,如Flask_SQLAlchemy用于数据库管理、Flask_WTF用于表单处理等,从而简化了开发过程。
Flask在系统中得配置:定义一个create_app的函数,它创建并返回一个Flask应用程序实例在这个函数中,首先创建一个Flask对象,并将其存储在app变量中。如果注释掉了第一行代码并使用了第二行代码,则将使用指定的文件夹作为静态文件夹和模板文件夹,否则将使用默认的文件夹。
接下来,使用CORS函数设置跨域请求,该函数使得应用程序可以接受来自其他域的HTTP请求。supports_credentials参数设置为True,以支持跨域请求时的身份验证。
然后,使用app.config.from_object函数加载应用程序的配置,该配置在settings.ProductionConfig对象中定义。在这里,该函数将从名为ProductionConfig的类中加载应用程序的配置。
3.2 前端页面设计
前端页面设计是实现股票数据的可视化和交互展示,主要使用了Vue.js框架和ant-design-vue组件库。Vue.js是一款流行的前端JavaScript框架,能够帮助开发者构建复杂的单页应用程序。而ant-design-vue则是基于Ant Design的Vue.js组件库,提供了多个高质量的UI组件和交互效果。
在本项目中,前端页面设计主要包括以下几个方面:
数据可视化:使用echarts进行股票数据的可视化展示,包括分时图、K线图、成交量图等。
其中K线图的代码如下图:
数据筛选:使用日期选择器等组件实现对股票数据的筛选,方便用户查看指定时间段的数据。
股票预测:将ARIMA模型预测的结果展示在页面上,以便用户了解股票未来的价格走势。
其他功能:包括用户登录注册、个人中心等模块,使用户能够方便地管理自己的股票数据和个人信息。
页面结构如图所示:
3.3 后端接口设计
后端接口设计是Web应用程序开发过程中重要的一部分,直接影响前后端数据交互和后端业务逻辑实现。在本研究中,我们使用Flask提供的路由机制实现了RESTful API,通过JSON格式数据进行前后端交互。
具体来说,我们实现了如下几个API接口:
获取股票数据:通过GET方法获取指定股票代码、时间段的股票数据,返回JSON格式数据。
获取股票预测结果:通过POST方法提交指定股票代码、预测时间段的参数,返回JSON格式数据。
用户注册:通过POST方法提交用户名、密码等参数,返回JSON格式数据。
用户登录:通过POST方法提交用户名、密码等参数,返回JSON格式数据。
通过以上接口,我们实现了股票数据的展示和预测功能,同时支持用户注册和登录功能。
登录接口如下图所示: