根据现有历史数据预测未来数值-算法

要求:

预测未来一周8.8日-8.15日数值,取上周数据8.1日-8.7日值并求出临近两天的绝对值差额

未来一周数据= 前一天数值+上涨/下跌值

8.8日数值 = 8.7日数值,如果上涨+(8.1日到8.2日绝对值的差值)

如果下降-(8.1日到8.2日绝对值的差值)

如此类推

最高点区间值 : 区间范围上值 = 8.8日数值 *( 1+2.5%)

区间范围下值 = 8.8日数值 *( 1-2.5%)

具体实现的代码如下:

复制代码
 public static void main(String[] args) {
        List<Map<String, Double>> data = new ArrayList<>();
        data.add(Map.of("2023年08月01日", 7.221958));
        data.add(Map.of("2023年08月02日", 7.231958));
        data.add(Map.of("2023年08月03日", 7.241958));
        data.add(Map.of("2023年08月04日", 7.221958));
        data.add(Map.of("2023年08月05日", 7.251958));
        data.add(Map.of("2023年08月06日", 7.261958));
        data.add(Map.of("2023年08月07日", 7.281958));

        List<Data> dataList = new ArrayList<>();
        dataList.add(new Data("2023年8月08日", "up"));
        dataList.add(new Data("2023年8月09日", "up"));
        dataList.add(new Data("2023年8月10日", "down"));
        dataList.add(new Data("2023年8月11日", "down"));
        dataList.add(new Data("2023年8月12日", "up"));
        dataList.add(new Data("2023年8月13日", "down"));
        dataList.add(new Data("2023年8月14日", "up"));

        double previousValue = data.get(data.size() - 1).values().iterator().next(); // 获取最后一个日期的数值
        double value = previousValue;
        double valueFirst = 0;
        LinkedList<Double> lkl = new LinkedList<>();
        LinkedList result = new LinkedList();
        for (int i = 0; i < dataList.size(); i++) {
            Data dataPoint = dataList.get(i);
            if (i == 0) {
                double diff = Math.abs(data.get(0).values().iterator().next() - data.get(1).values().iterator().next());
                if (dataPoint.getDirection().equals("up")) {
                    value += diff;
                    valueFirst = value;
                } else {
                    value -= diff;
                    valueFirst = value;
                }
            } else {
                if(i==6){
                    double diff = Math.abs(data.get(i).values().iterator().next() - valueFirst);
                    if (dataPoint.getDirection().equals("up")) {
                        value += diff;
                    } else {
                        value -= diff;
                    }
                }else{
                    double diff = Math.abs(data.get(i).values().iterator().next() - data.get(i+1).values().iterator().next());
                    if (dataPoint.getDirection().equals("up")) {
                        value +=  diff;
                    } else {
                        value -=  diff;
                    }
                }
            }
            System.out.println(dataPoint.getDate() + " 的数值: " + value);
            lkl.add(value);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("datetime",dataPoint.getDate());
            jsonObject.put("rae",value);
            result.add(jsonObject);
        }
        double maxValue = Collections.max(lkl);
        System.out.println("得出list的最大值:"+maxValue);

        List<Double> resultList = new ArrayList<>();
        resultList.add(maxValue + 0.25);
        resultList.add(maxValue - 0.25);
        System.out.println("横线的最大值与最小值:"+resultList);
        JSONObject json = new JSONObject();
        json.put("high",maxValue + 0.25);
        json.put("low",maxValue - 0.25);

        List list = new ArrayList();
        list.add(json);
        list.add(result);
        System.out.println("result######"+ list);
//        List<Map<String, Double>> data = new ArrayList<>();
//        data.add(Map.of("2023年08月01日", 7.221958));
//        data.add(Map.of("2023年08月02日", 7.231958));
//        data.add(Map.of("2023年08月03日", 7.241958));
//        data.add(Map.of("2023年08月04日", 7.221958));
//        data.add(Map.of("2023年08月05日", 7.261958));
//        data.add(Map.of("2023年08月06日", 7.271958));
//        data.add(Map.of("2023年08月07日", 7.281958));
//
//        List<Data> dataList = new ArrayList<>();
//        dataList.add(new Data("2023年8月08日", "up"));
//        dataList.add(new Data("2023年8月09日", "down"));
//        dataList.add(new Data("2023年8月10日", "up"));
//        dataList.add(new Data("2023年8月11日", "up"));
//        dataList.add(new Data("2023年8月12日", "down"));
//        dataList.add(new Data("2023年8月13日", "down"));
//        dataList.add(new Data("2023年8月14日", "up"));
//
//        double previousValue = data.get(data.size() - 1).values().iterator().next(); // 获取最后一个日期的数值
//        double value = previousValue;
//        Random random = new Random();
//        for (int i = 0; i < dataList.size(); i++) {
//            Data dataPoint = dataList.get(i);
//
//            if (i == 0) {
//                double diff = Math.abs(data.get(0).values().iterator().next() - data.get(1).values().iterator().next());
//                if (dataPoint.getDirection().equals("up")) {
//                    value += diff;
//                } else {
//                    value -= diff;
//                }
//            } else {
//                if (dataPoint.getDirection().equals("up")) {
//                    double randomIncrement = random.nextDouble() * 0.025;
//                    value += randomIncrement;
//                } else {
//                    double randomIncrement = random.nextDouble() * 0.025;
//                    value -= randomIncrement;
//                }
//            }
//
//            System.out.println(dataPoint.getDate() + " 的数值: " + value);
//        }
    }
}

class Data {
    private String date;
    private String direction;

    public Data(String date, String direction) {
        this.date = date;
        this.direction = direction;
    }

    public String getDate() {
        return date;
    }
相关推荐
小手cool几秒前
如何在Java中根据另一个配对集合对一个集合进行排序
java·开发语言
云烟成雨TD4 分钟前
Spring AI Alibaba 1.x 系列【28】Nacos Skill 管理中心功能说明
java·人工智能·spring
升鲜宝供应链及收银系统源代码服务6 分钟前
OMS 订单模块重构正式文档(一)---升鲜宝生鲜配送供应链管理系统
java·开发语言·重构·生鲜配送源代码·生鲜供应链源代码
Han.miracle10 分钟前
Redis 全套笔记:基础 API + 三大架构 + 缓存三大问题
java·windows·redis
zzb158013 分钟前
Fragment 生命周期深度图解:从 onAttach 到 onDetach 完整流程(面试必备)
android·java·面试·安卓
帅小伙―苏14 分钟前
力扣42接雨水
前端·算法·leetcode
AI科技星30 分钟前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算
银色火焰战车33 分钟前
浅析golang中的垃圾回收机制(GC)
java·jvm·golang
zhangjw3434 分钟前
第4篇:Java数组与字符串:从基础用法到面试高频考点
java·java基础知识
6Hzlia35 分钟前
【Hot 100 刷题计划】 LeetCode 287. 寻找重复数 | C++ 数组判环 (快慢指针终极解法)
c++·算法·leetcode