1、前端html代码

<!--THIS EXAMPLE WAS DOWNLOADED FROM https://echarts.apache.org/examples/zh/editor.html?c=candlestick-sh
-->
<!DOCTYPE html>
<html style="height: 100%"><head><meta charset="utf-8"><script src="https://cdn.bootcss.com/sockjs-client/1.1.4/sockjs.min.js"></script><script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script><style type="text/css">.tabs {text-align: center;height: 20%;padding-top: 15px;}.tabs li {display: inline-block;padding: 0 0 10px 0;}a {text-decoration: none;color: #1c84c6;}.tabs li a {display: block;min-width: 70px;padding: 6px 12px;background-color: #f5f5f5;color: #333;line-height: 1.42857143;text-align: center;border: 1px solid #ddd;border-radius: 2px;}.tabs li.active a {background-color: #1c84c6;border-color: #1c84c6;color: #fff;}</style></head><body style="height: 100%; margin: 0"><div class="tabs" style="display: block;"><ul><li onclick="changeCond(1)" value="1"><a href="javascript:;">分时</a></li><li onclick="changeCond(2)" value="2"><a href="javascript:;">日K</a></li><li onclick="changeCond(3)" value="3"><a href="javascript:;">周K</a></li><li onclick="changeCond(4)" value="4"><a href="javascript:;">月K</a></li></ul></div><div id="container" style="height: 80%"></div><div id="container_week" style="height: 80%;display: none"></div><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-nightly@5.1.2-dev.20210512/dist/echarts.min.js"></script><script src="js/jquery-2.1.1.js"></script><script src="js/candlestick-sh.js"></script></body>
</html>

2、js代码

/*** Created by 42 on 2021/6/3.*/
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
var option;
var upColor = '#ec0000';
var upBorderColor = '#8A0000';
var downColor = '#00da3c';
var downBorderColor = '#008F28';
var type = 2;
//建立socket链接
var socket = new SockJS('http://17.18.41.189:8080/ws');
stompClient = Stomp.over(socket);
//stompClient.heartbeat.outgoing = 20000; //若使用STOMP 1.1 版本,默认开启了心跳检测机制(默认值都是10000ms)
stompClient.connect({}, onConnected, onError);function onConnected() {stompClient.subscribe('/topic/public', onMessageReceived);
}function onMessageReceived(payload) {var message = JSON.parse(payload.body);if(message.type === 'ECHARTS' && message.map) {message.candlestickDatas = message.map[type];if(message.candlestickDatas){var candlestickDatas  = message.candlestickDatas[0];var dateStr =candlestickDatas.splice(0, 1);console.log(candlestickDatas+"   "+dateStr)var flag =false;console.log(data0.categoryData[data0.categoryData.length-1]+" --  ")console.log(dateStr[0]+" ##  "+(data0.categoryData[data0.categoryData.length-1] == dateStr[0]))if(data0.categoryData[data0.categoryData.length-1]==dateStr[0]){data0.values[data0.categoryData.length-1]=candlestickDatas;flag =true;}if(!flag){data0.categoryData.push(dateStr[0]);data0.values.push(candlestickDatas);}myChart.setOption(option);}}}function onError(error) {var log = 'Could not connect to WebSocket server. Please refresh this page to try again!';console.log(log)
}// 数据意义:开盘(open),收盘(close),最低(lowest),最高(highest)var data0 = null;//splitData(rowData);
function splitData(rawData) {var categoryData = [];var values = []for (var i = 0; i < rawData.length; i++) {categoryData.push(rawData[i].splice(0, 1)[0]);values.push(rawData[i])}return {categoryData: categoryData,values: values};
}function calculateMA(dayCount) {var result = [];for (var i = 0, len = data0.values.length; i < len; i++) {if (i < dayCount) {result.push('-');continue;}var sum = 0;for (var j = 0; j < dayCount; j++) {sum += data0.values[i - j][1];}result.push(sum / dayCount);}return result;
}if (option && typeof option === 'object') {myChart.setOption(option);
}changeCond(2);function getSeriesName(type) {if(type == 1){return "分时";}else if(type == 2){return "日K";}else if(type == 3){return "周K";}else if(type == 4){return "月K";}
}
function changeCond(param) {type=param;// 1. 定义urlvar url = "http://192.168.41.189:18801/getEchartsDatas?type="+param;// 2. 请求参数// 3. 发送异步请求, 处理响应结果// 向服务器发送Get请求$.get(url, function(result) { // 用于处理结果console.log("result:  "+result);data0 = splitData(result);option = {title: {text: '上证指数',left: 0},tooltip: {trigger: 'axis',axisPointer: {type: 'cross'}},legend: {data: [getSeriesName(param), 'MA5', 'MA10', 'MA20', 'MA30']},grid: {left: '10%',right: '10%',bottom: '15%'},xAxis: {type: 'category',data: data0.categoryData,scale: true,boundaryGap: false,axisLine: {onZero: false},splitLine: {show: false},splitNumber: 20,min: 'dataMin',max: 'dataMax'},yAxis: {scale: true,splitArea: {show: true}},dataZoom: [{type: 'inside',start: 50,end: 100},{show: true,type: 'slider',top: '90%',start: 50,end: 100}],series: [{name: getSeriesName(param),type: 'candlestick',data: data0.values,itemStyle: {color: upColor,color0: downColor,borderColor: upBorderColor,borderColor0: downBorderColor},markPoint: {label: {normal: {formatter: function (param) {return param != null ? Math.round(param.value) : '';}}},data: [{name: 'XX标点',coord: ['2013/5/31', 2300],value: 2300,itemStyle: {color: 'rgb(41,60,85)'}},{name: 'highest value',type: 'max',valueDim: 'highest'},{name: 'lowest value',type: 'min',valueDim: 'lowest'},{name: 'average value on close',type: 'average',valueDim: 'close'}],tooltip: {formatter: function (param) {return param.name + '<br>' + (param.data.coord || '');}}},markLine: {symbol: ['none', 'none'],data: [[{name: 'from lowest to highest',type: 'min',valueDim: 'lowest',symbol: 'circle',symbolSize: 10,label: {show: false},emphasis: {label: {show: false}}},{type: 'max',valueDim: 'highest',symbol: 'circle',symbolSize: 10,label: {show: false},emphasis: {label: {show: false}}}],{name: 'min line on close',type: 'min',valueDim: 'close'},{name: 'max line on close',type: 'max',valueDim: 'close'}]}},{name: 'MA5',type: 'line',data: calculateMA(5),smooth: true,lineStyle: {opacity: 0.5}},{name: 'MA10',type: 'line',data: calculateMA(10),smooth: true,lineStyle: {opacity: 0.5}},{name: 'MA20',type: 'line',data: calculateMA(20),smooth: true,lineStyle: {opacity: 0.5}},{name: 'MA30',type: 'line',data: calculateMA(30),smooth: true,lineStyle: {opacity: 0.5}},]};myChart.setOption(option);}, "json");}

3、java代码

@Scheduled(fixedRate = 10000)
public void sendQueueMessage() {System.out.println("定时广播推送!");ChatMessage chatMessage =new ChatMessage();chatMessage.setType(ChatMessage.MessageType.ECHARTS);chatMessage.setMap(this.getMap());//chatService.sendToUser(chatMessage);redisTemplate.convertAndSend(msgToAll, JsonUtil.parseObjToJson(chatMessage));
}private Map<String,Object> getMap(){Map<String,Object> map= new HashMap<>();map.put("1",getData(500,DateUtil.getCurrentDateStr()));map.put("2",getData(20000,DateUtil.getCurrentDateStr()));map.put("3",getData(50000,DateUtil.getFriday()));map.put("4",getData(80000,DateUtil.getMonthFirstDay()));return map;
}private List<Object> getData(int val,String date){List<Object> list = new ArrayList<>();list.add(date);list.add(getRandom(val));list.add(getRandom(val));list.add(getRandom(val));list.add(getRandom(val));List<Object> candlestickDatas = new ArrayList<>();candlestickDatas.add(list);return candlestickDatas;
}private float getRandom(int val){int random=(int) (Math.random()*9000+1000);return (float)(val+random)/10;
}
@RequestMapping("/getEchartsDatas")
@ResponseBody
public String getEchartsDatas(int type) throws ParseException {String data=null;String nowDate = DateUtil.getCurrentDateStr();String startDate ="2020-01-01";if(type == 1){}else if(type ==2){data = buildData(DateUtil.getDateList(startDate,nowDate),10000);}else if(type ==3){data = buildData(DateUtil.getWeekDate("01/01/2020",DateUtil.DateToString(new Date(),DateUtil.DATE_FORMAT)),50000);}else if(type ==4){data = buildData(DateUtil.getMonthList(startDate,nowDate),80000);}return data;
}private String buildData(List<String> dateList,int val){List<Object> l = null;List<Object> list = new ArrayList<>();for(String date:dateList ){l = new ArrayList<>();l.add(date);l.add(getRandom(val));l.add(getRandom(val));l.add(getRandom(val));l.add(getRandom(val));list.add(l);}return JSON.toJSONString(list);
}

demo链接地址:https://download.csdn.net/download/paj123456789/19405016

K线图:http://127.0.0.1:8080/candlestick-sh.html

群发和点对点发送地址:http://127.0.0.1:8080/index.html

SpringBoot+webSocket+echarts K线图(自动更新)相关推荐

  1. 通过新浪股票接口 实现 Echarts K线图

    股票行情K线图的效果 找到一个好的接口很重要~~(之前自己搜罗的一个接口查回来的数据 JSON  key不带引号 恶心的一匹 然后 数据也不是很好用,直接舍弃) 股票行情图接口-日K历史数据 请求 ( ...

  2. html引入外部股票k线图,怎么做股票网站的K线图 echarts k线图怎么导入动态数据...

    1.加载插件,实例化chart. 2.链接websocket 3.接收数据,处理数据,调用chart的实例,不断更新数据 百度的echart有k线图 更新动态数据方法:html> 50 //加载 ...

  3. echarts K线图

    由于工作需要画K线图,那么使用echarts 来实现k线图,但是由于echarts的k线图不能满足需求,结合了echarts 的k线图实例和日力图实例,再加上自己摸索看官方文档,终于需求实现了, 实例 ...

  4. echarts K线图candlestick

    1.配置datadata:[[open, close, lowest, highest],[],...]及开盘值, 收盘值, 最低值, 最高值2.配置seriesseries:[{type: 'can ...

  5. python 通达信板块_[python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上...

    将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...

  6. 微信小程序使用Echarts绘制K线图与双曲线图以及实现tab切换

    在微信小程序中使用Echarts需要下载相应的文件,可在这下载ec-canvas,该github里也有很多很好的例子,可自行调试学习. 本例子的目录结构: 微信小程序使用Echarts的步骤 在需要引 ...

  7. js股票K线图,比较专业的K线图插件

    由於項目裏面要做個有關交易的平臺,其中要畫k線圖(蠟燭圖),在網上找了很多插件感覺都沒有專業的股票交易平臺弄的k線圖專業,因此為了趕進度,將就用了百度的echarts來做k線圖,結果發現如果點比較少的 ...

  8. php k线图 echarts,利用ECharts.js画K线图的方法示例

    前言 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart 这个是Visual Studio里的自带控件,使用比较简单,不过数据这块需要在后 ...

  9. php k线图 echarts,股票K线图,折线图总结(echarts)

    此处利用bootstrap+echarts画布配置参数实现响应式,并且利用socket实时通信实现数据的实时更新 (一)介绍 ECharts (Enterprise Charts 商业产品图表库) E ...

最新文章

  1. 为什么“15。。。”会导致微信ANR?
  2. mysql 中文的数据类型_mysql数据类型整理
  3. Sublime Text 安装插件的方法
  4. linux下工具exfs用法
  5. 小米10Pro手机双击android,小米10Pro:不完美,但很小米。
  6. android 或者vide的高度和宽度,关于Android中videoView.setVideoPath(“PATH”)的问题!!!急!!...
  7. 屌丝创业从理性“认识你自己”开始
  8. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day1-Java入门
  9. 慕课软件质量保证与测试(习题集)
  10. 如何更快地渲染?深入了解3D渲染性能的指南!(6)
  11. 基于babylon3D模型研究3D骨骼动画(1)
  12. window 64/32 安装配置 eclipse+jdk+mysql+tomcat+maven
  13. 我们需要培养职业化的工作习惯
  14. 地图服务平台技术方案
  15. extjs6 异步树
  16. 运用 HTML+Css+JavaScript 实现京东购物车
  17. javaone_JavaOne 2015继续进行,Java将永远存在(……也许是长篇大论)
  18. pnpm不更新package.json的问题
  19. Spring Boot+Eureka+Spring Cloud微服务快速上手项目实战
  20. 【Carsim Simulink自动驾驶仿真】基于MPC的轨迹跟踪控制

热门文章

  1. php 构造函数的继承
  2. php韩文编码,PHP中GBK和UTF8编码处理(中文,韩文)
  3. fastdfs类似的文件服务器,MogileFS与FastDFS的见解
  4. 谈谈HBuilder以及HTML5+
  5. java毕业设计_动漫之家手机APP代码分析
  6. java求解立方根_java 利用牛頓迭代法求平方根和立方根,不使用Math類
  7. 使用163邮箱发送邮件出现553 authentication is required
  8. 如何抑制蓝牙音频设备的噪声和提升其音质?
  9. 【小应用】使用TensorFlow目标检测模型和OpenCV分析足球比赛
  10. ElGamal数字签名笔记