【金融数据分析】计算2023年沪深300行业涨跌幅

2024-01-14 01:04

本文主要是介绍【金融数据分析】计算2023年沪深300行业涨跌幅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文我们来计算2023年沪深300行业涨跌幅,最后呈现的页面是这样的

先来说后端的代码,计算行业涨跌幅的原理就是将某个行业所有成分股的涨跌幅加起来,然后除以股票数量得到一个平均涨跌幅

    // 查询行业涨跌幅public List<CSI300IndustryRankVO> queryIndustryRank() {// 首先将所有数据查出来List<CSI300RankVO> csi300RankVOList = query2023rank(3, 300);// 将沪深300所有成分股都查出来List<CSI300Entity> csi300Entities = sqlIteCSI300Dao.queryAllItems();// 记录涨跌幅Map<String, Integer> numMap = new HashMap<>();Map<String, Double> riseMap = new HashMap<>();for (int i=0; i<csi300RankVOList.size(); i++) {for (int j = 0; j < csi300Entities.size(); j++) {if (csi300RankVOList.get(i).getName().equals(csi300Entities.get(j).getName())) {if (!riseMap.containsKey(csi300Entities.get(j).getIndustry())) {riseMap.put(csi300Entities.get(j).getIndustry(), csi300RankVOList.get(i).getRise());numMap.put(csi300Entities.get(j).getIndustry(), 1);} else {Double rise = riseMap.get(csi300Entities.get(j).getIndustry()) + csi300RankVOList.get(i).getRise();riseMap.put(csi300Entities.get(j).getIndustry(), rise);Integer num = numMap.get(csi300Entities.get(j).getIndustry());numMap.put(csi300Entities.get(j).getIndustry(), num + 1);}log.info("name:" + csi300RankVOList.get(i).getName() + " industry:" +csi300Entities.get(j).getIndustry() + " rise:" +csi300RankVOList.get(i).getRise());break;}}}List<String> keyList = new ArrayList<>(riseMap.keySet());List<CSI300IndustryRankVO> csi300IndustryRankVOList = new ArrayList<>();for (int i=0; i<keyList.size(); i++) {CSI300IndustryRankVO entity = new CSI300IndustryRankVO();entity.setIndustry(keyList.get(i));Double rise = riseMap.get(keyList.get(i));rise = rise / numMap.get(keyList.get(i));String str = String.format("%.2f", rise);rise = Double.parseDouble(str);log.info("行业:" + keyList.get(i) + " 数量: " + numMap.get(keyList.get(i)) + " 涨幅:" + rise);entity.setRise(rise);csi300IndustryRankVOList.add(entity);}// 按照涨幅降序排序Collections.sort(csi300IndustryRankVOList, new Comparator<CSI300IndustryRankVO>() {@Overridepublic int compare(CSI300IndustryRankVO o1, CSI300IndustryRankVO o2) {if (o1.getRise() > o2.getRise()) {return -1;} else if (o1.getRise() == o2.getRise()) {return 0;} else {return 1;}}});return csi300IndustryRankVOList;}// 将查询的数据缓存到内存中private List<CSI300RankVO> cache = new ArrayList<>();// 查询沪深300成分股2023年涨跌排行榜public synchronized List<CSI300RankVO> query2023rank(int type, int limit) {// 首先将所有的股票查出来List<StockOptionVO> allCode = getAllCode();List<CSI300RankVO> csi300RankVOList = new ArrayList<>();if (cache.size() == 0) {log.info("需要重新计算数据");// 根据股票代码查询所有股票的涨跌幅for (int i = 0; i < allCode.size(); i++) {// 去除掉沪深300指数本身if (allCode.get(i).getCode().equals("399300")) {continue;}List<StockEntity> stockEntities = sqLiteStockDao.queryAllByCodeAndYear(allCode.get(i).getCode(), "2023");CSI300RankVO csi300RankVO = new CSI300RankVO();csi300RankVO.setCode(allCode.get(i).getCode());csi300RankVO.setName(allCode.get(i).getName());Double rise = (stockEntities.get(0).getClose_price() - stockEntities.get(stockEntities.size() - 1).getClose_price()) / stockEntities.get(stockEntities.size() - 1).getClose_price();rise = rise * 100;String str = String.format("%.2f", rise);rise = Double.parseDouble(str);csi300RankVO.setRise(rise);csi300RankVOList.add(csi300RankVO);}log.info("填充数据");// 将数据填充到缓存中for (int i=0; i<csi300RankVOList.size(); i++) {cache.add(csi300RankVOList.get(i));}} else {log.info("缓存中已存在数据,不需要重新计算");for (int i=0; i<cache.size(); i++) {csi300RankVOList.add(cache.get(i));}}// type==1查询涨幅if (type == 1) {// 按照涨幅升序排序Collections.sort(csi300RankVOList, new Comparator<CSI300RankVO>() {@Overridepublic int compare(CSI300RankVO o1, CSI300RankVO o2) {if (o1.getRise() > o2.getRise()) {return -1;} else if (o1.getRise() == o2.getRise()) {return 0;} else {return 1;}}});} else if (type == 2) { // type==2查询跌幅Collections.sort(csi300RankVOList, new Comparator<CSI300RankVO>() {@Overridepublic int compare(CSI300RankVO o1, CSI300RankVO o2) {if (o1.getRise() > o2.getRise()) {return 1;} else if (o1.getRise() == o2.getRise()) {return 0;} else {return -1;}}});}// 最后取limit个数据返回List<CSI300RankVO> result = new ArrayList<>();for (int i=0; i<limit; i++) {if (i > csi300RankVOList.size()-1) {return result;}if (type == 1 && csi300RankVOList.get(i).getRise()<0) { // 查询涨幅return result;}if (type == 2 && csi300RankVOList.get(i).getRise()>0) { // 查询跌幅return result;}result.add(csi300RankVOList.get(i));}return result;}

