第一章 股票成交量对比功能

股票K线功能实现

今日目标

1.理解股票T和T-1概念,实现成交量对比功能; 2.理解个股涨跌幅度统计功能; 2.1 分析业务,SQL落地; 2.2 完善不存在数据的区间默认回显功能; 3.理解个股分时线业务,并实现功能; 4.理解个股日K线业务,并实现功能;

第一章 股票成交量对比功能

1、股票成交量对比功能分析

1.1 股票成交量对比功能原型

功能描述:统计A股大盘T日和T-1日成交量对比功能(成交量为沪深两市成交量之和)

1.2 相关表分析

stock_market_index_info表结构相关字段:

 

1.3 成交量对比功能接口分析

功能描述:统计A股大盘T日和T-1日成交量对比功能(成交量为沪深两市成交量之和)

服务路径:/api/quot/stock/tradeAmt 服务方法:GET 前端请求频率:每分钟 请求参数:无

 

返回数据格式:

{
    "code": 1,
    "data": {
        "amtList": [{"count": 3926392,"time": "202112310930"},{"count": 3926392,"time": "202112310931"},...],//T日每分钟成交量信息
        "yesAmtList":[{"count": 3926392,"time": "202112310930"},...]//T-1日每分钟成交量信息 
	}
}

 

注意事项:如果当前日期不在股票交易日,则按照前一个有效股票交易日作为T日查询

R<Map<String,List<Map>>>

2、成交量对比功能SQL分析

-- 思路:通过逻辑获取T日开盘时间和当前时间日期范围,ge: 2022-01-03 09:30:00 到 2022-01-03 14:40:00
-- 那么T-1日日期范围则为:2022-01-02 09:30:00 到 2022-01-02 14:40:00
-- 我们可分别统计T日和T-1日国内A股大盘交易量,然后再讲数据组装即可
-- 1.统计T日交易量数据信息(T-1日SQL结构一致)
select
	date_format(smi.cur_time,'%Y%m%d%H%i') as time,
	sum(smi.trade_amount) as count
from
	stock_market_index_info as smi
where
	smi.cur_time between '2022-01-03 09:30:00' and '2022-01-03 14:40:00'
and
	smi.market_code in ('sh000001','sz399001')
group by time
order by smi.cur_time asc;
-- SQL语句添加order by 保证查询的数据是按照日期排序

3、成交量对比功能实现

3.1 定义web服务接口方法

    /**
     * 功能描述:统计国内A股大盘T日和T-1日成交量对比功能(成交量为沪市和深市成交量之和)
     * @return
     */
    @GetMapping("/stock/tradeAmt")
    public R<Map> stockTradeVol4InnerMarket(){
        return stockService.stockTradeVol4InnerMarket();
    }

3.2 定义服务接口方法与实现

服务接口方法:

    /**
     * 功能描述:统计国内A股大盘T日和T-1日成交量对比功能(成交量为沪市和深市成交量之和)
     * @return
     */
    R<Map> stockTradeVol4InnerMarket();

服务接口方法实现:

    /**
     * 功能描述:统计国内A股大盘T日和T-1日成交量对比功能(成交量为沪市和深市成交量之和)
     *   map结构示例:
     *      {
     *         "volList": [{"count": 3926392,"time": "202112310930"},......],
     *       "yesVolList":[{"count": 3926392,"time": "202112310930"},......]
     *      }
     * @return
     */
    @Override
    public R<Map> stockTradeVol4InnerMarket() {
        //1.获取T日和T-1日的开始时间和结束时间
        //1.1 获取最近股票有效交易时间点--T日时间范围
        DateTime lastDateTime = DateTimeUtil.getLastDate4Stock(DateTime.now());
        DateTime openDateTime = DateTimeUtil.getOpenDate(lastDateTime);
        //转化成java中Date,这样jdbc默认识别
        Date startTime4T = openDateTime.toDate();
        Date endTime4T=lastDateTime.toDate();
        //TODO  mock数据
        startTime4T=DateTime.parse("2022-01-03 09:30:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();
        endTime4T=DateTime.parse("2022-01-03 14:40:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();

        //1.2 获取T-1日的区间范围
        //获取lastDateTime的上一个股票有效交易日
        DateTime preLastDateTime = DateTimeUtil.getPreviousTradingDay(lastDateTime);
        DateTime preOpenDateTime = DateTimeUtil.getOpenDate(preLastDateTime);
        //转化成java中Date,这样jdbc默认识别
        Date startTime4PreT = preOpenDateTime.toDate();
        Date endTime4PreT=preLastDateTime.toDate();
        //TODO  mock数据
        startTime4PreT=DateTime.parse("2022-01-02 09:30:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();
        endTime4PreT=DateTime.parse("2022-01-02 14:40:00", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate();

        //2.获取上证和深证的配置的大盘id
        //2.1 获取大盘的id集合
        List<String> markedIds = stockInfoConfig.getInner();
        //3.分别查询T日和T-1日的交易量数据,得到两个集合
        //3.1 查询T日大盘交易统计数据
        List<Map> data4T=stockMarketIndexInfoMapper.getStockTradeVol(markedIds,startTime4T,endTime4T);
        if (CollectionUtils.isEmpty(data4T)) {
            data4T=new ArrayList<>();
        }
        //3.2 查询T-1日大盘交易统计数据
        List<Map> data4PreT=stockMarketIndexInfoMapper.getStockTradeVol(markedIds,startTime4PreT,endTime4PreT);
        if (CollectionUtils.isEmpty(data4PreT)) {
            data4PreT=new ArrayList<>();
        }
        //4.组装响应数据
        HashMap<String, List> info = new HashMap<>();
        info.put("amtList",data4T);
        info.put("yesAmtList",data4PreT);
        //5.返回数据
        return R.ok(info);
    }

注意:当前无法获取实时的数据,选择已存在的合适的时间范围查询即可;

3.3 定义mapper接口和xml

定义mapper接口方法:

    /**
     * 根据时间范围和指定的大盘id统计每分钟的交易量
     * @param markedIds 大盘id集合
     * @param startTime 交易开始时间
     * @param endTime 结束时间
     * @return
     */
    List<Map> getStockTradeVol(@Param("markedIds") List<String> markedIds,
                               @Param("startTime") Date startTime,
                               @Param("endTime") Date endTime);

XML方法绑定:

    <select id="getStockTradeVol" resultType="map">
        select
            date_format(smi.cur_time,'%Y%m%d%H%i') as time,
            sum(smi.trade_amount)  as count
        from stock_market_index_info as smi
        where smi.market_code in
        <foreach collection="markedIds" item="marketId" open="("  separator="," close=")">
            #{marketId}
        </foreach>
        and smi.cur_time between #{startTime} and #{endTime}
        group by smi.cur_time
        order by time asc;
    </select>

3.4 web接口测试

 

  • 页面效果如下

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的翠花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值