要求:
预测未来一周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;
}