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

要求:

预测未来一周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;
    }
相关推荐
碳基硅坊1 小时前
Spring AI:把大模型接进 Spring 应用
java·人工智能·spring ai
黄毛火烧雪下1 小时前
Java 核心知识点总结(一)
java·开发语言
x138702859571 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
海兰1 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
技术小结-李爽2 小时前
【工具】Maven的下载、安装、使用
java·maven
极创信息2 小时前
Linux挖矿病毒深度清理实战教程,从进程隐藏、Rootkit驻留到彻底根除
java·大数据·linux·运维·安全·tomcat·健康医疗
努力成为AK大王2 小时前
并发编程的核心挑战、优化方案与核心知识点总结
java·开发语言·数据库
云烟成雨TD2 小时前
Agent Scope Java 2.x 系列【10】技能(Skill)
java·人工智能·agent
摇滚侠2 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea
zwenqiyu2 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法