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

文章介绍了使用给定的历史金融数据(如股票价格),通过计算相邻日期的绝对值差额来预测未来一周每天的数值变化,包括判断上升还是下降,并确定最高点区间的上下限。代码示例展示了如何基于给定的数据集进行实时计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:

预测未来一周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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值