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

要求:

预测未来一周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 boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
菠萝蚊鸭3 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生3 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
ssr——ssss3 小时前
SSM-期末项目 - 基于SSM的宠物信息管理系统
java·ssm
一棵星3 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言