java拉取股票数据进行分析

1.背景

2.数据获取分析

3.代码获取数据

代码:

package com.life.gupiao;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;

import java.util.*;

/**
 * @Copyright (C) XXXXX技有限公司
 * @Author: ldp
 * @Date: 2023/10/25 10:57
 * @Description:
 */
@SuppressWarnings(value = "all")
public class DataDemo {
    /**
     * 数据获取
     */
    @Test
    public void test01() {
        String url = "https://stock.xueqiu.com/v5/stock/chart/kline.json";
        HttpRequest request = HttpUtil.createGet(url);
        Map<String, Object> map = new HashMap<>(8);
        map.put("symbol", "SH000001"); // 股票编号,SH000001
        map.put("begin", getTimeLong("2023-10-24")); // 开始时间毫秒 1698288935706
        map.put("period", "day"); // 日k:day,周k,week月k:month
        map.put("type", "before");
        map.put("count", -365 * 20);
        //kline,pe,pb,ps,pcf,market_capital,agt,ggt,balance
        map.put("indicator", "kline");
        request.form(map);

        request.cookie("device_id=efb20afd8a6af0e23aa5a234e0a379c5; s=c9115tfaqz; xq_a_token=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xqat=e2f0876e8fd368a0be2b6d38a49ed2dd5eec7557; xq_r_token=2a5b753b2db675b4ac36c938d20120660651116d; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMDY5OTg3NSwiY3RtIjoxNjk4MjAyMzEzNzAwLCJjaWQiOiJkOWQwbjRBWnVwIn0.LQL_AFe1BAi48kE09x4htcBmrX0fWGxISLDIm8zOJbZ_A6vQ0rrAvirmpUmTn1hJDXtNmHZEX0SIlbncsmAmZXNjtXBJ9Du7XhW8zSB32tuGChOX4lPsgcrGlo9_35GPAVvza1bGDoEtZTV8IwfmOkUbh47KWrXk1LzFzVk_-E-WAsobxxGIucFD26UNAYABSoOuvJKVUFBnWfQOocDJZRYtefcEO64Zb1Sj7H5Gja3SJPS6IMqKED4lKlX7XHZC0NBy9v_kGnXehbmu7fcPrz6pymLvaQ6y_QZI2Oye2dveoQN3Khdj3uUBFlFHyWeDGaJoFo5WImXxC0Wd8kjvBw; cookiesu=721698202320000; u=721698202320000; Hm_lvt_1db88642e346389874251b5a1eded6e3=1698202321; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1698202413");
        String body = request.execute().body();
        System.out.println(body);
        JSONObject jsonObject = JSONObject.parseObject(body).getJSONObject("data");
        JSONArray column = jsonObject.getJSONArray("column");
        JSONArray item = jsonObject.getJSONArray("item");
        String symbol = jsonObject.getString("symbol");
        createEcxel(symbol, column, item);
    }

    /**
     * 方法:存入excel
     */
    private void createEcxel(String symbol, JSONArray column, JSONArray item) {
        System.out.println("文件-处理-开始");
        List<Map<String, Object>> list = new ArrayList<>();
        for (int i = 0; i < item.size(); i++) {
            JSONArray jsonArray = item.getJSONArray(i);
            Map<String, Object> map = new HashMap<>();
            map.put("symbol", symbol);
            for (int j = 0; j < jsonArray.size(); j++) {
                String columnName = column.getString(j);
                if (columnName.equals("timestamp")) {
                    // 时间转为yyyy-MM-dd HH:mm:ss
                    Long aLong = jsonArray.getLong(j);
                    Date date = new Date(aLong);

                    String year = DateUtil.format(date, "yyyy");
                    map.put("year_str", year);

                    String month = DateUtil.format(date, "yyyy-MM");
                    map.put("month_str", month);

                    String format = DateUtil.format(date, "yyyy-MM-dd");
                    map.put("date_str", format);
                } else {
                    map.put(column.getString(j), jsonArray.get(j));
                }
            }
            list.add(map);
        }
        String format = DateUtil.format(new Date(), "yyyyMMddHHmmss");
        ExcelWriter writer = ExcelUtil.getWriter("D:\\workroom\\myJavaDemo\\life\\" + symbol + "_" + format + "_.xls");
        writer.write(list);
        writer.flush();
        writer.close();
        System.out.println("文件-处理-完成");
    }

    /**
     * 方法:时间转换
     */
    private Long getTimeLong(String dateStr) {
        DateTime parse = DateUtil.parse(dateStr, "yyyy-MM-dd");
        long time = parse.getTime();
        return time;
    }
}

执行代码得到excel数据如下:

执行代码得到excel数据,部分截图如下:

4.数据入库

将excel数据导入数据库

截图如下:

5.数据分析

根据自己的需求分析数据

这里给出简单的案例sql

-- 查询所有
select t.* from LDP_TEST2 t order by t.date_str;

-- 查询所有日期,按照日期倒序
select t.date_str,t.high,t.low from LDP_TEST2 t order by t.date_str;

