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

news2024/11/28 8:37:14

文章目录

  • 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 最后

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去改进YOLOv5算法

智能安全配电装置在临时展会场所中的应用

【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性&#xff0c;针对此类场所中隐含的电气安全隐患问题&#xff0c;结合智能安全配电装置的功能&#xff0c;从用电设备的接地、线路的安装与敷设、设备的维护和管理等方面介绍了其安全保障技术&#xff0c;以保证此临…

蓝鹏测控平台软件 智能制造生产线的大脑

测控软件平台&#xff0c;是由包括底层驱动程序、通讯协议等&#xff0c;集数据采集、自动反馈控制、信息分析以及多种工程应用于一体的一种电子信息处理平台。 蓝鹏测控软件平台目前支持各种文本标签 、数字标签&#xff1b;支持趋势图、波动图、缺陷图及统计图表。多端口实现…

马斯克的人工智能初创公司xAI推出首款AI助手Grok;吴恩达生成式AI新课

&#x1f989; AI新闻 &#x1f680; 马斯克的人工智能初创公司xAI推出首款AI助手Grok&#xff0c;并放入特斯拉的Premium Plus套餐中 摘要&#xff1a;本周&#xff0c;埃隆马斯克发布了多篇帖子&#xff0c;宣布其人工智能初创公司xAI将推出首款AI助手Grok&#xff0c;并将…

回顾上海2023 SNEC ES+ ,这些精彩瞬间值得定格!

11月3日&#xff0c;为期三天的2023 SNEC ES完美落幕。科士达以13重磅产品、4解决方案惊艳全场。光储场景应用全覆盖&#xff0c;让现场嘉宾沉浸式地感受到科士达在光伏、储能领域的领先技术和匠心品质。下面让我们一起打开展会长卷&#xff0c;再阅精彩。 ​“储”类拔萃&…

Fortigate SSL VPN路径遍历漏洞(CVE-2018-13379)

Fortigate SSL VPN路径遍历漏洞&#xff08;CVE-2018-13379&#xff09; 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: body"FortiToken clock drift detected" 漏洞复现1. 访问链接查看是否存在漏洞2. 查看用户名密码3. 登录后台 免责声明 仅用于技术交流,目的是…

高性能计算HPC存储解决方案的特点

用户利用高性能计算 (HPC) 来执行大规模的复杂计算任务&#xff0c;在短时间内解决复杂问题&#xff0c;遥遥领先于传统计算方法。Infortrend GS 存储解决方案专门针对密集型HPC工作负载进行优化&#xff0c;有效处理来自多个服务器的同时请求并保存分析的数据。我们的解决方案…

Xilinx Vivado IP许可申请

License许可申请地址 1、注册登录账号&#xff1b; 2、找到自己需要的IP核&#xff1b; 3、生成License 4、下载License

国际市场竞争中的品牌生存法则:克服挑战的方法

在全球化时代&#xff0c;国际市场扩张对企业来说是一个重要的战略选择。随着跨国贸易和数字化通信的飞速发展&#xff0c;公司可以更容易地拓展其业务到国际市场。然而&#xff0c;进军国际市场并不是一项容易的任务&#xff0c;伴随着各种复杂的挑战。本文Nox聚星将和大家探讨…

四川思维跳动商务信息咨询有限公司正规吗?

随着抖音等短视频平台的日益普及&#xff0c;越来越多的人开始关注如何在这些平台上进行有效的商业活动。四川思维跳动商务信息咨询有限公司是一家专业的商务信息咨询公司&#xff0c;专注于帮助企业在抖音等短视频平台上实现商业价值。今天&#xff0c;我们将深入探讨四川思维…

vcenter跨版本升级

vcenter跨版本升级&#xff08;比如从6.7升级到7.0&#xff09;1.如果您有VCHA&#xff0c;需要关闭移除 vCenter HA 配置 2. 一定要先做好VC的备份 将VC做一个内存快照以便备份 3.下载好后&#xff0c;在电脑上解压镜像ISO&#xff0c;进入这个文件夹运行程序&#xff0c;并…

打造全球化电商平台,多语言商城系统助您开拓海外市场

全球化进程的加速&#xff0c;越来越多的企业开始将目光投向海外市场。然而&#xff0c;语言和文化差异成为了企业面临的一大挑战。为了帮助企业顺利拓展海外业务&#xff0c;多语言商城系统应运而生。作为一种功能强大的电子商务平台&#xff0c;多语言商城系统具备以下关键功…

nginx配置支持PHP

前言 Nginx是通过php-fpm来通信的&#xff0c;所以需要修改的监听9000端口。 当 Nginx 配置支持 PHP 时&#xff0c;它可以将 PHP 请求转发给 PHP-FPM&#xff0c;由 PHP-FPM 处理请求并返回结果。 要配置 Nginx 支持 PHP&#xff0c;你需要在 Nginx 配置文件中添加一个 locat…

viple入门(一)

&#xff08;1&#xff09;数据活动 用于放置数据&#xff0c;可以是整数类型&#xff08;整型&#xff09;、双精度浮点类型、字符串类型、字符类型、布尔类型的数据。 特点&#xff1a;数据活动可自动识别数据对应的数据类型。 &#xff08;2&#xff09;变量活动 定义变量…

虚拟机备份中的CBT技术

虚拟机备份的CBT&#xff08; Changed Block Tracking&#xff09;模式是一种备份模式&#xff0c;它能够识别和跟踪自上次备份后虚拟机中被修改过的块&#xff0c;这些修改会被存放到日志文件中。在启用CBT模式之后&#xff0c;备份软件会利用这个功能进行增量备份。 启用CBT…

灯光控制桌球计费系统佳易王计时计费软件,可以添加饮料等商品最后一起计算

灯光控制桌球计费系统佳易王计时计费软件 &#xff08;上图&#xff0c;商品和计时一起计算&#xff09; 一、佳易王桌球棋牌计时计费软件部分功能简介&#xff1a; 1、计时计费功能 &#xff1a;开台时间和所用的时长直观显示&#xff0c;每3秒即可刷新一次时间。 2、销售商…

第1章:Python、Pycharm安装教程,超详细图文教程!

文章目录 一、Pycharm下载安装二、Python下载安装三、使用Pycharm 创建项目四、如何安装模块&#xff0c;比如“requests”1. 通过 pip 安装2. 通过PyCharm安装&#xff08;新手比较推荐&#xff09;。3. 通过命令永久更改镜像源。 Tips&#xff1a;本章提问内容解答 一、Pycha…

图的结构模板及遍历

图&#xff1a;由点的集合和边的集合组成。 常用的表示图的方法有两种&#xff1a; 1、邻接表法 将一个点的邻居都列出来。有向图只列出从这个点出发向外发散的点 2、邻接矩阵法 将点集列出一列行&#xff0c;列出一列列&#xff0c;在矩阵中填两点之间的权值&#xff08;距…

VMware网络设置 桥接模式 NAT VMNET0 1 8

1.桥接模式 虚拟机与主机并列 可拥有独立IP 主机与虚拟机之间&#xff0c;以及各虚拟机之间都可以互访。对应虚拟机就被当成主机所在以太网上的一个独立物理机来看待&#xff0c;各虚拟机通过默认的 VMnet0 网卡与主机以太网连接&#xff0c;虚拟机间的虚拟网络为 VMnet0。这…