前端页面代码如下

<template><div><el-row class="container"><div class="left-grid"><el-card class="box-card"><template #header><div class="card-header"><span>行业涨跌幅排行榜</span></div></template><el-tablev-loading="loading1":data="rise_data":show-header="true":max-height="250"stripe><el-table-columntype="index"label="排名"width="65%"></el-table-column><el-table-column prop="industry" label="行业"></el-table-column><el-table-columnprop="rise"label="涨幅":formatter="formatter1"></el-table-column></el-table></el-card><el-card class="box-card"><template #header><div class="card-header"><span>行业权重</span></div></template><el-tablev-loading="loading2":data="industry_dist":show-header="true":max-height="250"stripe><el-table-columntype="index"label="序号"width="65%"></el-table-column><el-table-column prop="industry" label="行业"></el-table-column><el-table-columnprop="weight"label="权重":formatter="formatter2"></el-table-column></el-table></el-card></div><div class="right-grid" ref="myChart"></div></el-row></div>
</template><script>
import axios from "axios";
import { getCurrentInstance } from "vue";
export default {data() {return {// 涨幅排行榜rise_data: [],loading1: true,// 权重数据industry_dist: [],loading2: true,table_title: "行业涨跌幅排行榜",echarts: getCurrentInstance().appContext.config.globalProperties.$echarts,};},mounted() {this.init();},methods: {init() {var url1 = "http://localhost:9001/stock/queryIndustryRank";this.loading1 = true;axios.get(url1).then((response) => {this.rise_data = response.data;console.log(response);this.loading1 = false;this.create_bar();}).catch((error) => {console.log(error);this.loading1 = false;});var url2 = "http://localhost:9001/queryDist";this.loading2 = true;axios.get(url2).then((response) => {this.industry_dist = response.data;console.log(response);this.loading2 = false;}).catch((error) => {console.log(error);this.loading2 = false;});},// 绘制柱状图create_bar() {//3.初始化实例对象 echarts.init(dom容器)var data_xAxis = [];var data_yAxis = [];for (var i = this.rise_data.length - 1; i >= 0; i--) {data_xAxis.push(this.rise_data[i].industry);data_yAxis.push(this.rise_data[i].rise);}console.log(data_xAxis);console.log(data_yAxis);var dom = this.$refs["myChart"]; // 获取dom节点var myChart = this.echarts.init(dom);//4.指定配置项和数据var option = {tooltip: {trigger: "axis",position: function (pt) {return [pt[0], "10%"];},},title: {left: "center",text: this.table_title,},toolbox: {feature: {dataZoom: {yAxisIndex: "none",},restore: {},saveAsImage: {},},},grid: {top: 80,bottom: 30,},xAxis: {type: "value",position: "top",splitLine: {lineStyle: {type: "dashed",},},},yAxis: {type: "category",axisLine: { show: false },axisLabel: { show: false },axisTick: { show: false },splitLine: { show: false },data: data_xAxis,},series: [{name: "行业涨跌幅",type: "bar",stack: "Total",label: {show: true,formatter: "[{b}]=>({c})%",},data: data_yAxis,},],};//5.将配置项设置给echarts实例对象,使用刚指定的配置项和数据显示图表。myChart.setOption(option);},formatter1(row) {return row.rise + "%";},formatter2(row) {return row.weight + "%";},},
};
</script><style scoped>
.card-header {display: flex;justify-content: space-between;align-items: center;
}
.container {display: grid;grid-template-columns: 35% 65%;width: 100%;height: 80vh;
}
.left-grid {background-color: #f0f0f0;border-radius: 2%;padding: 10px;height: 95%;
}
.right-grid {background-color: #f9ecc3;border-radius: 2%;padding: 10px;height: 650px;
}
</style>

最后计算得到的行业涨跌幅排行榜如下

这篇关于【金融数据分析】计算2023年沪深300行业涨跌幅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603413

相关文章

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou