计算机毕设 基于大数据的股票量化分析与股价预测系统

文章目录

  • 0 前言
  • 1 课题背景
  • 2 实现效果
  • 3 设计原理
    • QTCharts
    • arma模型预测
    • K-means聚类算法
    • 算法实现关键问题说明
  • 4 部分核心代码
  • 5 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于大数据的股票量化分析与股价预测系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

1 课题背景

基于大数据的股票可视化分析平台设计,对股票数据进行预处理,清洗以及可视化分析,同时设计了软件界面。

2 实现效果

价格可视化
在这里插入图片描述
魔梯访问与指标计算

在这里插入图片描述
聚类分析
在这里插入图片描述

3 设计原理

QTCharts

简介

QtCharts是Qt自带的组件库,其中包含折线、曲线、饼图、棒图、散点图、雷达图等各种常用的图表。而在地面站开发过程中,使用折线图可以对无人机的一些状态数据进行监测,更是可以使用散点图来模拟飞机所在位置,实现平面地图的感觉。

使用Qt Charts绘制,大概可以分为四个部分:数据(QXYSeries)、图表(QChart)、坐标轴(QAbstractAXis)和视图(QChartView)。这里就不一一给大家介绍了,下面给大家说一下QtCharts的配置安装。

QtCharts模块的C++类

在这里插入图片描述

arma模型预测

简介

ARMA模型,又称为ARMA (p,q)模型。其核心思想就是当前正如名字所显示的,整个模型的核心就是要确定p和q这两个参数。其中,p决定了我们要用几个滞后时期的价格数据,而q决定了我们要用几个滞后时期的预测误差。

在这里插入图片描述

简单来说,ARMA模型做了两件事。一是基于趋势理论,用历史数据来回归出一个当前的价格预测,这个预测反映了自回归的思想。但是这个预测必然是有差异的,所以ARMA模型根据历史的预测误差也回归出一个当前的误差预测,这个预测反映了加权平均的思想。用价格预测加上误差预测修正,才最终得到一个理论上更加精确的最终价格预测。

比起简单的自回归模型或者以时间为基础的简单趋势预测模型,ARMA模型最大的优势,在于综合了趋势理论和均值回归理论,理论上的精确度会比较高。

'''
    自回归滑动平均模型
'''
from statsmodels.tsa.arima_model import ARMA
from itertools import product
 
 
def myARMA(data):
    p = range(0, 9)
    q = range(0, 9)
    parameters = list(product(p, q))  # 生成(p,q)从(0,0)到(9,9)的枚举
    best_aic = float('inf')
    result = None
    for param in parameters:
        try:
            model = ARMA(endog=data, order=(param[0], param[1])).fit()
        except ValueError:
            print("参数错误:", param)
            continue
        aic = model.aic
        if aic < best_aic:  # 选取最优的aic
            best_aic = model.aic
            result = (model, param)
    return result

K-means聚类算法

基本原理

k-Means算法是一种使用最普遍的聚类算法,它是一种无监督学习算法,目的是将相似的对象归到同一个簇中。簇内的对象越相似,聚类的效果就越好。该算法不适合处理离散型属性,但对于连续型属性具有较好的聚类效果。

聚类效果判定标准

使各个样本点与所在簇的质心的误差平方和达到最小,这是评价k-means算法最后聚类效果的评价标准。

在这里插入图片描述

算法实现步骤

1)选定k值

2)创建k个点作为k个簇的起始质心。

3)分别计算剩下的元素到k个簇的质心的距离,将这些元素分别划归到距离最小的簇。

4)根据聚类结果,重新计算k个簇各自的新的质心,即取簇中全部元素各自维度下的算术平均值。

5)将全部元素按照新的质心重新聚类。

6)重复第5步,直到聚类结果不再变化。

7)最后,输出聚类结果。

算法缺点

虽然K-Means算法原理简单,但是有自身的缺陷:

1)聚类的簇数k值需在聚类前给出,但在很多时候中k值的选定是十分难以估计的,很多情况我们聚类前并不清楚给出的数据集应当分成多少类才最恰当。

2)k-means需要人为地确定初始质心,不一样的初始质心可能会得出差别很大的聚类结果,无法保证k-means算法收敛于全局最优解。

3)对离群点敏感。

4)结果不稳定(受输入顺序影响)。

5)时间复杂度高O(nkt),其中n是对象总数,k是簇数,t是迭代次数。

算法实现关键问题说明

K值的选定说明

根据聚类原则:组内差距要小,组间差距要大。我们先算出不同k值下各个SSE(Sum of
squared
errors)值,然后绘制出折线图来比较,从中选定最优解。从图中,我们可以看出k值到达5以后,SSE变化趋于平缓,所以我们选定5作为k值。

在这里插入图片描述

初始的K个质心选定说明

初始的k个质心选定是采用的随机法。从各列数值最大值和最小值中间按正太分布随机选取k个质心。

关于离群点

离群点就是远离整体的,非常异常、非常特殊的数据点。因为k-means算法对离群点十分敏感,所以在聚类之前应该将这些“极大”、“极小”之类的离群数据都去掉,否则会对于聚类的结果有影响。离群点的判定标准是根据前面数据可视化分析过程的散点图和箱线图进行判定。

4 部分核心代码

#include "kmeans.h"
#include "ui_kmeans.h"

kmeans::kmeans(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::kmeans)
{
    this->setWindowFlags(Qt::Dialog | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
    ui->setupUi(this);
}

kmeans::~kmeans()
{
    delete ui;
}

void kmeans::closeEvent(QCloseEvent *)
{
    end_flag=true;
}

void kmeans::on_pushButton_clicked()
{
    end_flag=false;
    //读取数据
    QFile sharpe("sharpe.txt");
    sharpe.open(QIODevice::ReadOnly|QIODevice::Text);
    std::vector<std::array<double,2>> data;
    while(!sharpe.atEnd())
    {
        QStringList linels=QString(sharpe.readLine()).split(',');
        qreal mean=linels[3].toDouble();
        qreal sd=linels[4].toDouble();
        if(mean>-0.06&&mean<0.06&&sd<0.12)data.push_back({mean,sd});
    }
    std::random_shuffle(data.begin(),data.end());
    sharpe.close();
    //聚类
    ui->pushButton->setText("聚类中...");
    QApplication::processEvents();
    auto labels=std::get<1>(dkm::kmeans_lloyd(data,9));
    ui->pushButton->setText("开始");
    QApplication::processEvents();
    //作图
    QChart *chart = new QChart();
    //chart->setAnimationOptions(QChart::SeriesAnimations);
    //chart->legend()->setVisible(false);

    QList<QScatterSeries*> serieses;
    QList<QColor> colors{
        QColor(Qt::black),
                QColor(Qt::cyan),
                QColor(Qt::red),
                QColor(Qt::green),
                QColor(Qt::magenta),
                QColor(Qt::yellow),
                QColor(Qt::gray),
                QColor(Qt::blue),
                QColor("#A27E36")
    };
    for(int i=0;i<9;i++){
        QScatterSeries *temp = new QScatterSeries();
        temp->setName(QString::number(i));
        temp->setColor(colors[i]);
        temp->setMarkerSize(10.0);
        serieses.append(temp);
        chart->addSeries(temp);
    }
    chart->createDefaultAxes();

    /*
                             v4
-------------------------------------------------------------
      Percentiles      Smallest
 1%     -.023384        -.35985
 5%    -.0115851       -.349373
10%    -.0078976       -.325249       Obs             613,849
25%    -.0037067       -.324942       Sum of Wgt.     613,849

50%     .0000567                      Mean           .0004866
                        Largest       Std. Dev.      .0130231
75%     .0041332        1.28376
90%     .0091571        1.52169       Variance       .0001696
95%     .0132541        2.73128       Skewness       95.21884
99%     .0273964        4.56203       Kurtosis       28540.15

                             v5
-------------------------------------------------------------
      Percentiles      Smallest
 1%     .0073016       4.68e-07
 5%     .0112397       7.22e-07
10%     .0135353       7.84e-07       Obs             613,849
25%     .0180452       8.21e-07       Sum of Wgt.     613,849

50%     .0248626                      Mean           .0282546
                        Largest       Std. Dev.      .0213631
75%     .0343356         3.2273
90%     .0458472        3.32199       Variance       .0004564
95%     .0549695        4.61189       Skewness       68.11651
99%     .0837288        4.75981       Kurtosis       11569.69

     */

    QValueAxis *axisX = qobject_cast<QValueAxis *>(chart->axes(Qt::Horizontal).at(0));
    axisX->setRange(-0.06,0.06);
    axisX->setTitleText("平均值");
    axisX->setLabelFormat("%.2f");

    QValueAxis *axisY = qobject_cast<QValueAxis *>(chart->axes(Qt::Vertical).at(0));
    axisY->setRange(0,0.12);
    axisY->setTitleText("标准差");
    axisY->setLabelFormat("%.2f");

    ui->widget->setRenderHint(QPainter::Antialiasing);
    ui->widget->setChart(chart);

    int i=0;
    auto labelsiter=labels.begin();
    for(auto &&point : data){
        if(end_flag)return;
        serieses[*labelsiter]->append(QPointF(point[0],point[1]));
        i++;
        labelsiter++;
        if(i%1000==0){
            QApplication::processEvents();
        }
    }
}

void kmeans::on_pushButton_2_clicked()
{
    end_flag=true;
}

5 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/125157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单通道低压 H 桥电机驱动芯片AT9110H 兼容L9110 马达驱动芯片

H桥直流电机驱动电路是一种用于控制直流电机运转的电路&#xff0c;其主要特点是可以实现正反转控制&#xff0c;控制电机转速和方向&#xff0c;同时也具有过流保护功能。 H桥电路由四个功率晶体管和一些辅助电路组成&#xff0c;其中两个晶体管用于控制电机正转&#xff0c;…

【Mysql】去重(distinct)

目录 distinct 单字段 多字段 统计&#xff08; count ) distinct name为张三的有5条数据并且重复 单字段 语法&#xff1a; select distnct 字段名 from 表 这里的去重并不是删掉重复 多字段 select distinct 字段名1&#xff0c;字段名2 from 表 统计&#xff08; coun…

java通过FTP跨服务器动态监听读取指定目录下文件数据

背景&#xff1a; 1、文件数据在A服务器&#xff08;windows&#xff09;&#xff08;不定期在指定目录下生成&#xff09;&#xff0c;项目应用部署在B服务器&#xff08;Linux&#xff09;&#xff1b; 2、项目应用在B服务器&#xff0c;监听A服务器指定目录&#xff0c;有新…

【vue会员管理系统】篇五之系统首页布局和导航跳转

一、效果图 1.首页 2.会员管理&#xff0c;跳转&#xff0c;跳其他页面也是如此&#xff0c;该页的详细设计会在后面的章节完善 二、代码 新增文件 components下新增文件 view下新增文件&#xff1a; 1.componets下新建layout.vue 放入以下代码&#xff1a; <template…

学术论文的实证数据来源

一、引言 在当今的学术研究中&#xff0c;数据是至关重要的。无论是自然科学、社会科学还是人文科学&#xff0c;都需要借助数据来支撑和证明其研究假设和理论。然而&#xff0c;数据的来源却是多种多样的&#xff0c;而且不同的学科领域也有其特定的数据来源。本文旨在探讨论文…

30道高频Vue面试题快问快答

※其他的快问快答&#xff0c;看这里&#xff01; 10道高频Qiankun微前端面试题快问快答 10道高频webpack面试题快问快答 20道高频CSS面试题快问快答 20道高频JavaScript面试题快问快答 30道高频Vue面试题快问快答 面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过…

linux 操作系统

先讲一下叭&#xff0c;自己学这的原因&#xff0c;是因为我在做项目的时候使用到啦Redis&#xff0c;其实在windows系统上我其实也装啦Redis上&#xff0c;但是我觉得后期在做其他的项目的时候可能也会用到这个然后就想着要不先学学redis&#xff0c;然后在后面也不至于什么都…

国标28181-2022检测内容GB28181-2022检测内容

目前国标28181-2022平台全项检测一共181项&#xff0c;总的检测相对2016版本要复杂很多&#xff0c;增加了一些比较重要的功能,下面列举下检测项(qq 123011785):

求臻医学MRD产品喜获北京市新技术新产品(服务)证书

近日&#xff0c;北京市科学技术委员会、中关村科技园区管理委员会、北京市发展和改革委员会等五大部门联合公示了2023年度第一批&#xff08;总第十八批&#xff09;北京市新技术新产品&#xff08;服务&#xff09;名单。凭借领先的技术能力、产品创新能力及质量可靠性等优势…

2023最新版本 FreeRTOS教程 -9-互斥量(基本使用和解决优先级反转)

互斥量是一种特殊的二进制信号量 使用场景1 &#xff08;互斥访问&#xff09; 外设的独立访问 如打印 协议操作 使用场景2 解决优先级反转 外设的独立访问 如打印 协议操作 使用场景2 解决优先级反转 我们以较为复杂的场景2来分析 -1- 创建三个任务 优先级从低到高&…

【教学类-40-03】A4骰子纸模制作3.0(6.5CM嵌套+记录表)

作品展示 背景需求 骰子2.0&#xff08;7字形&#xff09;存在幼儿不会“包边”的问题&#xff0c;求助老师帮忙示范&#xff0c;最后累的还是老师 1.0版本&#xff0c;边缘折线多&#xff0c;幼儿剪起来费力。 2.0版本&#xff0c;边缘折线多&#xff0c;幼儿剪起来费力。&a…

【ChatGLM2-6B】小白入门及Docker下部署

【ChatGLM2-6B】小白入门及Docker下部署 一、简介1、ChatGLM2是什么2、组成部分3、相关地址 二、基于Docker安装部署1、前提2、CentOS7安装NVIDIA显卡驱动1&#xff09;查看服务器版本及显卡信息2&#xff09;相关依赖安装3&#xff09;显卡驱动安装 2、 CentOS7安装NVIDIA-Doc…

“产业大数据”助推园区实现可持续发展!

​产业园区在现代经济体系中扮演着重要角色&#xff0c;不仅是地方经济的重要支柱&#xff0c;更是企业发展的舞台。产业园区要想实现可持续的长远发展&#xff0c;不仅需要不断的招引优质企业入驻&#xff0c;更要时刻关注园内的企业&#xff0c;培育有潜力的企业&#xff0c;…

华为OD机试 - 最优策略组合下的总的系统消耗资源数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、思路 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷…

FPGA时序分析与约束(10)——生成时钟

一、概述 最复杂的设计往往需要多个时钟来完成相应的功能。当设计中存在多个时钟的时候&#xff0c;它们需要相互协作或各司其职。异步时钟是不能共享确定相位关系的时钟信号&#xff0c;当多个时钟域交互时&#xff0c;设计中只有异步时钟很难满足建立和保持要求。我们将在后面…

如何改善食品饮料包装生产企业的OEE?

食品饮料这类商品在我们的日常生活中十分常见&#xff0c;它们存在于各类商店、超市或路边的小店里。而食品饮料的包装是吸引人们购买该产品的一个重要因素。为了在这个市场中脱颖而出并提高盈利能力&#xff0c;企业需要关注设备的综合效率&#xff0c;即OEE&#xff08;Overa…

数据结构-单链表-力扣题

移除链表元素 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;和前面学的单链表的中间删除数据一样&#xff0c;使要被删除节点的前一个节点指向下要被删除节点的下一个节点&#xff0c;然后把要被删除的节点free掉。 具体实现过程&#xff1a;先…

docker搭建mysql环境

1. 基础环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 2. 下载安装 使用docker命令下载mysql镜像 [rootzhouwei ~]# docker pull mysql:8.0.29查看docker仓库是否已经下载了mysql镜像 [rootzhouwei ~]# docker images将mys…

【PHP】医院HIS手术麻醉临床信息管理系统源码 实现术前、术中、术后全流程管理

手术麻醉系统是一套以数字形式与医院信息系统&#xff08;如HIS、EMR、LIS、PACS等&#xff09;和医疗设备等软、硬件集成并获取围手术期相关信息的计算机系统&#xff0c;其核心是对围手术期患者信息自动采集、储存、分析并呈现。该系统通过整合围手术期中病人信息、人员信息、…

最速下降法

目录 前言 一、梯度下降相关数学概念 二、最速下降法实战 2.1、例图1 2.2、Matlab代码实现 2.3、例题2 三、小结 前言 最速下降法&#xff0c;在SLAM中&#xff0c;作为一种很重要求解位姿最优值的方法&#xff0c;缺点很明显&#xff1a;迭代次数太多&#xff0c…