当前位置: 首页 > news >正文

今日指数项目实现个股日K线详情功能

个股日K线详情功能

一. 什么是个股日K线

1.日K线就是将股票交易流水按天分组,然后统计出每天的交易数据,内容包含:日期、股票编码、名称、最高价、最低价、开盘价、收盘价、前收盘价、交易量;

2.需要注意的是这里的收盘价就是指每天最大交易时间点下对应的价格;
在这里插入图片描述

二. 接口说明

功能描述:查询指定股票每天产生的数据,组装成日K线数据;

​ 如果当大盘尚未收盘,则以最新的交易价格作为当天的收盘价格;

服务路径:/api/quot/stock/screen/dkline
服务方法:GET
前端请求频率:每分钟

请求参数:code

参数说明参数名称是否必须数据类型备注
股票编码codetruestring股票编码

响应数据结构:

{"code": 1,"data": [{"date": "2021-12-20 10:20",//日期"tradeAmt": 28284252,//交易量(指收盘时的交易量,如果当天未收盘,则显示最新数据)"code": "000021",//股票编码"lowPrice": 16,//最低价格(指收盘时记录的最低价,如果当天未收盘,则显示最新数据)"name": "深科技",//名称"highPrice": 16.83,//最高价(指收盘时记录的最高价,如果当天未收盘,则显示最新数据)"openPrice": 16.8,//开盘价"tradeVol": 459088567.58,//交易金额(指收盘时记录交易量,如果当天未收盘,则显示最新数据)"closePrice": 16.81//当前收盘价(指收盘时的价格,如果当天未收盘,则显示最新cur_price)"preClosePrice": 16.81//前收盘价},//......]
}

三. SQL分析

SQL查询要划定一个默认的日期范围,这样可避免大数据量下全表查询而导致慢查询的问题;

在指定的日期范围内以天分组统计出每天日期的最大值(收盘时间);

根据获取的最大日期组,使用in进行条件查询,进而获取日K线相关的数据;

1. 查询每天对应的收盘时间

select max(cur_time)
from stock_rt_info
where stock_code = '600021'and cur_time between '2022-01-01 09:30:00' and '2022-06-06 14:25:00'
group by date_format(cur_time, '%Y%m%d');

2. 获取在该时间段内所需要的数据

select sri.cur_time        as date,sri.trade_amount    as tradeAmt,sri.stock_code      as code,sri.min_price       as lowPrice,sri.stock_name      as name,sri.max_price       as highPrice,sri.open_price      as openPrice,sri.trade_volume    as tradeVol,sri.cur_price       as closePrice,sri.pre_close_price as preClosePrice
from stock_rt_info as sri
where cur_time in (select max(cur_time)from stock_rt_infowhere stock_code = '600021'and cur_time between '2022-01-01 09:30:00' and '2022-06-06 14:25:00'group by date_format(cur_time, '%Y%m%d'))

这里同样也可以将查询时间与获取数据分开为两个Mapper接口, 这样更加方便查询

四. 代码实现

1. 表现层
	/*** 个股日K图*/@ApiOperation(value = "个股日K图", notes = "个股日K图", httpMethod = "GET")@GetMapping("/stock/screen/dkline")public R<List<Stock4EvrDayDomain>> getStockScreenDkline(@RequestParam(value = "code" , required = true) String code){return service.getStockScreenDkline(code);}
2. 服务层

接口

R<List<Stock4EvrDayDomain>> getStockScreenDkline(String code);

实现类

	/*** 个股日K图*/@Overridepublic R<List<Stock4EvrDayDomain>> getStockScreenDkline(String code) {// 获取截止时间DateTime curTime = DateTimeUtil.getLastDate4Stock(DateTime.now());curTime = DateTime.parse("2022-06-07 15:00:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));Date nowDate = curTime.toDate();// 获取起始时间Date startDate = curTime.minusMonths(3).toDate();startDate = DateTime.parse("2022-01-01 09:30:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();// 获取最新数据列表List<String> latestChangeTime = stockRtInfoMapper.getLatestChangeTime(startDate, nowDate, code);// 查询数据List<Stock4EvrDayDomain> data = stockRtInfoMapper.getStockScreenDkline(startDate,nowDate,code,latestChangeTime);return R.ok(data);}
3.Dao层

mapper接口

// 实现数据查询
List<Stock4EvrDayDomain> getStockScreenDkline(@Param("startDate") Date startDate, @Param("nowDate") Date nowDate, @Param("code") String code , @Param("latestChangeTime") List<String> latestChangeTime);// 实现查询每天对应的收盘时间
List<String> getLatestChangeTime(@Param("startDay") Date startDay , @Param("latestTime") Date latestTime , @Param("code") String code);

xml代码实现

<select id="getStockScreenDkline" resultType="com.jixu.stock.pojo.domain.Stock4EvrDayDomain">selectdate_format(sri2.cur_time,'%Y%m%d') as date,sri2.trade_amount as tradeAmt,sri2.stock_code as code,sri2.min_price as lowPrice,sri2.stock_name as name,sri2.max_price as highPrice,sri2.open_price as openPrice,sri2.trade_volume as tradeVol,sri2.cur_price as closePrice,sri2.pre_close_price as preClosePricefrom stock_rt_info as sri2where sri2.cur_time in<foreach collection="latestChangeTime" item="time" open="(" separator="," close=")">#{time}</foreach>and sri2.stock_code=#{code}order by sri2.cur_time</select><select id="getLatestChangeTime" resultType="java.lang.String">select max(cur_time) as max_timefrom stock_rt_infowhere stock_code = #{code}and cur_time between #{startDay} and #{latestTime}group by date_format(cur_time, '%Y%m%d')</select>

http://www.mrgr.cn/news/39121.html

相关文章:

  • ps aux | grep smart_webrtc这条指令代表什么意思
  • 【Golang】关于Go语言字符串转换strconv
  • 二分算法总结
  • 使用 React Router v6 在 React 中实现面包屑
  • 简全Java开发环境搭建指南
  • 高胜率TPS交易策略:轻松应对市场波动
  • JUC并发编程_Lock锁
  • 防爆标识解释
  • CORE MVC 过滤器 (筛选器)
  • 剧本杀门店预约系统:掌握市场发展趋势!
  • 了解输出电源优先级
  • 四款视频剪辑工具使用感受与推荐:
  • CTF ciscn_2019_web_northern_china_day1_web2
  • HTML5实现好看的唐朝服饰网站模板源码2
  • 56.合并区间
  • 电源的带载能力怎么判断?Namisoft为您介绍测试方法
  • 云+AI时代下,Alibaba Cloud Linux 如何进一步演进?
  • 高性能网络SIG月度动态:推动 SMC 用户态工具支持细粒度透明替换和共享内存占用监控
  • 汽车信息安全 -- 再谈车规MCU的安全启动
  • 有效的括号