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

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

【金融数据分析】计算2023年沪深300行业涨跌幅_第1张图片

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

    // 查询行业涨跌幅
    public List queryIndustryRank() {
        // 首先将所有数据查出来
        List csi300RankVOList = query2023rank(3, 300);
        // 将沪深300所有成分股都查出来
        List csi300Entities = sqlIteCSI300Dao.queryAllItems();
        // 记录涨跌幅
        Map numMap = new HashMap<>();
        Map riseMap = new HashMap<>();
        for (int i=0; i keyList = new ArrayList<>(riseMap.keySet());
        List csi300IndustryRankVOList = new ArrayList<>();
        for (int i=0; i() {
            @Override
            public 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 cache = new ArrayList<>();

    // 查询沪深300成分股2023年涨跌排行榜
    public synchronized List query2023rank(int type, int limit) {
        // 首先将所有的股票查出来
        List allCode = getAllCode();
        List 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 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() {
                @Override
                public 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() {
                @Override
                public 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 result = new ArrayList<>();
        for (int i=0; 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;
    }

前端页面代码如下






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

【金融数据分析】计算2023年沪深300行业涨跌幅_第2张图片

你可能感兴趣的:(金融数据分析,前端学习笔记,金融)