-- 按年 找最高,最低,年排序
select min(t.symbol) as 编号,
       t.year_str as 年份,
       max(t.high) 最高,
       min(t.low) 最低
  from LDP_TEST2 t
 group by t.year_str
 order by 年份;

-- 按年 找最高,最低,最低排序
 select *
   from (select min(t.symbol) as 编号,
                t.year_str as 年份,
                max(t.high) 最高,
                min(t.low) 最低
           from LDP_TEST2 t
          group by t.year_str) temp
  order by 最低;
 
 -- 按年 找最高,最低,最高排序
 select *
   from (select min(t.symbol) as 编号,
                t.year_str as 年份,
                max(t.high) 最高,
                min(t.low) 最低
           from LDP_TEST2 t
          group by t.year_str) temp
  order by 最高;

5.1.案例1

5.2.案例2

5.3.案例3

其他,可以根据自己需求做

6.常用分析值

完美!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你在学习Python数据分析的时候,是否遇到过在这些问题? 别慌!这些都是数据科学入门常见问题。从入门到上手再到解决实际问题,数据科学看似复杂,但如果你掌握了正确的学习方法,完全可以极速入门。 【职场人进阶必备  数据分析/挖掘一点通】 如今的职场上,90%以上的岗位都会涉及数据问题。 以产品文案岗位为例,在一个新产品推向市场之前,文案需要考虑: 此时,可以关注一下市场上已有的相关产品推广数据,如:哪些文案打开率更高?哪些文案转化更好?目标用户的购买习惯如何? 以此作为下一步工作开展的依据,对产品文案工作者来说,可以少走很多弯路。 学会数据分析/挖掘,等于站巨人的肩膀上工作,轻松且高效。 【爬虫、数据分析数据挖掘知识点三合一】数据问题一网打尽 本课程将知识点悉数融入实战项目,不空谈语法,帮助学员在实践中获取知识,目标是:让学员能自主完成数据采集、数据分析数据挖掘。 学习完本课程,你可以熟练掌握: 【实战案例超实用,轻松拥有“睡后收入”!】 本课程以股票案例为主线,串联爬虫、数据分析以及数据挖掘多个知识点。 通过实战案例演练,你可以全面掌握股票收益的分析和预判方法,在收获新技能的同时,也有机会获得“睡后收入”! 四大优势: 三重权益:
### 回答1: 下面是用 Java 写的一段简单的股票分析模型的代码示例: ``` import java.util.ArrayList; public class StockAnalyzer { public static void main(String[] args) { // 假设已经从数据库中读取了股票数据到一个 ArrayList 中 ArrayList<StockData> stockDataList = getStockDataFromDatabase(); // 计算每只股票的收益率 ArrayList<Double> returnList = new ArrayList<Double>(); for (int i = 0; i < stockDataList.size(); i++) { StockData data = stockDataList.get(i); double returnRate = (data.close - data.open) / data.open; returnList.add(returnRate); } // 计算平均收益率 double sum = 0; for (int i = 0; i < returnList.size(); i++) { sum += returnList.get(i); } double averageReturn = sum / returnList.size(); // 输出结果 System.out.println("平均收益率:" + averageReturn); } } // 假设 StockData 是一个存储股票数据的类,包含 open、close 两个属性 class StockData { double open; double close; } ``` 上述代码实现了从数据库中读取股票数据,计算每只股票的收益率,然后计算平均收益率并输出结果的功能。这只是一个简单的例子,实际的股票分析模型可能要更加复杂,比如收益率的计算可能要考虑更多的因素,比如股票的收益率可能要和其他金融产品进行比较等。 ### 回答2: 股票分析模型是一个帮助投资者预测股票走势和做出决策的工具。通过使用Java编程语言,我们可以开发一个简单的股票分析模型。 首先,我们需要收集股票的历史数据。这些数据包括股票的价格、交易量和市值等信息。可以通过使用Java的网络请求库来从股票数据获取最新的股票数据。 接下来,我们可以使用Java数据处理和分析库,如Apache Commons Math或Weka,来对收集到的股票数据进行统计和分析。可以计算股票的均值、方差、标准差等指标,以及计算股票之间的相关性。 然后,我们可以使用Java的机器学习库,如Weka或TensorFlow,来构建一个股票预测模型。可以使用回归算法,如线性回归或支持向量回归,来预测股票价格。还可以使用分类算法,如决策树或随机森林,来预测股票的涨跌。 在开发模型时,需要注意使用正确的特征选择和特征工程技术。特征选择可以选择对股票预测有重要影响的特征,如技术指标、财务指标或市场指标。特征工程可以从原始数据中提取新的特征,如移动平均线、相对强弱指标或布林带。 最后,我们可以使用Java的图表绘制库,如JFreeChart或Plotly,来可视化股票数据和模型的预测结果。可以绘制股票价格的历史曲线图,以及模型对未来股票价格的预测曲线图。 总之,通过使用Java编程语言,我们可以开发一个股票分析模型,用于预测股票走势和辅助投资决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值